Alias<ISink> MmaSink::outputFunction(const symbolGB & x,long L) { #ifdef DEBUG_MMASINK GBStream << "sink:function " << x.value().chars() << ' ' << L << ' ' << this << '\n'; #endif Alias<ISink> result(outputFunction((const char *)x.value().chars(),L)); #ifdef DEBUG_MMASINK checkforerror(); #endif return result; };
kj::Own<TlsPskAdaptor> TlsPskAdaptorFactory::addServerTlsAdaptor(kj::Own<kj::AsyncIoStream>&& stream) { auto adaptor = kj::heap<TlsPskAdaptor>(kj::mv(stream)); adaptor->setChannel(kj::heap<Botan::TLS::Server>(adaptor->outputFunction(), adaptor->dataCallback(), adaptor->alertCallback(), adaptor->handshakeCallback(), equipment->sessionManager, equipment->credentialsManager, equipment->policy, equipment->rng)); return kj::mv(adaptor); }
bool svm::classify(const dvector& feature, outputVector& output) const { dvector result(nClasses); bool donorm=getParameters().normalizeData; dvector tmp; const dvector* data; if (donorm) { tmp.subtract(feature,offset); tmp.edivide(scale); data=&tmp; } else { data=&feature; } bool reject=true; assert(static_cast<int>(kernels.size()) == nClasses); for (int currentClass=0; currentClass<nClasses; currentClass++) { double tmp=outputFunction(*data, currentClass); reject=reject && (tmp < 0); if (tmp < -1.0) { tmp=-1.0; } else if (tmp > 1.0) { tmp=1.0; } result[currentClass]=(tmp+1.0)/2.0; } //debug("result=" << result << "\n"); if (getParameters().sumToOne) { double m1=result.minimum(); result.add(-m1); double s=result.sumOfElements(); if (lti::abs(s) > std::numeric_limits<double>::epsilon()) { result.multiply(1.0/s); } else { result.fill(0.0); } } return outTemplate.apply(result, output); }
void outputMessage (const std::string &message) { outputFunction (message); }
/* print the parsed structures */ void vtkParseOutput(FILE *fp, FileInfo *fileInfo) { ClassInfo *data; NewClassInfo *classData; int i; data = fileInfo->MainClass; fprintf(fp,"// ClientServer wrapper for %s object\n//\n",data->Name); fprintf(fp,"#define VTK_WRAPPING_CXX\n"); if(strcmp("vtkObjectBase", data->Name) != 0) { /* Block inclusion of full streams. */ fprintf(fp,"#define VTK_STREAMS_FWD_ONLY\n"); } fprintf(fp,"#include \"vtkSystemIncludes.h\"\n"); fprintf(fp,"#include \"%s.h\"\n",data->Name); if (classUsesStdString(data)) { fprintf(fp,"#include \"vtkStdString.h\"\n"); } fprintf(fp,"#include \"vtkClientServerInterpreter.h\"\n"); fprintf(fp,"#include \"vtkClientServerStream.h\"\n\n"); #if 0 if (!strcmp("vtkObject",data->Name)) { fprintf(fp,"#include \"vtkClientServerProgressObserver.h\"\n\n"); } #endif if (!strcmp("vtkObjectBase",data->Name)) { fprintf(fp,"#include <vtksys/ios/sstream>\n"); } if (!data->IsAbstract) { fprintf(fp,"\nvtkObjectBase *%sClientServerNewCommand()\n{\n",data->Name); fprintf(fp," return %s::New();\n}\n\n",data->Name); } for (i = 0; i < data->NumberOfSuperClasses; i++) { { fprintf(fp, "int %sCommand(vtkClientServerInterpreter*, vtkObjectBase*," " const char*, const vtkClientServerStream&," " vtkClientServerStream& resultStream);\n", data->SuperClasses[i]); } } fprintf(fp, "\n" "int VTK_EXPORT" " %sCommand(vtkClientServerInterpreter *arlu, vtkObjectBase *ob," " const char *method, const vtkClientServerStream& msg," " vtkClientServerStream& resultStream)\n" "{\n", data->Name); if(strcmp(data->Name, "vtkObjectBase") == 0) { fprintf(fp," %s *op = ob;\n", data->Name); } else { fprintf(fp," %s *op = %s::SafeDownCast(ob);\n", data->Name, data->Name); fprintf(fp, " if(!op)\n" " {\n" " vtkOStrStreamWrapper vtkmsg;\n" " vtkmsg << \"Cannot cast \" << ob->GetClassName() << \" object to %s. \"\n" " << \"This probably means the class specifies the incorrect superclass in vtkTypeMacro.\";\n" " resultStream.Reset();\n" " resultStream << vtkClientServerStream::Error\n" " << vtkmsg.str() << 0 << vtkClientServerStream::End;\n" " return 0;\n" " }\n", data->Name); } fprintf(fp, " (void)arlu;\n"); /*fprintf(fp," vtkClientServerStream resultStream;\n");*/ /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions[i]; outputFunction(fp, data); } /* try superclasses */ for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp,"\n if (%sCommand(arlu, op,method,msg,resultStream))\n", data->SuperClasses[i]); fprintf(fp," {\n return 1;\n }\n"); } /* Add the Print method to vtkObjectBase. */ if (!strcmp("vtkObjectBase",data->Name)) { fprintf(fp, " if (!strcmp(\"Print\",method) && msg.GetNumberOfArguments(0) == 2)\n" " {\n" " vtksys_ios::ostringstream buf_with_warning_C4701;\n" " op->Print(buf_with_warning_C4701);\n" " resultStream.Reset();\n" " resultStream << vtkClientServerStream::Reply\n" " << buf_with_warning_C4701.str().c_str()\n" " << vtkClientServerStream::End;\n" " return 1;\n" " }\n"); } /* Add the special form of AddObserver to vtkObject. */ if (!strcmp("vtkObject",data->Name)) { fprintf(fp, " if (!strcmp(\"AddObserver\",method) && msg.GetNumberOfArguments(0) == 4)\n" " {\n" " const char* event;\n" " vtkClientServerStream css;\n" " if(msg.GetArgument(0, 2, &event) && msg.GetArgument(0, 3, &css))\n" " {\n" " return arlu->NewObserver(op, event, css);\n" " }\n" " }\n"); } fprintf(fp, " if(resultStream.GetNumberOfMessages() > 0 &&\n" " resultStream.GetCommand(0) == vtkClientServerStream::Error &&\n" " resultStream.GetNumberOfArguments(0) > 1)\n" " {\n" " /* A superclass wrapper prepared a special message. */\n" " return 0;\n" " }\n" " vtkOStrStreamWrapper vtkmsg;\n" " vtkmsg << \"Object type: %s, could not find requested method: \\\"\"\n" " << method << \"\\\"\\nor the method was called with incorrect arguments.\\n\";\n" " resultStream.Reset();\n" " resultStream << vtkClientServerStream::Error\n" " << vtkmsg.str() << vtkClientServerStream::End;\n" " vtkmsg.rdbuf()->freeze(0);\n", data->Name); fprintf(fp, " return 0;\n" "}\n"); classData = (NewClassInfo*)malloc(sizeof(NewClassInfo)); getClassInfo(fileInfo,data,classData); output_InitFunction(fp,classData); free(classData); }
/* print the parsed structures */ int main(int argc, char *argv[]) { OptionInfo *options; FileInfo *file_info; ClassInfo *data; FILE *fp; int i; /* get command-line args and parse the header file */ file_info = vtkParse_Main(argc, argv); /* get the command-line options */ options = vtkParse_GetCommandLineOptions(); /* get the output file */ fp = fopen(options->OutputFileName, "w"); if (!fp) { fprintf(stderr, "Error opening output file %s\n", options->OutputFileName); exit(1); } /* get the main class */ if ((data = file_info->MainClass) == NULL) { fclose(fp); exit(0); } /* get the hierarchy info for accurate typing */ if (options->HierarchyFileName) { hierarchyInfo = vtkParseHierarchy_ReadFile(options->HierarchyFileName); } fprintf(fp,"// java wrapper for %s object\n//\n",data->Name); fprintf(fp,"\npackage vtk;\n"); if (strcmp("vtkObjectBase",data->Name)) { fprintf(fp,"import vtk.*;\n"); } fprintf(fp,"\npublic class %s",data->Name); if (strcmp("vtkObjectBase",data->Name)) { if (data->NumberOfSuperClasses) { fprintf(fp," extends %s",data->SuperClasses[0]); } } fprintf(fp,"\n{\n"); /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions[i]; outputFunction(fp, data); } HandleDataArray(fp, data); if (!data->NumberOfSuperClasses) { if (!data->IsAbstract) { fprintf(fp,"\n public %s() {", data->Name); fprintf(fp,"\n this.vtkId = this.VTKInit();"); fprintf(fp,"\n vtkObject.JAVA_OBJECT_MANAGER.registerJavaObject(this.vtkId, this);"); fprintf(fp,"\n }\n"); } else { fprintf(fp,"\n public %s() { super(); }\n",data->Name); } fprintf(fp,"\n public %s(long id) {", data->Name); fprintf(fp,"\n super();"); fprintf(fp,"\n this.vtkId = id;"); fprintf(fp,"\n this.VTKRegister();"); fprintf(fp,"\n vtkObject.JAVA_OBJECT_MANAGER.registerJavaObject(this.vtkId, this);"); fprintf(fp,"\n }\n"); fprintf(fp,"\n protected long vtkId;\n"); fprintf(fp,"\n public long GetVTKId() { return this.vtkId; }"); /* if we are a base class and have a delete method */ if (data->HasDelete) { fprintf(fp,"\n public static native void VTKDeleteReference(long id);"); fprintf(fp,"\n public static native String VTKGetClassNameFromReference(long id);"); fprintf(fp,"\n protected native void VTKDelete();"); fprintf(fp,"\n protected native void VTKRegister();"); fprintf(fp,"\n public void Delete() {"); fprintf(fp,"\n vtkObject.JAVA_OBJECT_MANAGER.unRegisterJavaObject(this.vtkId);"); fprintf(fp,"\n this.vtkId = 0;"); fprintf(fp,"\n }"); } } /* Special case for vtkObject */ else if ( strcmp("vtkObject",data->Name) == 0 ) { fprintf(fp,"\n public static vtk.vtkJavaMemoryManager JAVA_OBJECT_MANAGER = new vtk.vtkJavaMemoryManagerImpl();"); fprintf(fp,"\n public %s() {", data->Name); fprintf(fp,"\n super();"); fprintf(fp,"\n this.vtkId = this.VTKInit();"); fprintf(fp,"\n vtkObject.JAVA_OBJECT_MANAGER.registerJavaObject(this.vtkId, this);"); fprintf(fp,"\n }\n"); fprintf(fp,"\n public %s(long id) { super(id); }\n",data->Name); } else { fprintf(fp,"\n public %s() { super(); }\n",data->Name); fprintf(fp,"\n public %s(long id) { super(id); }\n",data->Name); } if (!data->IsAbstract) { fprintf(fp," public native long VTKInit();\n"); } /* fprintf(fp," protected native void VTKCastInit();\n"); */ if (!strcmp("vtkObject",data->Name)) { /* Add the Print method to vtkObject. */ fprintf(fp," public native String Print();\n"); #ifndef VTK_LEGACY_REMOVE /* Add the PrintRevisions method to vtkObject. */ fprintf(fp," public native String PrintRevisions();\n"); #endif /* Add the default toString from java object */ fprintf(fp," public String toString() { return Print(); }\n"); } if (!strcmp("vtkObject",data->Name)) { fprintf(fp," public native int AddObserver(String id0, Object id1, String id2);\n"); } fprintf(fp,"\n}\n"); { size_t cc; size_t len; char *dir; char *fname; /*const */char javaDone[] = "VTKJavaWrapped"; FILE* tfp; fname = options->OutputFileName; dir = (char*)malloc(strlen(fname) + strlen(javaDone) + 2); sprintf(dir, "%s", fname); len = strlen(dir); for ( cc = len-1; cc > 0; cc -- ) { if ( dir[cc] == '/' || dir[cc] == '\\' ) { dir[cc+1] = 0; break; } } strcat(dir, javaDone); tfp = fopen(dir, "w"); if ( tfp ) { fprintf(tfp, "File: %s\n", fname); fclose(tfp); } free(dir); } vtkParse_Free(file_info); return 0; }
/* print the parsed structures */ void vtkParseOutput(FILE *fp, FileInfo *file_info) { OptionInfo *options; ClassInfo *data; int i; if ((data = file_info->MainClass) == NULL) { return; } /* get the command-line options */ options = vtkParse_GetCommandLineOptions(); /* get the hierarchy info for accurate typing */ if (options->HierarchyFileNames) { hierarchyInfo = vtkParseHierarchy_ReadFiles( options->NumberOfHierarchyFileNames, options->HierarchyFileNames); } fprintf(fp,"// java wrapper for %s object\n//\n",data->Name); fprintf(fp,"\npackage vtk;\n"); /* beans */ if (!data->NumberOfSuperClasses) { fprintf(fp,"import java.beans.*;\n"); } if (strcmp("vtkObject",data->Name)) { fprintf(fp,"import vtk.*;\n"); } fprintf(fp,"\npublic class %s",data->Name); if (strcmp("vtkObject",data->Name)) { if (data->NumberOfSuperClasses) fprintf(fp," extends %s",data->SuperClasses[0]); } fprintf(fp,"\n{\n"); fprintf(fp," public %s getThis%s() { return this;}\n\n", data->Name, data->Name+3); /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions[i]; outputFunction(fp, data); } if (!data->NumberOfSuperClasses) { fprintf(fp,"\n public %s() { this.VTKInit();};\n",data->Name); fprintf(fp," protected int vtkId = 0;\n"); /* beans */ fprintf(fp," public void addPropertyChangeListener(PropertyChangeListener l)\n {\n"); fprintf(fp," changes.addPropertyChangeListener(l);\n }\n"); fprintf(fp," public void removePropertyChangeListener(PropertyChangeListener l)\n {\n"); fprintf(fp," changes.removePropertyChangeListener(l);\n }\n"); fprintf(fp," protected PropertyChangeSupport changes = new PropertyChangeSupport(this);\n\n"); /* if we are a base class and have a delete method */ if (data->HasDelete) { fprintf(fp,"\n public native void VTKDelete();\n"); fprintf(fp," protected void finalize() { this.VTKDelete();};\n"); } } if ((!data->IsAbstract)&& strcmp(data->Name,"vtkDataWriter") && strcmp(data->Name,"vtkPointSet") && strcmp(data->Name,"vtkDataSetSource") ) { fprintf(fp," public native void VTKInit();\n"); } if (!strcmp("vtkObject",data->Name)) { fprintf(fp," public native String Print();\n"); } fprintf(fp,"}\n"); }
/* print the parsed structures */ void vtkParseOutput(FILE *fp, FileInfo *data) { int i; fprintf(fp,"// java wrapper for %s object\n//\n",data->ClassName); fprintf(fp,"\npackage vtk;\n"); /* beans */ if (!data->NumberOfSuperClasses) { fprintf(fp,"import java.beans.*;\n"); } if (strcmp("vtkObject",data->ClassName)) { fprintf(fp,"import vtk.*;\n"); } fprintf(fp,"\npublic class %s",data->ClassName); if (strcmp("vtkObject",data->ClassName)) { if (data->NumberOfSuperClasses) fprintf(fp," extends %s",data->SuperClasses[0]); } fprintf(fp,"\n{\n"); fprintf(fp," public %s getThis%s() { return this;}\n\n", data->ClassName, data->ClassName+3); /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions + i; outputFunction(fp, data); } if (!data->NumberOfSuperClasses) { fprintf(fp,"\n public %s() { this.VTKInit();};\n",data->ClassName); fprintf(fp," protected int vtkId = 0;\n"); /* beans */ fprintf(fp," public void addPropertyChangeListener(PropertyChangeListener l)\n {\n"); fprintf(fp," changes.addPropertyChangeListener(l);\n }\n"); fprintf(fp," public void removePropertyChangeListener(PropertyChangeListener l)\n {\n"); fprintf(fp," changes.removePropertyChangeListener(l);\n }\n"); fprintf(fp," protected PropertyChangeSupport changes = new PropertyChangeSupport(this);\n\n"); /* if we are a base class and have a delete method */ if (data->HasDelete) { fprintf(fp,"\n public native void VTKDelete();\n"); fprintf(fp," protected void finalize() { this.VTKDelete();};\n"); } } if ((!data->IsAbstract)&& strcmp(data->ClassName,"vtkDataWriter") && strcmp(data->ClassName,"vtkPointSet") && strcmp(data->ClassName,"vtkDataSetSource") ) { fprintf(fp," public native void VTKInit();\n"); } if (!strcmp("vtkObject",data->ClassName)) { fprintf(fp," public native String Print();\n"); } fprintf(fp,"}\n"); }
/* print the parsed structures */ void vtkParseOutput(FILE *fp, FileInfo *file_info) { OptionInfo *options; ClassInfo *data; int i; if ((data = file_info->MainClass) == NULL) { return; } /* get the command-line options */ options = vtkParse_GetCommandLineOptions(); /* get the hierarchy info for accurate typing */ if (options->HierarchyFileName) { hierarchyInfo = vtkParseHierarchy_ReadFile(options->HierarchyFileName); } fprintf(fp,"// java wrapper for %s object\n//\n",data->Name); fprintf(fp,"#define VTK_WRAPPING_CXX\n"); if (strcmp("vtkObject",data->Name) != 0) { /* Block inclusion of full streams. */ fprintf(fp,"#define VTK_STREAMS_FWD_ONLY\n"); } fprintf(fp,"#include \"vtkSystemIncludes.h\"\n"); fprintf(fp,"#include \"%s.h\"\n",data->Name); fprintf(fp,"#include \"vtkJavaUtil.h\"\n\n"); fprintf(fp,"#include \"vtkStdString.h\"\n\n"); fprintf(fp,"#include <vtksys/ios/sstream>\n"); for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp,"extern \"C\" JNIEXPORT void* %s_Typecast(void *op,char *dType);\n", data->SuperClasses[i]); } fprintf(fp,"\nextern \"C\" JNIEXPORT void* %s_Typecast(void *me,char *dType)\n{\n",data->Name); if (data->NumberOfSuperClasses > 0) { fprintf(fp," void* res;\n"); } fprintf(fp," if (!strcmp(\"%s\",dType)) { return me; }\n", data->Name); /* check our superclasses */ for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp," if ((res= %s_Typecast(me,dType)) != NULL)", data->SuperClasses[i]); fprintf(fp," { return res; }\n"); } fprintf(fp," return NULL;\n"); fprintf(fp,"}\n\n"); HandleDataArray(fp, data); /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions[i]; outputFunction(fp, data); } if ((!data->NumberOfSuperClasses)&&(data->HasDelete)) { fprintf(fp,"\nextern \"C\" JNIEXPORT void JNICALL Java_vtk_%s_VTKDeleteReference(JNIEnv *,jclass,jlong id)\n", data->Name); fprintf(fp,"{\n %s *op;\n",data->Name); fprintf(fp," op = reinterpret_cast<%s*>(id);\n", data->Name); fprintf(fp," op->Delete();\n"); fprintf(fp,"}\n"); fprintf(fp,"\nextern \"C\" JNIEXPORT void JNICALL Java_vtk_%s_VTKDelete(JNIEnv *env,jobject obj)\n", data->Name); fprintf(fp,"{\n %s *op;\n",data->Name); fprintf(fp," op = (%s *)vtkJavaGetPointerFromObject(env,obj);\n", data->Name); fprintf(fp," op->Delete();\n"); fprintf(fp,"}\n"); fprintf(fp,"\nextern \"C\" JNIEXPORT void JNICALL Java_vtk_%s_VTKRegister(JNIEnv *env,jobject obj)\n", data->Name); fprintf(fp,"{\n %s *op;\n",data->Name); fprintf(fp," op = (%s *)vtkJavaGetPointerFromObject(env,obj);\n", data->Name); fprintf(fp," op->Register(op);\n"); fprintf(fp,"}\n"); } if (!data->IsAbstract) { fprintf(fp,"\nextern \"C\" JNIEXPORT jlong JNICALL Java_vtk_%s_VTKInit(JNIEnv *, jobject)", data->Name); fprintf(fp,"\n{"); fprintf(fp,"\n %s *aNewOne = %s::New();",data->Name, data->Name); fprintf(fp,"\n return (jlong)(size_t)(void*)aNewOne;"); fprintf(fp,"\n}\n"); } /* for vtkRenderWindow we want to add a special method to support * native AWT rendering * * Including vtkJavaAwt.h provides inline implementations of * Java_vtk_vtkPanel_RenderCreate, Java_vtk_vtkPanel_Lock and * Java_vtk_vtkPanel_UnLock. */ if (!strcmp("vtkRenderWindow",data->Name)) { fprintf(fp,"\n#include \"vtkJavaAwt.h\"\n\n"); } if (!strcmp("vtkObject",data->Name)) { /* Add the Print method to vtkObject. */ fprintf(fp,"\nextern \"C\" JNIEXPORT jstring JNICALL Java_vtk_vtkObject_Print(JNIEnv *env,jobject obj)\n"); fprintf(fp,"{\n vtkObject *op;\n"); fprintf(fp," jstring tmp;\n\n"); fprintf(fp," op = (vtkObject *)vtkJavaGetPointerFromObject(env,obj);\n"); fprintf(fp," vtksys_ios::ostringstream vtkmsg_with_warning_C4701;\n"); fprintf(fp," op->Print(vtkmsg_with_warning_C4701);\n"); fprintf(fp," vtkmsg_with_warning_C4701.put('\\0');\n"); fprintf(fp," tmp = vtkJavaMakeJavaString(env,vtkmsg_with_warning_C4701.str().c_str());\n"); fprintf(fp," return tmp;\n"); fprintf(fp,"}\n"); /* Add the PrintRevisions method to vtkObject. */ fprintf(fp,"\nextern \"C\" JNIEXPORT jstring JNICALL Java_vtk_vtkObject_PrintRevisions(JNIEnv *env,jobject obj)\n"); fprintf(fp,"{\n vtkObject *op;\n"); fprintf(fp," jstring tmp;\n\n"); fprintf(fp," op = (vtkObject *)vtkJavaGetPointerFromObject(env,obj);\n"); fprintf(fp," vtksys_ios::ostringstream vtkmsg_with_warning_C4701;\n"); fprintf(fp," op->PrintRevisions(vtkmsg_with_warning_C4701);\n"); fprintf(fp," vtkmsg_with_warning_C4701.put('\\0');\n"); fprintf(fp," tmp = vtkJavaMakeJavaString(env,vtkmsg_with_warning_C4701.str().c_str());\n"); fprintf(fp," return tmp;\n"); fprintf(fp,"}\n"); fprintf(fp,"\nextern \"C\" JNIEXPORT jint JNICALL Java_vtk_vtkObject_AddObserver(JNIEnv *env,jobject obj, jstring id0, jobject id1, jstring id2)\n"); fprintf(fp,"{\n vtkObject *op;\n"); fprintf(fp," vtkJavaCommand *cbc = vtkJavaCommand::New();\n"); fprintf(fp," cbc->AssignJavaVM(env);\n"); fprintf(fp," cbc->SetGlobalRef(env->NewGlobalRef(id1));\n"); fprintf(fp," char *temp2;\n"); fprintf(fp," temp2 = vtkJavaUTFToChar(env,id2);\n"); fprintf(fp," cbc->SetMethodID(env->GetMethodID(env->GetObjectClass(id1),temp2,\"()V\"));\n"); fprintf(fp," char *temp0;\n"); fprintf(fp," temp0 = vtkJavaUTFToChar(env,id0);\n"); fprintf(fp," op = (vtkObject *)vtkJavaGetPointerFromObject(env,obj);\n"); fprintf(fp," unsigned long temp20;\n"); fprintf(fp," temp20 = op->AddObserver(temp0,cbc);\n"); fprintf(fp," if (temp0) delete[] temp0;\n"); fprintf(fp," if (temp2) delete[] temp2;\n"); fprintf(fp," cbc->Delete();\n"); fprintf(fp," return temp20;\n}\n"); } }
/* print the parsed structures */ int main(int argc, char *argv[]) { OptionInfo *options; FileInfo *fileInfo; ClassInfo *data; NamespaceInfo *ns; char nsname[1024]; struct { NamespaceInfo *ns; size_t nsnamepos; int n; } nsstack[32]; size_t nspos; FILE *fp; NewClassInfo *classData; int i; /* get command-line args and parse the header file */ fileInfo = vtkParse_Main(argc, argv); /* get the command-line options */ options = vtkParse_GetCommandLineOptions(); /* get the output file */ fp = fopen(options->OutputFileName, "w"); if (!fp) { fprintf(stderr, "Error opening output file %s\n", options->OutputFileName); exit(1); } data = fileInfo->MainClass; /* Set up the stack. */ nspos = 0; nsstack[nspos].ns = fileInfo->Contents; nsstack[nspos].nsnamepos = 0; nsstack[nspos].n = 0; nsname[nsstack[nspos].nsnamepos] = '\0'; ns = nsstack[nspos].ns; while (!data && ns) { if (ns->Name) { size_t namelen = strlen(nsname); snprintf(nsname + namelen, sizeof(nsname) - namelen, "::%s", ns->Name); } if (ns->NumberOfClasses > 0) { data = ns->Classes[0]; break; } if (ns->NumberOfNamespaces > nsstack[nspos].n) { /* Use the next namespace. */ ns = ns->Namespaces[nsstack[nspos].n]; nsstack[nspos].n++; /* Go deeper. */ nspos++; nsstack[nspos].ns = ns; nsstack[nspos].nsnamepos = strlen(nsname); nsstack[nspos].n = 0; } else { if (nspos) { --nspos; /* Reset the namespace name. */ nsname[nsstack[nspos].nsnamepos] = '\0'; /* Go back up the stack. */ ns = nsstack[nspos].ns; } else { /* Nothing left to search. */ ns = NULL; } } } if(!data) { fclose(fp); exit(1); } /* get the hierarchy info for accurate typing */ if (options->HierarchyFileName) { hierarchyInfo = vtkParseHierarchy_ReadFile(options->HierarchyFileName); if (hierarchyInfo) { /* resolve using declarations within the header files */ vtkWrap_ApplyUsingDeclarations(data, fileInfo, hierarchyInfo); } } fprintf(fp,"// ClientServer wrapper for %s object\n//\n",data->Name); fprintf(fp,"#define VTK_WRAPPING_CXX\n"); if(strcmp("vtkObjectBase", data->Name) != 0) { /* Block inclusion of full streams. */ fprintf(fp,"#define VTK_STREAMS_FWD_ONLY\n"); } fprintf(fp,"#include \"%s.h\"\n",data->Name); fprintf(fp,"#include \"vtkSystemIncludes.h\"\n"); if (classUsesStdString(data)) { fprintf(fp,"#include \"vtkStdString.h\"\n"); } fprintf(fp,"#include \"vtkClientServerInterpreter.h\"\n"); fprintf(fp,"#include \"vtkClientServerStream.h\"\n\n"); #if 0 if (!strcmp("vtkObject",data->Name)) { fprintf(fp,"#include \"vtkClientServerProgressObserver.h\"\n\n"); } #endif if (!strcmp("vtkObjectBase",data->Name)) { fprintf(fp,"#include <sstream>\n"); } if (*nsname) { fprintf(fp,"using namespace %s;\n", nsname); } if (!data->IsAbstract) { fprintf(fp,"\nvtkObjectBase *%sClientServerNewCommand(void* /*ctx*/)\n{\n",data->Name); fprintf(fp," return %s::New();\n}\n\n",data->Name); } fprintf(fp, "\n" "int VTK_EXPORT" " %sCommand(vtkClientServerInterpreter *arlu, vtkObjectBase *ob," " const char *method, const vtkClientServerStream& msg," " vtkClientServerStream& resultStream, void* /*ctx*/)\n" "{\n", data->Name); if(strcmp(data->Name, "vtkObjectBase") == 0) { fprintf(fp," %s *op = ob;\n", data->Name); } else { fprintf(fp," %s *op = %s::SafeDownCast(ob);\n", data->Name, data->Name); fprintf(fp, " if(!op)\n" " {\n" " vtkOStrStreamWrapper vtkmsg;\n" " vtkmsg << \"Cannot cast \" << ob->GetClassName() << \" object to %s. \"\n" " << \"This probably means the class specifies the incorrect superclass in vtkTypeMacro.\";\n" " resultStream.Reset();\n" " resultStream << vtkClientServerStream::Error\n" " << vtkmsg.str() << 0 << vtkClientServerStream::End;\n" " return 0;\n" " }\n", data->Name); } fprintf(fp, " (void)arlu;\n"); /*fprintf(fp," vtkClientServerStream resultStream;\n");*/ /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions[i]; outputFunction(fp, data); } /* try superclasses */ for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp, "\n" " {\n" " const char* commandName = \"%s\";\n" " if (arlu->HasCommandFunction(commandName) &&\n" " arlu->CallCommandFunction(commandName, op, method, msg, resultStream)) { return 1; }\n" " }\n", data->SuperClasses[i]); } /* Add the Print method to vtkObjectBase. */ if (!strcmp("vtkObjectBase",data->Name)) { fprintf(fp, " if (!strcmp(\"Print\",method) && msg.GetNumberOfArguments(0) == 2)\n" " {\n" " std::ostringstream buf_with_warning_C4701;\n" " op->Print(buf_with_warning_C4701);\n" " resultStream.Reset();\n" " resultStream << vtkClientServerStream::Reply\n" " << buf_with_warning_C4701.str().c_str()\n" " << vtkClientServerStream::End;\n" " return 1;\n" " }\n"); } /* Add the special form of AddObserver to vtkObject. */ if (!strcmp("vtkObject",data->Name)) { fprintf(fp, " if (!strcmp(\"AddObserver\",method) && msg.GetNumberOfArguments(0) == 4)\n" " {\n" " const char* event;\n" " vtkClientServerStream css;\n" " if(msg.GetArgument(0, 2, &event) && msg.GetArgument(0, 3, &css))\n" " {\n" " return arlu->NewObserver(op, event, css);\n" " }\n" " }\n"); } fprintf(fp, " if(resultStream.GetNumberOfMessages() > 0 &&\n" " resultStream.GetCommand(0) == vtkClientServerStream::Error &&\n" " resultStream.GetNumberOfArguments(0) > 1)\n" " {\n" " /* A superclass wrapper prepared a special message. */\n" " return 0;\n" " }\n" " vtkOStrStreamWrapper vtkmsg;\n" " vtkmsg << \"Object type: %s, could not find requested method: \\\"\"\n" " << method << \"\\\"\\nor the method was called with incorrect arguments.\\n\";\n" " resultStream.Reset();\n" " resultStream << vtkClientServerStream::Error\n" " << vtkmsg.str() << vtkClientServerStream::End;\n" " vtkmsg.rdbuf()->freeze(0);\n", data->Name); fprintf(fp, " return 0;\n" "}\n"); classData = (NewClassInfo*)malloc(sizeof(NewClassInfo)); getClassInfo(fileInfo,data,classData); output_InitFunction(fp,classData); free(classData); vtkParse_Free(fileInfo); fclose(fp); return 0; }
/* print the parsed structures */ int main(int argc, char *argv[]) { OptionInfo *options; FileInfo *file_info; ClassInfo *data; FILE *fp; int i; /* pre-define a macro to identify the language */ vtkParse_DefineMacro("__VTK_WRAP_JAVA__", 0); /* get command-line args and parse the header file */ file_info = vtkParse_Main(argc, argv); /* some utility functions require the string cache */ stringCache = file_info->Strings; /* get the command-line options */ options = vtkParse_GetCommandLineOptions(); /* get the output file */ fp = fopen(options->OutputFileName, "w"); if (!fp) { fprintf(stderr, "Error opening output file %s\n", options->OutputFileName); exit(1); } /* get the main class */ if ((data = file_info->MainClass) == NULL) { fclose(fp); exit(1); } /* get the hierarchy info for accurate typing */ if (options->HierarchyFileNames) { hierarchyInfo = vtkParseHierarchy_ReadFiles( options->NumberOfHierarchyFileNames, options->HierarchyFileNames); if (hierarchyInfo) { /* resolve using declarations within the header files */ vtkWrap_ApplyUsingDeclarations(data, file_info, hierarchyInfo); /* expand typedefs */ vtkWrap_ExpandTypedefs(data, file_info, hierarchyInfo); } } fprintf(fp,"// java wrapper for %s object\n//\n",data->Name); fprintf(fp,"#define VTK_WRAPPING_CXX\n"); if (strcmp("vtkObjectBase",data->Name) != 0) { /* Block inclusion of full streams. */ fprintf(fp,"#define VTK_STREAMS_FWD_ONLY\n"); } fprintf(fp,"#include \"vtkSystemIncludes.h\"\n"); fprintf(fp,"#include \"%s.h\"\n",data->Name); fprintf(fp,"#include \"vtkJavaUtil.h\"\n\n"); fprintf(fp,"#include \"vtkStdString.h\"\n\n"); fprintf(fp,"#include <sstream>\n"); for (i = 0; i < data->NumberOfSuperClasses; i++) { char *safe_name = vtkWrap_SafeSuperclassName(data->SuperClasses[i]); const char *safe_superclass = safe_name ? safe_name : data->SuperClasses[i]; /* if a template class is detected add a typedef */ if (safe_name) { fprintf(fp,"typedef %s %s;\n", data->SuperClasses[i], safe_name); } fprintf(fp,"extern \"C\" JNIEXPORT void* %s_Typecast(void *op,char *dType);\n", safe_superclass); free(safe_name); } fprintf(fp,"\nextern \"C\" JNIEXPORT void* %s_Typecast(void *me,char *dType)\n{\n",data->Name); if (data->NumberOfSuperClasses > 0) { fprintf(fp," void* res;\n"); } fprintf(fp," if (!strcmp(\"%s\",dType)) { return me; }\n", data->Name); /* check our superclasses */ for (i = 0; i < data->NumberOfSuperClasses; i++) { char *safe_name = vtkWrap_SafeSuperclassName(data->SuperClasses[i]); const char *safe_superclass = safe_name ? safe_name : data->SuperClasses[i]; fprintf(fp," if ((res= %s_Typecast(me,dType)) != NULL)", safe_superclass); fprintf(fp," { return res; }\n"); free(safe_name); } fprintf(fp," return NULL;\n"); fprintf(fp,"}\n\n"); HandleDataArray(fp, data); /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions[i]; outputFunction(fp, data); } if ((!data->NumberOfSuperClasses)&&(data->HasDelete)) { fprintf(fp,"\nextern \"C\" JNIEXPORT void JNICALL Java_vtk_%s_VTKDeleteReference(JNIEnv *,jclass,jlong id)\n", data->Name); fprintf(fp,"{\n %s *op;\n",data->Name); fprintf(fp," op = reinterpret_cast<%s*>(id);\n", data->Name); fprintf(fp," op->Delete();\n"); fprintf(fp,"}\n"); fprintf(fp,"\nextern \"C\" JNIEXPORT jstring JNICALL Java_vtk_%s_VTKGetClassNameFromReference(JNIEnv *env,jclass,jlong id)\n", data->Name); fprintf(fp,"{\n"); fprintf(fp," const char* name = \"\";\n"); fprintf(fp," %s *op;\n", data->Name); fprintf(fp," if(id != 0)\n"); fprintf(fp," {\n"); fprintf(fp," op = reinterpret_cast<%s*>(id);\n", data->Name); //fprintf(fp," std::cout << \"cast pointer \" << id << std::endl;\n"); fprintf(fp," name = op->GetClassName();\n"); fprintf(fp," }\n"); fprintf(fp," return vtkJavaMakeJavaString(env,name);\n"); fprintf(fp,"}\n"); fprintf(fp,"\nextern \"C\" JNIEXPORT void JNICALL Java_vtk_%s_VTKDelete(JNIEnv *env,jobject obj)\n", data->Name); fprintf(fp,"{\n %s *op;\n",data->Name); fprintf(fp," op = (%s *)vtkJavaGetPointerFromObject(env,obj);\n", data->Name); fprintf(fp," op->Delete();\n"); fprintf(fp,"}\n"); fprintf(fp,"\nextern \"C\" JNIEXPORT void JNICALL Java_vtk_%s_VTKRegister(JNIEnv *env,jobject obj)\n", data->Name); fprintf(fp,"{\n %s *op;\n",data->Name); fprintf(fp," op = (%s *)vtkJavaGetPointerFromObject(env,obj);\n", data->Name); fprintf(fp," op->Register(op);\n"); fprintf(fp,"}\n"); } if (!data->IsAbstract) { fprintf(fp,"\nextern \"C\" JNIEXPORT jlong JNICALL Java_vtk_%s_VTKInit(JNIEnv *, jobject)", data->Name); fprintf(fp,"\n{"); fprintf(fp,"\n %s *aNewOne = %s::New();",data->Name, data->Name); fprintf(fp,"\n return (jlong)(size_t)(void*)aNewOne;"); fprintf(fp,"\n}\n"); } /* for vtkRenderWindow we want to add a special method to support * native AWT rendering * * Including vtkJavaAwt.h provides inline implementations of * Java_vtk_vtkPanel_RenderCreate, Java_vtk_vtkPanel_Lock and * Java_vtk_vtkPanel_UnLock. */ if (!strcmp("vtkRenderWindow",data->Name)) { fprintf(fp,"\n#include \"vtkJavaAwt.h\"\n\n"); } if (!strcmp("vtkObject",data->Name)) { /* Add the Print method to vtkObjectBase. */ fprintf(fp,"\nextern \"C\" JNIEXPORT jstring JNICALL Java_vtk_vtkObjectBase_Print(JNIEnv *env,jobject obj)\n"); fprintf(fp,"{\n vtkObjectBase *op;\n"); fprintf(fp," jstring tmp;\n\n"); fprintf(fp," op = (vtkObjectBase *)vtkJavaGetPointerFromObject(env,obj);\n"); fprintf(fp," std::ostringstream vtkmsg_with_warning_C4701;\n"); fprintf(fp," op->Print(vtkmsg_with_warning_C4701);\n"); fprintf(fp," vtkmsg_with_warning_C4701.put('\\0');\n"); fprintf(fp," tmp = vtkJavaMakeJavaString(env,vtkmsg_with_warning_C4701.str().c_str());\n"); fprintf(fp," return tmp;\n"); fprintf(fp,"}\n"); fprintf(fp,"\nextern \"C\" JNIEXPORT jint JNICALL Java_vtk_vtkObject_AddObserver(JNIEnv *env,jobject obj, jstring id0, jobject id1, jstring id2)\n"); fprintf(fp,"{\n vtkObject *op;\n"); fprintf(fp," vtkJavaCommand *cbc = vtkJavaCommand::New();\n"); fprintf(fp," cbc->AssignJavaVM(env);\n"); fprintf(fp," cbc->SetGlobalRef(env->NewGlobalRef(id1));\n"); fprintf(fp," char *temp2;\n"); fprintf(fp," temp2 = vtkJavaUTFToChar(env,id2);\n"); fprintf(fp," cbc->SetMethodID(env->GetMethodID(env->GetObjectClass(id1),temp2,\"()V\"));\n"); fprintf(fp," char *temp0;\n"); fprintf(fp," temp0 = vtkJavaUTFToChar(env,id0);\n"); fprintf(fp," op = (vtkObject *)vtkJavaGetPointerFromObject(env,obj);\n"); fprintf(fp," unsigned long temp20;\n"); fprintf(fp," temp20 = op->AddObserver(temp0,cbc);\n"); fprintf(fp," delete[] temp0;\n"); fprintf(fp," delete[] temp2;\n"); fprintf(fp," cbc->Delete();\n"); fprintf(fp," return temp20;\n}\n"); } vtkParse_Free(file_info); fclose(fp); return 0; }
/* print the parsed structures */ int main(int argc, char *argv[]) { OptionInfo *options; FileInfo *file_info; ClassInfo *data; FILE *fp; int i; /* pre-define a macro to identify the language */ vtkParse_DefineMacro("__VTK_WRAP_JAVA__", 0); /* get command-line args and parse the header file */ file_info = vtkParse_Main(argc, argv); /* some utility functions require the string cache */ stringCache = file_info->Strings; /* get the command-line options */ options = vtkParse_GetCommandLineOptions(); /* get the hierarchy info for accurate typing */ if (options->HierarchyFileNames) { hierarchyInfo = vtkParseHierarchy_ReadFiles( options->NumberOfHierarchyFileNames, options->HierarchyFileNames); } /* get the output file */ fp = fopen(options->OutputFileName, "w"); if (!fp) { fprintf(stderr, "Error opening output file %s\n", options->OutputFileName); exit(1); } /* get the main class */ data = file_info->MainClass; if (data == NULL || data->IsExcluded) { fclose(fp); exit(0); } if (data->Template) { fclose(fp); exit(0); } for (i = 0; i < data->NumberOfSuperClasses; ++i) { if (strchr(data->SuperClasses[i], '<')) { fclose(fp); exit(0); } } if (hierarchyInfo) { if (!vtkWrap_IsTypeOf(hierarchyInfo, data->Name, "vtkObjectBase")) { fclose(fp); exit(0); } /* resolve using declarations within the header files */ vtkWrap_ApplyUsingDeclarations(data, file_info, hierarchyInfo); /* expand typedefs */ vtkWrap_ExpandTypedefs(data, file_info, hierarchyInfo); } fprintf(fp,"// java wrapper for %s object\n//\n",data->Name); fprintf(fp,"\npackage vtk;\n"); if (strcmp("vtkObjectBase",data->Name)) { fprintf(fp,"import vtk.*;\n"); } fprintf(fp,"\npublic class %s",data->Name); if (strcmp("vtkObjectBase",data->Name)) { if (data->NumberOfSuperClasses) { fprintf(fp," extends %s",data->SuperClasses[0]); } } fprintf(fp,"\n{\n"); /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions[i]; outputFunction(fp, data); } HandleDataArray(fp, data); if (!data->NumberOfSuperClasses) { if ( strcmp("vtkObjectBase",data->Name) == 0 ) { fprintf(fp,"\n public static vtk.vtkJavaMemoryManager JAVA_OBJECT_MANAGER = new vtk.vtkJavaMemoryManagerImpl();"); } if (!data->IsAbstract) { fprintf(fp,"\n public %s() {", data->Name); fprintf(fp,"\n this.vtkId = this.VTKInit();"); fprintf(fp,"\n vtkObjectBase.JAVA_OBJECT_MANAGER.registerJavaObject(this.vtkId, this);"); fprintf(fp,"\n}\n"); } else { fprintf(fp,"\n public %s() { super(); }\n",data->Name); } fprintf(fp,"\n public %s(long id) {", data->Name); fprintf(fp,"\n super();"); fprintf(fp,"\n this.vtkId = id;"); fprintf(fp,"\n this.VTKRegister();"); fprintf(fp,"\n vtkObjectBase.JAVA_OBJECT_MANAGER.registerJavaObject(this.vtkId, this);"); fprintf(fp,"\n}\n"); fprintf(fp,"\n protected long vtkId;\n"); fprintf(fp,"\n public long GetVTKId() { return this.vtkId; }"); /* if we are a base class and have a delete method */ if (data->HasDelete) { fprintf(fp,"\n public static native void VTKDeleteReference(long id);"); fprintf(fp,"\n public static native String VTKGetClassNameFromReference(long id);"); fprintf(fp,"\n protected native void VTKDelete();"); fprintf(fp,"\n protected native void VTKRegister();"); fprintf(fp,"\n public void Delete() {"); fprintf(fp,"\n vtkObjectBase.JAVA_OBJECT_MANAGER.unRegisterJavaObject(this.vtkId);"); fprintf(fp,"\n this.vtkId = 0;"); fprintf(fp,"\n }"); } } else { fprintf(fp,"\n public %s() { super(); }\n",data->Name); fprintf(fp,"\n public %s(long id) { super(id); }\n",data->Name); } if (!data->IsAbstract) { fprintf(fp," public native long VTKInit();\n"); } /* fprintf(fp," protected native void VTKCastInit();\n"); */ if (!strcmp("vtkObjectBase",data->Name)) { /* Add the Print method to vtkObjectBase. */ fprintf(fp," public native String Print();\n"); /* Add the default toString from java object */ fprintf(fp," public String toString() { return Print(); }\n"); } if (!strcmp("vtkObject",data->Name)) { fprintf(fp," public native int AddObserver(String id0, Object id1, String id2);\n"); } fprintf(fp,"\n}\n"); fclose(fp); { size_t cc; size_t len; char *dir; char *fname; /*const */char javaDone[] = "VTKJavaWrapped"; FILE* tfp; fname = options->OutputFileName; dir = (char*)malloc(strlen(fname) + strlen(javaDone) + 2); sprintf(dir, "%s", fname); len = strlen(dir); for ( cc = len-1; cc > 0; cc -- ) { if ( dir[cc] == '/' || dir[cc] == '\\' ) { dir[cc+1] = 0; break; } } strcat(dir, javaDone); tfp = fopen(dir, "w"); if ( tfp ) { fprintf(tfp, "File: %s\n", fname); fclose(tfp); } free(dir); } vtkParse_Free(file_info); return 0; }
/* print the parsed structures */ void vtkParseOutput(FILE *fp, FileInfo *file_info) { OptionInfo *options; ClassInfo *data; int i,j,k; /* get the main class */ if ((data = file_info->MainClass) == NULL) { return; } /* get the command-line options */ options = vtkParse_GetCommandLineOptions(); /* get the hierarchy info for accurate typing */ if (options->HierarchyFileName) { hierarchyInfo = vtkParseHierarchy_ReadFile(options->HierarchyFileName); } fprintf(fp,"// tcl wrapper for %s object\n//\n",data->Name); fprintf(fp,"#define VTK_WRAPPING_CXX\n"); if (strcmp("vtkObjectBase",data->Name) != 0) { /* Block inclusion of full streams. */ fprintf(fp,"#define VTK_STREAMS_FWD_ONLY\n"); } fprintf(fp,"#include \"vtkSystemIncludes.h\"\n"); fprintf(fp,"#include \"%s.h\"\n\n",data->Name); fprintf(fp,"#include \"vtkTclUtil.h\"\n"); fprintf(fp,"#include \"vtkStdString.h\"\n"); fprintf(fp,"#include <vtkstd/stdexcept>\n"); fprintf(fp,"#include <vtksys/ios/sstream>\n"); if (!data->IsAbstract) { if (strcmp(data->Name, "vtkRenderWindowInteractor") == 0) { fprintf(fp,"#include \"vtkToolkits.h\"\n"); fprintf(fp,"#if defined( VTK_USE_X ) && defined( VTK_USE_TK )\n"); fprintf(fp,"# include \"vtkXRenderWindowTclInteractor.h\"\n"); fprintf(fp,"#endif\n"); fprintf(fp,"\nClientData %sNewCommand()\n{\n",data->Name); fprintf(fp,"#if defined( VTK_USE_X ) && defined( VTK_USE_TK )\n"); fprintf(fp," %s *temp = vtkXRenderWindowTclInteractor::New();\n", data->Name); fprintf(fp,"#else\n"); fprintf(fp," %s *temp = %s::New();\n",data->Name,data->Name); fprintf(fp,"#endif\n"); fprintf(fp," return static_cast<ClientData>(temp);\n}\n\n"); } else { fprintf(fp,"\nClientData %sNewCommand()\n{\n",data->Name); fprintf(fp," %s *temp = %s::New();\n",data->Name,data->Name); fprintf(fp," return static_cast<ClientData>(temp);\n}\n\n"); } } for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp,"int %sCppCommand(%s *op, Tcl_Interp *interp,\n int argc, char *argv[]);\n",data->SuperClasses[i],data->SuperClasses[i]); } fprintf(fp,"int VTKTCL_EXPORT %sCppCommand(%s *op, Tcl_Interp *interp,\n int argc, char *argv[]);\n",data->Name,data->Name); fprintf(fp,"\nint VTKTCL_EXPORT %sCommand(ClientData cd, Tcl_Interp *interp,\n int argc, char *argv[])\n{\n",data->Name); fprintf(fp," if ((argc == 2)&&(!strcmp(\"Delete\",argv[1]))&& !vtkTclInDelete(interp))\n {\n"); fprintf(fp," Tcl_DeleteCommand(interp,argv[0]);\n"); fprintf(fp," return TCL_OK;\n }\n"); fprintf(fp," return %sCppCommand(static_cast<%s *>(static_cast<vtkTclCommandArgStruct *>(cd)->Pointer),interp, argc, argv);\n}\n",data->Name,data->Name); fprintf(fp,"\nint VTKTCL_EXPORT %sCppCommand(%s *op, Tcl_Interp *interp,\n int argc, char *argv[])\n{\n",data->Name,data->Name); fprintf(fp," int tempi;\n"); fprintf(fp," double tempd;\n"); fprintf(fp," static char temps[80];\n"); fprintf(fp," int error;\n\n"); fprintf(fp," error = 0; error = error;\n"); fprintf(fp," tempi = 0; tempi = tempi;\n"); fprintf(fp," tempd = 0; tempd = tempd;\n"); fprintf(fp," temps[0] = 0; temps[0] = temps[0];\n\n"); fprintf(fp," if (argc < 2)\n {\n Tcl_SetResult(interp,const_cast<char *>(\"Could not find requested method.\"), TCL_VOLATILE);\n return TCL_ERROR;\n }\n"); /* stick in the typecasting and delete functionality here */ fprintf(fp," if (!interp)\n {\n"); fprintf(fp," if (!strcmp(\"DoTypecasting\",argv[0]))\n {\n"); fprintf(fp," if (!strcmp(\"%s\",argv[1]))\n {\n", data->Name); fprintf(fp," argv[2] = static_cast<char *>(static_cast<void *>(op));\n"); fprintf(fp," return TCL_OK;\n }\n"); /* check our superclasses */ for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp," if (%sCppCommand(static_cast<%s *>(op),interp,argc,argv) == TCL_OK)\n {\n", data->SuperClasses[i],data->SuperClasses[i]); fprintf(fp," return TCL_OK;\n }\n"); } fprintf(fp," }\n return TCL_ERROR;\n }\n\n"); /* add the GetSuperClassName */ if (data->NumberOfSuperClasses) { fprintf(fp," if (!strcmp(\"GetSuperClassName\",argv[1]))\n"); fprintf(fp," {\n"); fprintf(fp," Tcl_SetResult(interp,const_cast<char *>(\"%s\"), TCL_VOLATILE);\n",data->SuperClasses[0]); fprintf(fp," return TCL_OK;\n"); fprintf(fp," }\n\n"); } fprintf(fp," try\n {\n"); /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions[i]; outputFunction(fp, data); } /* add the ListInstances method */ fprintf(fp,"\n if (!strcmp(\"ListInstances\",argv[1]))\n {\n"); fprintf(fp," vtkTclListInstances(interp,(ClientData)(%sCommand));\n",data->Name); fprintf(fp," return TCL_OK;\n }\n"); /* add the ListMethods method */ fprintf(fp,"\n if (!strcmp(\"ListMethods\",argv[1]))\n {\n"); /* recurse up the tree */ for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp," %sCppCommand(op,interp,argc,argv);\n", data->SuperClasses[i]); } /* now list our methods */ fprintf(fp," Tcl_AppendResult(interp,\"Methods from %s:\\n\",NULL);\n",data->Name); fprintf(fp," Tcl_AppendResult(interp,\" GetSuperClassName\\n\",NULL);\n"); for (i = 0; i < numberOfWrappedFunctions; i++) { int numArgs = 0; currentFunction = wrappedFunctions[i]; if(currentFunction->IsLegacy) { fprintf(fp,"#if !defined(VTK_LEGACY_REMOVE)\n"); } /* calc the total required args */ for (j = 0; j < currentFunction->NumberOfArguments; j++) { numArgs = numArgs + (currentFunction->ArgCounts[j] ? currentFunction->ArgCounts[j] : 1); if (currentFunction->ArgTypes[j] == VTK_PARSE_FUNCTION) { break; } } if (numArgs > 1) { fprintf(fp," Tcl_AppendResult(interp,\" %s\\t with %i args\\n\",NULL);\n", currentFunction->Name, numArgs); } if (numArgs == 1) { fprintf(fp," Tcl_AppendResult(interp,\" %s\\t with 1 arg\\n\",NULL);\n", currentFunction->Name); } if (numArgs == 0) { fprintf(fp," Tcl_AppendResult(interp,\" %s\\n\",NULL);\n", currentFunction->Name); } if(currentFunction->IsLegacy) { fprintf(fp,"#endif\n"); } } fprintf(fp," return TCL_OK;\n }\n"); /* add the DescribeMethods method */ fprintf(fp,"\n if (!strcmp(\"DescribeMethods\",argv[1]))\n {\n"); fprintf(fp," if(argc>3) {\n" ); fprintf(fp," Tcl_SetResult ( interp, const_cast<char*>(\"Wrong number of arguments: object DescribeMethods <MethodName>\"), TCL_VOLATILE ); \n" ); fprintf(fp," return TCL_ERROR;\n }\n" ); fprintf(fp," if(argc==2) {\n" ); /* Return a list of methods */ fprintf(fp,"\n Tcl_DString dString, dStringParent;\n"); fprintf(fp,"\n Tcl_DStringInit ( &dString );\n" ); fprintf(fp,"\n Tcl_DStringInit ( &dStringParent );\n" ); /* recurse up the tree */ for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp," %sCppCommand(op,interp,argc,argv);\n", data->SuperClasses[i]); /* append the result to our string */ fprintf(fp," Tcl_DStringGetResult ( interp, &dStringParent );\n" ); fprintf(fp," Tcl_DStringAppend ( &dString, Tcl_DStringValue ( &dStringParent ), -1 );\n" ); } for (k = 0; k < numberOfWrappedFunctions; k++) { currentFunction = wrappedFunctions[k]; if(currentFunction->IsLegacy) { fprintf(fp,"#if !defined(VTK_LEGACY_REMOVE)\n"); } fprintf(fp," Tcl_DStringAppendElement ( &dString, \"%s\" );\n", currentFunction->Name ); if(currentFunction->IsLegacy) { fprintf(fp,"#endif\n"); } } fprintf(fp," Tcl_DStringResult ( interp, &dString );\n" ); fprintf(fp," Tcl_DStringFree ( &dString );\n" ); fprintf(fp," Tcl_DStringFree ( &dStringParent );\n" ); fprintf(fp," return TCL_OK;\n }\n"); /* Now handle if we are asked for a specific function */ fprintf(fp," if(argc==3) {\n" ); fprintf(fp," Tcl_DString dString;\n"); if (data->NumberOfSuperClasses > 0) { fprintf(fp," int SuperClassStatus;\n" ); } /* recurse up the tree */ for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp," SuperClassStatus = %sCppCommand(op,interp,argc,argv);\n", data->SuperClasses[i]); fprintf(fp," if ( SuperClassStatus == TCL_OK ) { return TCL_OK; }\n" ); } /* Now we handle it ourselves */ for (k = 0; k < numberOfWrappedFunctions; k++) { currentFunction = wrappedFunctions[k]; if(currentFunction->IsLegacy) { fprintf(fp,"#if !defined(VTK_LEGACY_REMOVE)\n"); } fprintf(fp," /* Starting function: %s */\n", currentFunction->Name ); fprintf(fp," if ( strcmp ( argv[2], \"%s\" ) == 0 ) {\n", currentFunction->Name ); fprintf(fp," Tcl_DStringInit ( &dString );\n" ); fprintf(fp," Tcl_DStringAppendElement ( &dString, \"%s\" );\n", currentFunction->Name ); /* calc the total required args */ fprintf(fp," /* Arguments */\n" ); fprintf(fp," Tcl_DStringStartSublist ( &dString );\n" ); for (i = 0; i < currentFunction->NumberOfArguments; i++) { unsigned int argtype; if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { fprintf(fp," Tcl_DStringAppendElement ( &dString, \"function\" );\n" ); break; } argtype = (currentFunction->ArgTypes[i] & VTK_PARSE_UNQUALIFIED_TYPE); switch (argtype) { case VTK_PARSE_FLOAT_PTR: case VTK_PARSE_DOUBLE_PTR: /* Vector */ fprintf(fp," Tcl_DStringStartSublist ( &dString );\n" ); for (j = 0; j < currentFunction->ArgCounts[i]; j++) { fprintf(fp," Tcl_DStringAppendElement ( &dString, \"float\" );\n" ); } fprintf(fp," Tcl_DStringEndSublist ( &dString );\n" ); break; case VTK_PARSE_INT_PTR: /* Vector */ fprintf(fp," Tcl_DStringStartSublist ( &dString );\n" ); for (j = 0; j < currentFunction->ArgCounts[i]; j++) { fprintf(fp," Tcl_DStringAppendElement ( &dString, \"int\" );\n" ); } fprintf(fp," Tcl_DStringEndSublist ( &dString );\n" ); break; case VTK_PARSE_ID_TYPE_PTR: /* Vector */ fprintf(fp," Tcl_DStringStartSublist ( &dString );\n" ); for (j = 0; j < currentFunction->ArgCounts[i]; j++) { fprintf(fp," Tcl_DStringAppendElement ( &dString, \"int\" );\n" ); } fprintf(fp," Tcl_DStringEndSublist ( &dString );\n" ); break; case VTK_PARSE_LONG_LONG_PTR: case VTK_PARSE___INT64_PTR: /* Vector */ fprintf(fp," Tcl_DStringStartSublist ( &dString );\n" ); for (j = 0; j < currentFunction->ArgCounts[i]; j++) { fprintf(fp," Tcl_DStringAppendElement ( &dString, \"int\" );\n" ); } fprintf(fp," Tcl_DStringEndSublist ( &dString );\n" ); break; case VTK_PARSE_OBJECT_PTR: fprintf(fp," Tcl_DStringAppendElement ( &dString, \"%s\" );\n", currentFunction->ArgClasses[i] ); break; case VTK_PARSE_VOID_PTR: case VTK_PARSE_CHAR_PTR: case VTK_PARSE_STRING: case VTK_PARSE_STRING_REF: fprintf(fp," Tcl_DStringAppendElement ( &dString, \"string\" );\n" ); break; case VTK_PARSE_FLOAT: case VTK_PARSE_DOUBLE: fprintf(fp," Tcl_DStringAppendElement ( &dString, \"float\" );\n" ); break; case VTK_PARSE_SIGNED_CHAR: case VTK_PARSE_ID_TYPE: case VTK_PARSE_UNSIGNED_LONG_LONG: case VTK_PARSE_LONG_LONG: case VTK_PARSE_UNSIGNED___INT64: case VTK_PARSE___INT64: case VTK_PARSE_UNSIGNED_INT: case VTK_PARSE_INT: case VTK_PARSE_UNSIGNED_SHORT: case VTK_PARSE_SHORT: case VTK_PARSE_UNSIGNED_LONG: case VTK_PARSE_LONG: fprintf(fp," Tcl_DStringAppendElement ( &dString, \"int\" );\n" ); break; case VTK_PARSE_CHAR: fprintf(fp," Tcl_DStringAppendElement ( &dString, \"char\" );\n" ); break; case VTK_PARSE_UNSIGNED_CHAR: fprintf(fp," Tcl_DStringAppendElement ( &dString, \"int\" );\n" ); break; case VTK_PARSE_BOOL: fprintf(fp," Tcl_DStringAppendElement ( &dString, \"bool\" );\n" ); break; } } fprintf(fp," Tcl_DStringEndSublist ( &dString );\n" ); /* Documentation */ fprintf(fp," /* Documentation for %s */\n", currentFunction->Name ); fprintf(fp," Tcl_DStringAppendElement ( &dString, \"%s\" );\n", quote_string ( currentFunction->Comment, 500 ) ); fprintf(fp," Tcl_DStringAppendElement ( &dString, \"%s\" );\n", quote_string ( currentFunction->Signature, 500 ) ); fprintf(fp," Tcl_DStringAppendElement ( &dString, \"%s\" );\n", quote_string ( data->Name, 500 ) ); fprintf(fp," /* Closing for %s */\n\n", currentFunction->Name ); fprintf(fp," Tcl_DStringResult ( interp, &dString );\n" ); fprintf(fp," Tcl_DStringFree ( &dString );\n" ); fprintf(fp," return TCL_OK;\n }\n"); if(currentFunction->IsLegacy) { fprintf(fp,"#endif\n"); } } /* Didn't find anything, return an error */ fprintf(fp," Tcl_SetResult ( interp, const_cast<char*>(\"Could not find method\"), TCL_VOLATILE ); \n" ); fprintf(fp," return TCL_ERROR;\n" ); fprintf(fp," }\n" ); fprintf(fp," }\n" ); /* try superclasses */ for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp,"\n if (%sCppCommand(static_cast<%s *>(op),interp,argc,argv) == TCL_OK)\n", data->SuperClasses[i], data->SuperClasses[i]); fprintf(fp," {\n return TCL_OK;\n }\n"); } /* Add the Print method to vtkObjectBase. */ if (!strcmp("vtkObjectBase",data->Name)) { fprintf(fp," if ((!strcmp(\"Print\",argv[1]))&&(argc == 2))\n {\n"); fprintf(fp," vtksys_ios::ostringstream buf_with_warning_C4701;\n"); fprintf(fp," op->Print(buf_with_warning_C4701);\n"); fprintf(fp," buf_with_warning_C4701.put('\\0');\n"); fprintf(fp," Tcl_SetResult(interp,const_cast<char *>(buf_with_warning_C4701.str().c_str()),\n"); fprintf(fp," TCL_VOLATILE);\n"); fprintf(fp," return TCL_OK;\n }\n"); /* Add the PrintRevisions method to vtkObjectBase. */ fprintf(fp," if ((!strcmp(\"PrintRevisions\",argv[1]))&&(argc == 2))\n {\n"); fprintf(fp," vtksys_ios::ostringstream buf_with_warning_C4701;\n"); fprintf(fp," op->PrintRevisions(buf_with_warning_C4701);\n"); fprintf(fp," buf_with_warning_C4701.put('\\0');\n"); fprintf(fp," Tcl_SetResult(interp,const_cast<char *>(buf_with_warning_C4701.str().c_str()),\n"); fprintf(fp," TCL_VOLATILE);\n"); fprintf(fp," return TCL_OK;\n }\n"); } /* Add the AddObserver method to vtkObject. */ if (!strcmp("vtkObject",data->Name)) { fprintf(fp," if ((!strcmp(\"AddObserver\",argv[1]))&&(argc >= 4))\n {\n"); fprintf(fp," error = 0;\n"); fprintf(fp," if (argc > 4 && Tcl_GetDouble(interp,argv[4],&tempd) != TCL_OK) error = 1;\n"); fprintf(fp," if (!error)\n {\n"); fprintf(fp," vtkTclCommand *cbc = vtkTclCommand::New();\n"); fprintf(fp," cbc->SetInterp(interp);\n"); fprintf(fp," cbc->SetStringCommand(argv[3]);\n"); fprintf(fp," unsigned long temp20;\n"); fprintf(fp," if (argc > 4)\n {\n"); fprintf(fp," temp20 = op->AddObserver(argv[2],cbc,tempd);\n"); fprintf(fp," }\n else\n {\n"); fprintf(fp," temp20 = op->AddObserver(argv[2],cbc);\n"); fprintf(fp," }\n"); fprintf(fp," cbc->Delete();\n"); fprintf(fp," char tempResult[1024];\n"); fprintf(fp," sprintf(tempResult,\"%%li\",temp20);\n"); fprintf(fp," Tcl_SetResult(interp,tempResult,TCL_VOLATILE);\n"); fprintf(fp," return TCL_OK;\n }\n"); fprintf(fp," }\n"); } /* i.e. If this is vtkObjectBase (or whatever the top of the class hierarchy will be) */ /* then report the error */ if (data->NumberOfSuperClasses == 0) { fprintf(fp,"\n if (argc >= 2)\n {\n"); fprintf(fp," char temps2[256];\n sprintf(temps2,\"Object named: %%s, could not find requested method: %%s\\nor the method was called with incorrect arguments.\\n\",argv[0],argv[1]);\n Tcl_SetResult(interp,temps2,TCL_VOLATILE);\n return TCL_ERROR;\n }\n"); } fprintf(fp," }\n"); fprintf(fp," catch (vtkstd::exception &e)\n"); fprintf(fp," {\n"); fprintf(fp," Tcl_AppendResult(interp, \"Uncaught exception: \", e.what(), \"\\n\", NULL);\n"); fprintf(fp," return TCL_ERROR;\n"); fprintf(fp," }\n"); fprintf(fp," return TCL_ERROR;\n}\n"); }
/* print the parsed structures */ void vtkParseOutput(FILE *fp, FileInfo *data) { int i; fprintf(fp,"// python wrapper for %s object\n//\n",data->ClassName); fprintf(fp,"#define VTK_WRAPPING_CXX\n"); if (strcmp("vtkObjectBase",data->ClassName) != 0) { /* Block inclusion of full streams. */ fprintf(fp,"#define VTK_STREAMS_FWD_ONLY\n"); } #if !defined(__APPLE__) fprintf(fp,"#include \"vtkPython.h\"\n"); fprintf(fp,"#undef _XOPEN_SOURCE /* Conflicts with standards.h. */\n"); fprintf(fp,"#undef _THREAD_SAFE /* Conflicts with pthread.h. */\n"); #endif fprintf(fp,"#include \"vtkPythonUtil.h\"\n"); fprintf(fp,"#include <vtksys/ios/sstream>\n"); fprintf(fp,"#include \"%s.h\"\n",data->ClassName); fprintf(fp,"#if defined(WIN32)\n"); fprintf(fp,"extern \"C\" { __declspec( dllexport ) PyObject *PyVTKClass_%sNew(char *); }\n", data->ClassName); fprintf(fp,"#else\n"); fprintf(fp,"extern \"C\" { PyObject *PyVTKClass_%sNew(char *); }\n", data->ClassName); fprintf(fp,"#endif\n\n"); for (i = 0; i < data->NumberOfSuperClasses; i++) { fprintf(fp,"extern \"C\" { PyObject *PyVTKClass_%sNew(char *); }\n", data->SuperClasses[i]); } if (!strcmp("vtkObject",data->ClassName)) { /* Add the AddObserver method to vtkObject. */ fprintf(fp,"static PyObject *PyvtkObject_AddObserver(PyObject *self, PyObject *args)\n"); fprintf(fp,"{\n"); fprintf(fp," vtkObject *op;\n"); fprintf(fp," char *temp0;\n"); fprintf(fp," PyObject *temp1;\n"); fprintf(fp," float temp2;\n"); fprintf(fp," unsigned long temp20 = 0;\n"); fprintf(fp," op = (vtkObject *)PyArg_VTKParseTuple(self, args, (char*)\"zO\", &temp0, &temp1);\n"); fprintf(fp," if (op)\n"); fprintf(fp," {\n"); fprintf(fp," if (!PyCallable_Check(temp1) && temp1 != Py_None)\n"); fprintf(fp," {\n"); fprintf(fp," PyErr_SetString(PyExc_ValueError,\"vtk callback method passed to AddObserver was not callable.\");\n"); fprintf(fp," return NULL;\n"); fprintf(fp," }\n"); fprintf(fp," Py_INCREF(temp1);\n"); fprintf(fp," vtkPythonCommand *cbc = vtkPythonCommand::New();\n"); fprintf(fp," cbc->SetObject(temp1);\n"); fprintf(fp," cbc->SetThreadState(PyThreadState_Get());\n"); fprintf(fp," temp20 = op->AddObserver(temp0,cbc);\n"); fprintf(fp," cbc->Delete();\n"); fprintf(fp," return PyInt_FromLong((long)temp20);\n"); fprintf(fp," }\n"); fprintf(fp," PyErr_Clear();\n"); fprintf(fp," op = (vtkObject *)PyArg_VTKParseTuple(self, args, (char*)\"zOf\", &temp0, &temp1, &temp2);\n"); fprintf(fp," if (op)\n"); fprintf(fp," {\n"); fprintf(fp," if (!PyCallable_Check(temp1) && temp1 != Py_None)\n"); fprintf(fp," {\n"); fprintf(fp," PyErr_SetString(PyExc_ValueError,\"vtk callback method passed to AddObserver was not callable.\");\n"); fprintf(fp," return NULL;\n"); fprintf(fp," }\n"); fprintf(fp," Py_INCREF(temp1);\n"); fprintf(fp," vtkPythonCommand *cbc = vtkPythonCommand::New();\n"); fprintf(fp," cbc->SetObject(temp1);\n"); fprintf(fp," cbc->SetThreadState(PyThreadState_Get());\n"); fprintf(fp," temp20 = op->AddObserver(temp0,cbc,temp2);\n"); fprintf(fp," cbc->Delete();\n"); fprintf(fp," return PyInt_FromLong((long)temp20);\n"); fprintf(fp," }\n"); fprintf(fp," return NULL;\n"); fprintf(fp,"}\n\n"); } if (!strcmp("vtkObjectBase",data->ClassName)) { /* while we are at it spit out the GetStringFromObject method */ fprintf(fp,"PyObject *PyvtkObjectBase_GetAddressAsString(PyObject *self, PyObject *args)\n"); fprintf(fp,"{\n"); /* declare the variables */ fprintf(fp," %s *op;\n",data->ClassName); /* handle unbound method call if 'self' is a PyVTKClass */ fprintf(fp," char *typecast;\n\n"); fprintf(fp," op = (%s *)PyArg_VTKParseTuple(self, args, (char*)\"s\", &typecast);\n",data->ClassName); fprintf(fp," if (op)\n"); fprintf(fp," {\n char temp20[256];\n"); fprintf(fp," sprintf(temp20,\"Addr=%%p\",op);\n"); fprintf(fp," return PyString_FromString(temp20);\n"); fprintf(fp," }\n"); fprintf(fp," return NULL;\n}\n\n"); /* Add the PrintRevisions method to vtkObjectBase. */ fprintf(fp,"PyObject *PyvtkObjectBase_PrintRevisions(PyObject *self, PyObject *args)\n"); fprintf(fp,"{\n"); fprintf(fp," %s *op;\n",data->ClassName); fprintf(fp," op = (%s *)PyArg_VTKParseTuple(self, args, (char*)\"\");\n",data->ClassName); fprintf(fp," if (op)\n"); fprintf(fp," {\n"); fprintf(fp," vtksys_ios::ostringstream vtkmsg_with_warning_C4701;\n"); fprintf(fp," op->PrintRevisions(vtkmsg_with_warning_C4701);\n"); fprintf(fp," vtkmsg_with_warning_C4701.put('\\0');\n"); fprintf(fp," PyObject *result = PyString_FromString(vtkmsg_with_warning_C4701.str().c_str());\n"); fprintf(fp," return result;\n"); fprintf(fp," }\n"); fprintf(fp," return NULL;\n}\n\n"); } /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions + i; outputFunction(fp, data); } if (data->NumberOfSuperClasses || !data->IsAbstract) { outputFunction2(fp, data); } /* the docstring for the class */ if (data->NumberOfSuperClasses || !data->IsAbstract) { fprintf(fp,"static const char *%sDoc[] = {\n",data->ClassName); create_class_doc(fp,data); fprintf(fp,"};\n\n"); } /* output the class initilization function */ if (strcmp(data->ClassName,"vtkObjectBase") == 0) { /* special wrapping for vtkObject */ if (class_has_new) { fprintf(fp,"static vtkObjectBase *%sStaticNew()\n",data->ClassName); fprintf(fp,"{\n return %s::New();\n}\n\n",data->ClassName); } fprintf(fp,"PyObject *PyVTKClass_%sNew(char *modulename)\n{\n",data->ClassName); if (class_has_new) { fprintf(fp," return PyVTKClass_New(&%sStaticNew,\n",data->ClassName); } else { fprintf(fp," return PyVTKClass_New(NULL,\n"); } fprintf(fp," Py%sMethods,\n",data->ClassName); fprintf(fp," (char*)\"%s\",modulename,\n",data->ClassName); fprintf(fp," (char**)%sDoc,0);\n}\n\n",data->ClassName); } else if (data->NumberOfSuperClasses) { /* wrapping of descendants of vtkObjectBase */ if (class_has_new) { fprintf(fp,"static vtkObjectBase *%sStaticNew()\n",data->ClassName); fprintf(fp,"{\n return %s::New();\n}\n\n",data->ClassName); } fprintf(fp,"PyObject *PyVTKClass_%sNew(char *modulename)\n{\n",data->ClassName); if (class_has_new) { fprintf(fp," return PyVTKClass_New(&%sStaticNew,\n",data->ClassName); } else { fprintf(fp," return PyVTKClass_New(NULL,\n"); } fprintf(fp," Py%sMethods,\n",data->ClassName); fprintf(fp," (char*)\"%s\",modulename,\n",data->ClassName); fprintf(fp," (char**)%sDoc,\n",data->ClassName); fprintf(fp," PyVTKClass_%sNew(modulename));\n}\n\n", data->SuperClasses[0]); } else if (!data->IsAbstract) { /* wrapping of 'special' non-vtkObject classes */ fprintf(fp,"PyObject *PyVTKObject_%sNew(PyObject *, PyObject *args)\n{\n",data->ClassName); fprintf(fp," if (!(PyArg_ParseTuple(args, (char*)\"\")))\n {\n"); fprintf(fp," return NULL;\n }\n\n"); fprintf(fp," %s *obj = new %s;\n",data->ClassName,data->ClassName); fprintf(fp," return PyVTKSpecialObject_New(obj, Py%sMethods, (char*)\"%s\",(char**)%sDoc);\n",data->ClassName,data->ClassName,data->ClassName); fprintf(fp,"}\n\n"); fprintf(fp,"static PyMethodDef Py%sNewMethod = \\\n",data->ClassName); fprintf(fp,"{ (char*)\"%s\", (PyCFunction)PyVTKObject_%sNew, 1,\n", data->ClassName,data->ClassName); fprintf(fp," (char*)%sDoc[0] };\n\n",data->ClassName); fprintf(fp,"PyObject *PyVTKClass_%sNew(char *)\n{\n",data->ClassName); fprintf(fp," return PyCFunction_New(&Py%sNewMethod,Py_None);\n}\n\n", data->ClassName); } else { /* un-wrappable classes */ fprintf(fp,"PyObject *PyVTKClass_%sNew(char *)\n{\n",data->ClassName); fprintf(fp," return NULL;\n}\n\n"); } }
void ANN::annBatch(Training tr, int optFunction) { vector<double> deltaW; int counter = 0; double MSE = 999; double pow; int oF; //isi delta w dengan 0 for (int i = 0 ; i < listW.size(); i++){ deltaW.push_back(0); } while (counter < MaximumIteration && MSE > Epsilon) { cout << "===================" << endl; cout << "==== epoch " << counter+1 << " =====" << endl; cout << "===================" << endl; cout << " x0 x1 x2 x3 x4 w0 w1 w2 w3 w4 y o t deltaW0 deltaW1 deltaW2 deltaW3 deltaW4"; // cout << " x0 x1 x2 w0 w1 w2 y o t deltaW0 deltaW1 deltaW2"; cout << endl; //satu batch MSE = 0; for (int i = 0; i < tr.getNumberData() ; i++){ for (int j=0; j<listX.size(); j++) { printf("%4d", listX[j]); } for (int j=0; j<listW.size(); j++) { printf("%9.2f", listW[j]); } oF = outputFunction(optFunction); printf("%9.2f", activeFunction()); printf("%9d", oF); printf("%9d", tr.getDataValueConverted(i, tr.getTargetAttribute())); for (int j = 0 ; j < listW.size() ; j++){ deltaW[j] = deltaW[j] + LearningRate * (tr.getDataValueConverted(i, tr.getTargetAttribute()) - oF) * listX[j]; } if (i+1<tr.getNumberData()) { for (int j=0; j<listX.size(); j++) { if (j>0) { listX[j] = tr.getDataValueConverted(i+1, tr.getAttribute(j-1)); } else { listX[j] = 1; } } } else { for (int j=0; j<listX.size(); j++) { if (j>0) { listX[j] = tr.getDataValueConverted(0, tr.getAttribute(j-1)); } else { listX[j] = 1; } } } for (int j=0; j<deltaW.size(); j++) { printf("%9.2f", deltaW[j]); } cout << endl; pow = tr.getDataValueConverted(i, tr.getTargetAttribute()) - oF ; pow = pow * pow; MSE = MSE + pow; } MSE = (MSE / tr.getNumberData()); cout << "MSE : " << MSE << endl; cout << endl; //update for (int i = 0 ; i < listW.size() ; i++){ listW[i] = listW[i] + deltaW[i]; } //isi delta w dengan 0 for (int i = 0 ; i < listW.size(); i++){ //deltaW.push_back(0); deltaW[i] = 0; } counter++; } }
/* print the parsed structures */ void vtkParseOutput(FILE *fp, FileInfo *data) { int i; fprintf(fp,"// java wrapper for %s object\n//\n",data->ClassName); fprintf(fp,"\npackage vtk;\n"); if (strcmp("vtkObjectBase",data->ClassName)) { fprintf(fp,"import vtk.*;\n"); } fprintf(fp,"\npublic class %s",data->ClassName); if (strcmp("vtkObjectBase",data->ClassName)) { if (data->NumberOfSuperClasses) { fprintf(fp," extends %s",data->SuperClasses[0]); } } fprintf(fp,"\n{\n"); /* insert function handling code here */ for (i = 0; i < data->NumberOfFunctions; i++) { currentFunction = data->Functions + i; outputFunction(fp, data); } HandleDataArray(fp, data); if (!data->NumberOfSuperClasses) { if (data->IsConcrete) { fprintf(fp,"\n public %s() {", data->ClassName); fprintf(fp,"\n this.vtkId = this.VTKInit();"); fprintf(fp,"\n vtkGlobalJavaHash.PointerToReference.put(new Long(this.vtkId), new java.lang.ref.WeakReference(this));"); fprintf(fp,"\n }\n"); } else { fprintf(fp,"\n public %s() { super(); }\n",data->ClassName); } fprintf(fp,"\n public %s(long id) {", data->ClassName); fprintf(fp,"\n super();"); fprintf(fp,"\n this.vtkId = id;"); fprintf(fp,"\n this.VTKRegister();"); fprintf(fp,"\n vtkGlobalJavaHash.PointerToReference.put(new Long(this.vtkId), new java.lang.ref.WeakReference(this));"); fprintf(fp,"\n }\n"); fprintf(fp,"\n protected long vtkId = 0;\n"); fprintf(fp,"\n protected boolean vtkDeleted = false;\n"); fprintf(fp,"\n public long GetVTKId() { return this.vtkId; }"); /* if we are a base class and have a delete method */ if (data->HasDelete) { fprintf(fp,"\n protected native void VTKDelete();"); fprintf(fp,"\n protected native void VTKRegister();"); fprintf(fp,"\n public void Delete() {"); fprintf(fp,"\n int refCount = this.GetReferenceCount();"); fprintf(fp,"\n this.VTKDelete();"); fprintf(fp,"\n this.vtkDeleted = true;"); fprintf(fp,"\n if (refCount == 1) {"); fprintf(fp,"\n this.vtkId = 0;"); fprintf(fp,"\n }"); fprintf(fp,"\n }"); fprintf(fp,"\n protected void finalize() { if (!this.vtkDeleted) this.Delete(); }\n"); } } /* Special case for vtkObject */ else if ( strcmp("vtkObject",data->ClassName) == 0 ) { fprintf(fp,"\n public %s() {", data->ClassName); fprintf(fp,"\n super();"); fprintf(fp,"\n this.vtkId = this.VTKInit();"); fprintf(fp,"\n vtkGlobalJavaHash.PointerToReference.put(new Long(this.vtkId), new java.lang.ref.WeakReference(this));"); fprintf(fp,"\n }\n"); fprintf(fp,"\n public %s(long id) { super(id); }\n",data->ClassName); } else { fprintf(fp,"\n public %s() { super(); }\n",data->ClassName); fprintf(fp,"\n public %s(long id) { super(id); }\n",data->ClassName); } if (data->IsConcrete) { fprintf(fp," public native long VTKInit();\n"); } /* fprintf(fp," protected native void VTKCastInit();\n"); */ if (!strcmp("vtkObject",data->ClassName)) { /* Add the Print method to vtkObject. */ fprintf(fp," public native String Print();\n"); /* Add the PrintRevisions method to vtkObject. */ fprintf(fp," public native String PrintRevisions();\n"); /* Add the default toString from java object */ fprintf(fp," public String toString() { return Print(); }\n"); } if (!strcmp("vtkObject",data->ClassName)) { fprintf(fp," public native int AddObserver(String id0, Object id1, String id2);\n"); } fprintf(fp,"\n}\n"); { size_t cc; size_t len; char *dir; char *fname; /*const */char javaDone[] = "VTKJavaWrapped"; FILE* tfp; fname = data->OutputFileName; dir = (char*)malloc(strlen(fname) + strlen(javaDone) + 2); sprintf(dir, "%s", fname); len = strlen(dir); for ( cc = len-1; cc > 0; cc -- ) { if ( dir[cc] == '/' || dir[cc] == '\\' ) { dir[cc+1] = 0; break; } } strcat(dir, javaDone); tfp = fopen(dir, "w"); if ( tfp ) { fprintf(tfp, "File: %s\n", fname); fclose(tfp); } free(dir); } }