![]() Home Page Toolkit Overview Using GML User Input Services Finger Tracker Calibrator Frame Grabber Service protocol Obtaining GML Installing GML Licence Developer Documentation Tcl/Tk API The GML Canvas Image processing Tcl Scripts Library List of Classes List of Files C/C++ API List of Classes List of Files |
gmlTcl_Scanners_support_T.h00001 // gml/tcl/wrapper/scanner/gmlTcl_Scanners_support_T.h -- 00002 // 00003 // See "gml/tcl/wrapper/scanner/gmlTcl_Scanners_support.h" 00004 // 00005 // Copyright (c) 2004 CLIPS-IMAG 00006 // 00007 // See the file "gml_LicenseTerms.txt" for information on usage and redistribution 00008 // of this file, and for a DISCLAIMER OF ALL WARRANTIES. 00009 // 00010 // Created in June 2004 (JL). 00011 00012 #ifndef __GMLTCL_SCANNERS_SUPPORT_T__ 00013 #define __GMLTCL_SCANNERS_SUPPORT_T__ 00014 00015 #include "gml/tcl/wrapper/scanner/gmlTcl_Scanners_support.h" 00016 00017 #include "gml/base/gml_Alloc.h" 00018 #include "gml/tcl/wrapper/wrapper/gmlTcl_WrapperParser.h" 00019 #include "gml/tcl/wrapper/wrapper/gmlTcl_WrapperParser_T.h" 00020 00021 template <typename T> 00022 inline static 00023 Tcl_Obj* gmlTcl_NewListObj (unsigned length, T* values) 00024 { 00025 Tcl_Obj** array = (Tcl_Obj**) NULL; 00026 gml_TError err = gml_Malloc (array, length); 00027 if (err != gml_cNoError) return (Tcl_Obj*)NULL; 00028 00029 for (unsigned k = 0; k < length; ++k) { 00030 array[k] = gmlTcl_NewObj (values[k]); 00031 if (array[k] == (Tcl_Obj*)NULL) return (Tcl_Obj*)NULL; 00032 } 00033 return Tcl_NewListObj (length, array); 00034 } 00035 00036 template <typename T> 00037 inline static 00038 Tcl_Obj* gmlTcl_NewObj (gml_TArray<T> data) 00039 { 00040 unsigned length = 0; 00041 Tcl_Obj** array = (Tcl_Obj**)NULL; 00042 gml_TError err = gml_cNoError; 00043 T item; 00044 00045 length = data.Size (); 00046 err = gml_Malloc (array, length); 00047 if (err != gml_cNoError) goto error; 00048 00049 for (unsigned k = 0; k < length; ++k) { 00050 item = data[k]; 00051 array[k] = gmlTcl_NewObj (item); 00052 if (array[k] == (Tcl_Obj*)NULL) goto error; 00053 } 00054 return Tcl_NewListObj (length, array); 00055 00056 error: 00057 gml_TestAndFree (array); 00058 return (Tcl_Obj*)NULL; 00059 } 00060 00061 00062 template<class T> 00063 int gmlTclWrapParseObjToArray (Tcl_Interp* interp, Tcl_Obj* arg, gml_TArray<T>** storage) 00064 { 00065 int res = TCL_OK; 00066 gml_TError err = gml_cNoError; 00067 int lobjc = 0; 00068 Tcl_Obj** lobjv = (Tcl_Obj**)NULL; 00069 gml_TArray<T>* theArray = (gml_TArray<T>*)NULL; 00070 00071 res = Tcl_ListObjGetElements (interp, arg, &lobjc, &lobjv); 00072 if (res != TCL_OK) goto exit; 00073 00074 err = gml_New (theArray); 00075 if (err != gml_cNoError) goto exit; 00076 00077 err = theArray->Init (lobjc); 00078 if (err != gml_cNoError) goto exit; 00079 00080 for (int i = 0; (res == TCL_OK) && (i < lobjc); i++) { 00081 T* value = new T(); 00082 res = gmlTclWrapParseObjToVal (interp, lobjv[i], value); 00083 if (res == TCL_OK) goto exit; 00084 (*theArray)[i] = *value; 00085 delete value; 00086 if (res != TCL_OK) goto exit; 00087 } 00088 00089 *storage = theArray; 00090 00091 exit: 00092 if (err != gml_cNoError) { 00093 Tcl_AppendResult (interp, "could not parse array: ", 00094 gml_ErrorGetMessage (err), (char*)NULL); 00095 gml_TestDisposeAndDelete (theArray); 00096 res = TCL_ERROR; 00097 } 00098 return res; 00099 } 00100 00101 00102 #endif // __GMLTCL_SCANNERS_SUPPORT_T__ 00103
Generated on Tue Jun 12 14:03:27 2007 for gml by
Doxygen 1.5.2.
|
Contact: julien (dot) letessier (at) gmail (dot) com.
Copyright (c) 2000-2007 CLIPS-IMAG Laboratory, Grenoble, France. All rights reserved. W3CXHTML 1.0 W3CCSS 2.0 |