/* 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->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 *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 */ 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 */ 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); } }