/* make a guess about whether a class is wrapped */ static int isClassWrapped(const char *classname) { HierarchyEntry *entry; if (hierarchyInfo) { entry = vtkParseHierarchy_FindEntry(hierarchyInfo, classname); if (entry) { /* only allow non-excluded vtkObjects as args */ if (vtkParseHierarchy_GetProperty(entry, "WRAP_EXCLUDE") || !vtkParseHierarchy_IsTypeOf(hierarchyInfo, entry, "vtkObject")) { /* make a special exemption for vtkObjectBase */ if (strcmp(classname, "vtkObjectBase") != 0) { return 0; } } } } return 1; }
int vtkWrap_IsClassWrapped( HierarchyInfo *hinfo, const char *classname) { if (hinfo) { HierarchyEntry *entry; entry = vtkParseHierarchy_FindEntry(hinfo, classname); if (entry) { if (!vtkParseHierarchy_GetProperty(entry, "WRAP_EXCLUDE") || vtkParseHierarchy_GetProperty(entry, "WRAP_SPECIAL")) { return 1; } } } else if (strncmp("vtk", classname, 3) == 0) { return 1; } return 0; }
static int isClassWrapped(const char *classname) { HierarchyEntry *entry; if (hierarchyInfo) { entry = vtkParseHierarchy_FindEntry(hierarchyInfo, classname); if (entry == 0 || vtkParseHierarchy_GetProperty(entry, "WRAP_EXCLUDE") || !vtkParseHierarchy_IsTypeOf(hierarchyInfo, entry, "vtkObjectBase")) { return 0; } } return 1; }
/* make a guess about whether a class is wrapped */ static int class_is_wrapped(const char *classname) { HierarchyEntry *entry; if (hierarchyInfo) { entry = vtkParseHierarchy_FindEntry(hierarchyInfo, classname); if (entry) { /* only allow non-excluded vtkObjects as args */ if (vtkParseHierarchy_GetProperty(entry, "WRAP_EXCLUDE") || !vtkParseHierarchy_IsTypeOf(hierarchyInfo, entry, "vtkObjectBase")) { return 0; } } } return 1; }
static int isClassWrapped(const char *classname) { HierarchyEntry *entry; if (hierarchyInfo) { entry = vtkParseHierarchy_FindEntry(hierarchyInfo, classname); if (entry == 0 || vtkParseHierarchy_GetProperty(entry, "WRAPEXCLUDE") || !vtkParseHierarchy_IsTypeOf(hierarchyInfo, entry, "vtkObjectBase")) { return 0; } /* Only the primary class in the header is wrapped in Java */ return vtkParseHierarchy_IsPrimary(entry); } return 1; }
int vtkWrap_IsSpecialType( HierarchyInfo *hinfo, const char *classname) { HierarchyEntry *entry; if (hinfo) { entry = vtkParseHierarchy_FindEntry(hinfo, classname); if (entry && vtkParseHierarchy_GetProperty(entry, "WRAP_SPECIAL")) { return 1; } return 0; } /* fallback if no HierarchyInfo */ if (strncmp("vtk", classname, 3) == 0) { return -1; } return 0; }
/* check whether the superclass of the specified class is wrapped */ int vtkWrapPython_HasWrappedSuperClass( HierarchyInfo *hinfo, const char *classname, int *is_external) { HierarchyEntry *entry; const char *module; const char *header; const char *name; const char *supername; int result = 0; int depth = 0; if (is_external) { *is_external = 0; } if (!hinfo) { return 0; } name = classname; entry = vtkParseHierarchy_FindEntry(hinfo, name); if (!entry) { return 0; } module = entry->Module; header = entry->HeaderFile; while (entry->NumberOfSuperClasses == 1) { supername = vtkParseHierarchy_TemplatedSuperClass(entry, name, 0); if (name != classname) { free((char *)name); } name = supername; entry = vtkParseHierarchy_FindEntry(hinfo, name); if (!entry) { break; } /* check if superclass is in a different module */ if (is_external && depth == 0 && strcmp(entry->Module, module) != 0) { *is_external = 1; } depth++; /* the order of these conditions is important */ if (entry->IsTypedef) { break; } else if (strncmp(entry->Name, "vtk", 3) != 0) { break; } else if (!vtkParseHierarchy_GetProperty(entry, "WRAP_EXCLUDE_PYTHON")) { result = 1; break; } else if (strcmp(entry->HeaderFile, header) != 0) { break; } } if (name != classname) { free((char *)name); } return result; }
void outputFunction(FILE *fp, ClassInfo *data) { static unsigned int supported_types[] = { VTK_PARSE_VOID, VTK_PARSE_BOOL, VTK_PARSE_FLOAT, VTK_PARSE_DOUBLE, VTK_PARSE_CHAR, VTK_PARSE_UNSIGNED_CHAR, VTK_PARSE_SIGNED_CHAR, VTK_PARSE_INT, VTK_PARSE_UNSIGNED_INT, VTK_PARSE_SHORT, VTK_PARSE_UNSIGNED_SHORT, VTK_PARSE_LONG, VTK_PARSE_UNSIGNED_LONG, VTK_PARSE_ID_TYPE, VTK_PARSE_UNSIGNED_ID_TYPE, VTK_PARSE_LONG_LONG, VTK_PARSE_UNSIGNED_LONG_LONG, VTK_PARSE___INT64, VTK_PARSE_UNSIGNED___INT64, VTK_PARSE_OBJECT, VTK_PARSE_STRING, 0 }; unsigned int rType = (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE); unsigned int aType = 0; unsigned int baseType = 0; int i, j; int args_ok = 1; const char *jniFunction = 0; char *jniFunctionNew = 0; const char *begPtr = 0; const char *endPtr = 0; CurrentData = data; /* some functions will not get wrapped no matter what else */ if (currentFunction->IsOperator || currentFunction->ArrayFailure || !currentFunction->IsPublic || !currentFunction->Name) { return; } /* NewInstance and SafeDownCast can not be wrapped because it is a (non-virtual) method which returns a pointer of the same type as the current pointer. Since all methods are virtual in Java, this looks like polymorphic return type. */ if (!strcmp("NewInstance",currentFunction->Name)) { return ; } if (!strcmp("SafeDownCast",currentFunction->Name)) { return ; } /* The unwrappable methods in Filtering/vtkInformation.c */ if (strcmp(data->Name, "vtkInformation") == 0 && currentFunction->IsLegacy) { return; } /* The GetInput() in vtkMapper cannot be overriden with a * different return type, Java doesn't allow this */ if (strcmp(data->Name, "vtkMapper") == 0 && strcmp(currentFunction->Name, "GetInput") == 0) { return; } /* check to see if we can handle the args */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { aType = (currentFunction->ArgTypes[i] & VTK_PARSE_UNQUALIFIED_TYPE); baseType = (aType & VTK_PARSE_BASE_TYPE); if (currentFunction->ArgTypes[i] != VTK_PARSE_FUNCTION) { for (j = 0; supported_types[j] != 0; j++) { if (baseType == supported_types[j]) { break; } } if (supported_types[j] == 0) { args_ok = 0; } } if (baseType == VTK_PARSE_OBJECT) { if ((aType & VTK_PARSE_INDIRECT) != VTK_PARSE_POINTER) { args_ok = 0; } else if (hierarchyInfo) { if (vtkParseHierarchy_IsExtern(hierarchyInfo, currentFunction->ArgClasses[i]) || vtkParseHierarchy_GetProperty(hierarchyInfo, currentFunction->ArgClasses[i], "WRAP_EXCLUDE") || !vtkParseHierarchy_IsTypeOf(hierarchyInfo, currentFunction->ArgClasses[i], "vtkObjectBase")) { args_ok = 0; } } } if (((aType & VTK_PARSE_INDIRECT) != VTK_PARSE_POINTER) && ((aType & VTK_PARSE_INDIRECT) != 0) && (aType != VTK_PARSE_STRING_REF)) args_ok = 0; if (aType == VTK_PARSE_STRING_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_CHAR_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_INT_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_SHORT_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_LONG_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_ID_TYPE_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_LONG_LONG_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED___INT64_PTR) args_ok = 0; } baseType = (rType & VTK_PARSE_BASE_TYPE); for (j = 0; supported_types[j] != 0; j++) { if (baseType == supported_types[j]) { break; } } if (supported_types[j] == 0) { args_ok = 0; } if (baseType == VTK_PARSE_OBJECT) { if ((rType & VTK_PARSE_INDIRECT) != VTK_PARSE_POINTER) { args_ok = 0; } else if (hierarchyInfo) { if (vtkParseHierarchy_IsExtern(hierarchyInfo, currentFunction->ReturnClass) || vtkParseHierarchy_GetProperty(hierarchyInfo, currentFunction->ReturnClass, "WRAP_EXCLUDE") || !vtkParseHierarchy_IsTypeOf(hierarchyInfo, currentFunction->ReturnClass, "vtkObjectBase")) { args_ok = 0; } } } if (((rType & VTK_PARSE_INDIRECT) != VTK_PARSE_POINTER) && ((rType & VTK_PARSE_INDIRECT) != 0) && (rType != VTK_PARSE_STRING_REF)) args_ok = 0; if (rType == VTK_PARSE_STRING_PTR) args_ok = 0; /* eliminate unsigned short * usigned int * etc */ if (rType == VTK_PARSE_UNSIGNED_INT_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED_SHORT_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED_LONG_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED_ID_TYPE_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED_LONG_LONG_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED___INT64_PTR) args_ok = 0; if (currentFunction->NumberOfArguments && (currentFunction->ArgTypes[0] == VTK_PARSE_FUNCTION) &&(currentFunction->NumberOfArguments != 1)) args_ok = 0; /* make sure we have all the info we need for array arguments in */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { aType = (currentFunction->ArgTypes[i] & VTK_PARSE_UNQUALIFIED_TYPE); if (((aType & VTK_PARSE_INDIRECT) == VTK_PARSE_POINTER)&& (currentFunction->ArgCounts[i] <= 0)&& (aType != VTK_PARSE_OBJECT_PTR)&& (aType != VTK_PARSE_CHAR_PTR)) args_ok = 0; } /* if we need a return type hint make sure we have one */ switch (rType) { case VTK_PARSE_FLOAT_PTR: case VTK_PARSE_VOID_PTR: case VTK_PARSE_DOUBLE_PTR: case VTK_PARSE_INT_PTR: case VTK_PARSE_SHORT_PTR: case VTK_PARSE_LONG_PTR: case VTK_PARSE_ID_TYPE_PTR: case VTK_PARSE_LONG_LONG_PTR: case VTK_PARSE___INT64_PTR: case VTK_PARSE_SIGNED_CHAR_PTR: case VTK_PARSE_BOOL_PTR: case VTK_PARSE_UNSIGNED_CHAR_PTR: args_ok = currentFunction->HaveHint; break; } /* make sure there isn't a Java-specific override */ if (!strcmp("vtkObject",data->Name)) { /* remove the original vtkCommand observer methods */ if (!strcmp(currentFunction->Name,"AddObserver") || !strcmp(currentFunction->Name,"GetCommand") || (!strcmp(currentFunction->Name,"RemoveObserver") && (currentFunction->ArgTypes[0] != VTK_PARSE_UNSIGNED_LONG)) || ((!strcmp(currentFunction->Name,"RemoveObservers") || !strcmp(currentFunction->Name,"HasObserver")) && (((currentFunction->ArgTypes[0] != VTK_PARSE_UNSIGNED_LONG) && (currentFunction->ArgTypes[0] != (VTK_PARSE_CHAR_PTR|VTK_PARSE_CONST))) || (currentFunction->NumberOfArguments > 1))) || (!strcmp(currentFunction->Name,"RemoveAllObservers") && (currentFunction->NumberOfArguments > 0))) { args_ok = 0; } } else if (!strcmp("vtkObjectBase",data->Name)) { /* remove the special vtkObjectBase methods */ if (!strcmp(currentFunction->Name,"PrintRevisions") || !strcmp(currentFunction->Name,"Print")) { args_ok = 0; } } /* make sure it isn't a Delete or New function */ if (!strcmp("Delete",currentFunction->Name) || !strcmp("New",currentFunction->Name)) { args_ok = 0; } /* handle DataReader SetBinaryInputString as a special case */ if (!strcmp("SetBinaryInputString",currentFunction->Name) && (!strcmp("vtkDataReader",data->Name) || !strcmp("vtkStructuredGridReader",data->Name) || !strcmp("vtkRectilinearGridReader",data->Name) || !strcmp("vtkUnstructuredGridReader",data->Name) || !strcmp("vtkStructuredPointsReader",data->Name) || !strcmp("vtkPolyDataReader",data->Name))) { if(currentFunction->IsLegacy) { fprintf(fp,"#if !defined(VTK_LEGACY_REMOVE)\n"); } HandleDataReader(fp,data); if(currentFunction->IsLegacy) { fprintf(fp,"#endif\n"); } wrappedFunctions[numberOfWrappedFunctions] = currentFunction; numberOfWrappedFunctions++; } if (currentFunction->IsPublic && args_ok && strcmp(data->Name,currentFunction->Name) && strcmp(data->Name, currentFunction->Name + 1)) { /* make sure we haven't already done one of these */ if (!DoneOne()) { fprintf(fp,"\n"); /* Underscores are escaped in method names, see http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp133 VTK class names contain no underscore and do not need to be escaped. */ jniFunction = currentFunction->Name; begPtr = currentFunction->Name; endPtr = strchr(begPtr, '_'); if(endPtr) { jniFunctionNew = (char *)malloc(2*strlen(currentFunction->Name) + 1); jniFunctionNew[0] = '\0'; while (endPtr) { strncat(jniFunctionNew, begPtr, endPtr - begPtr + 1); strcat(jniFunctionNew, "1"); begPtr = endPtr + 1; endPtr = strchr(begPtr, '_'); } strcat(jniFunctionNew, begPtr); jniFunction = jniFunctionNew; } if(currentFunction->IsLegacy) { fprintf(fp,"#if !defined(VTK_LEGACY_REMOVE)\n"); } fprintf(fp,"extern \"C\" JNIEXPORT "); return_result(fp); fprintf(fp," JNICALL Java_vtk_%s_%s_1%i(JNIEnv *env, jobject obj", data->Name, jniFunction, numberOfWrappedFunctions); for (i = 0; i < currentFunction->NumberOfArguments; i++) { fprintf(fp,","); output_proto_vars(fp, i); } fprintf(fp,")\n{\n"); /* get the object pointer */ fprintf(fp," %s *op;\n",data->Name); /* process the args */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { output_temp(fp, i, currentFunction->ArgTypes[i], currentFunction->ArgClasses[i], currentFunction->ArgCounts[i]); } output_temp(fp, MAX_ARGS,currentFunction->ReturnType, currentFunction->ReturnClass,0); /* now get the required args from the stack */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { get_args(fp, i); } fprintf(fp,"\n op = (%s *)vtkJavaGetPointerFromObject(env,obj);\n", data->Name); switch (rType) { case VTK_PARSE_VOID: fprintf(fp," op->%s(",currentFunction->Name); break; default: if ((rType & VTK_PARSE_INDIRECT) == VTK_PARSE_REF) { fprintf(fp," temp%i = &(op)->%s(",MAX_ARGS,currentFunction->Name); } else { fprintf(fp," temp%i = (op)->%s(",MAX_ARGS,currentFunction->Name); } break; } for (i = 0; i < currentFunction->NumberOfArguments; i++) { aType = (currentFunction->ArgTypes[i] & VTK_PARSE_UNQUALIFIED_TYPE); if (i) { fprintf(fp,","); } if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { fprintf(fp,"vtkJavaVoidFunc,(void *)temp%i",i); } else { fprintf(fp,"temp%i",i); } } /* for */ fprintf(fp,");\n"); if (currentFunction->NumberOfArguments == 1 && currentFunction->ArgTypes[0] == VTK_PARSE_FUNCTION) { fprintf(fp," op->%sArgDelete(vtkJavaVoidFuncArgDelete);\n", jniFunction); } /* now copy and release any arrays */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { copy_and_release_args(fp, i); } do_return(fp); fprintf(fp,"}\n"); if(currentFunction->IsLegacy) { fprintf(fp,"#endif\n"); } wrappedFunctions[numberOfWrappedFunctions] = currentFunction; numberOfWrappedFunctions++; if (jniFunctionNew) { free(jniFunctionNew); jniFunctionNew = 0; } } /* isDone() */ } /* isAbstract */ }
void outputFunction(FILE *fp, ClassInfo *data) { static unsigned int supported_types[] = { VTK_PARSE_VOID, VTK_PARSE_BOOL, VTK_PARSE_FLOAT, VTK_PARSE_DOUBLE, VTK_PARSE_CHAR, VTK_PARSE_UNSIGNED_CHAR, VTK_PARSE_SIGNED_CHAR, VTK_PARSE_INT, VTK_PARSE_UNSIGNED_INT, VTK_PARSE_SHORT, VTK_PARSE_UNSIGNED_SHORT, VTK_PARSE_LONG, VTK_PARSE_UNSIGNED_LONG, VTK_PARSE_ID_TYPE, VTK_PARSE_UNSIGNED_ID_TYPE, VTK_PARSE_LONG_LONG, VTK_PARSE_UNSIGNED_LONG_LONG, VTK_PARSE___INT64, VTK_PARSE_UNSIGNED___INT64, VTK_PARSE_VTK_OBJECT, VTK_PARSE_STRING, 0 }; int i, j; int args_ok = 1; unsigned int rType = (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE); unsigned int aType = 0; unsigned int baseType = 0; /* some functions will not get wrapped no matter what else */ if (currentFunction->IsOperator || currentFunction->ArrayFailure || !currentFunction->IsPublic || !currentFunction->Name) { return; } /* NewInstance and SafeDownCast can not be wrapped because it is a (non-virtual) method which returns a pointer of the same type as the current pointer. Since all methods are virtual in Java, this looks like polymorphic return type. */ if (!strcmp("NewInstance",currentFunction->Name)) { return ; } if (!strcmp("SafeDownCast",currentFunction->Name)) { return ; } /* The unwrappable methods in Filtering/vtkInformation.c */ if (strcmp(data->Name, "vtkInformation") == 0 && currentFunction->IsLegacy) { return; } /* The GetInput() in vtkMapper cannot be overriden with a * different return type, Java doesn't allow this */ if (strcmp(data->Name, "vtkMapper") == 0 && strcmp(currentFunction->Name, "GetInput") == 0) { return; } /* check to see if we can handle the args */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { aType = (currentFunction->ArgTypes[i] & VTK_PARSE_UNQUALIFIED_TYPE); baseType = (aType & VTK_PARSE_BASE_TYPE); if (currentFunction->ArgTypes[i] != VTK_PARSE_FUNCTION) { for (j = 0; supported_types[j] != 0; j++) { if (baseType == supported_types[j]) { break; } } if (supported_types[j] == 0) { args_ok = 0; } } if (baseType == VTK_PARSE_OBJECT) { if ((aType & VTK_PARSE_INDIRECT) != VTK_PARSE_POINTER) { args_ok = 0; } else if (hierarchyInfo) { if (vtkParseHierarchy_IsExtern(hierarchyInfo, currentFunction->ArgClasses[i]) || vtkParseHierarchy_GetProperty(hierarchyInfo, currentFunction->ArgClasses[i], "WRAP_EXCLUDE") || !vtkParseHierarchy_IsTypeOf(hierarchyInfo, currentFunction->ArgClasses[i], "vtkObjectBase")) { args_ok = 0; } } } if (aType == VTK_PARSE_VTK_OBJECT) args_ok = 0; if (((aType & VTK_PARSE_INDIRECT) != VTK_PARSE_POINTER) && ((aType & VTK_PARSE_INDIRECT) != 0) && (aType != VTK_PARSE_STRING_REF)) args_ok = 0; if (aType == VTK_PARSE_STRING_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_CHAR_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_INT_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_SHORT_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_LONG_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_ID_TYPE_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED_LONG_LONG_PTR) args_ok = 0; if (aType == VTK_PARSE_UNSIGNED___INT64_PTR) args_ok = 0; } baseType = (rType & VTK_PARSE_BASE_TYPE); for (j = 0; supported_types[j] != 0; j++) { if (baseType == supported_types[j]) { break; } } if (supported_types[j] == 0) { args_ok = 0; } if (baseType == VTK_PARSE_OBJECT) { if ((rType & VTK_PARSE_INDIRECT) != VTK_PARSE_POINTER) { args_ok = 0; } else if (hierarchyInfo) { if (vtkParseHierarchy_IsExtern(hierarchyInfo, currentFunction->ReturnClass) || vtkParseHierarchy_GetProperty(hierarchyInfo, currentFunction->ReturnClass, "WRAP_EXCLUDE") || !vtkParseHierarchy_IsTypeOf(hierarchyInfo, currentFunction->ReturnClass, "vtkObjectBase")) { args_ok = 0; } } } if (((rType & VTK_PARSE_INDIRECT) != VTK_PARSE_POINTER) && ((rType & VTK_PARSE_INDIRECT) != 0) && (rType != VTK_PARSE_STRING_REF)) args_ok = 0; if (rType == VTK_PARSE_STRING_PTR) args_ok = 0; /* eliminate unsigned char * and unsigned short * */ if (rType == VTK_PARSE_UNSIGNED_INT_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED_SHORT_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED_LONG_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED_ID_TYPE_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED_LONG_LONG_PTR) args_ok = 0; if (rType == VTK_PARSE_UNSIGNED___INT64_PTR) args_ok = 0; if (currentFunction->NumberOfArguments && (currentFunction->ArgTypes[0] == VTK_PARSE_FUNCTION) &&(currentFunction->NumberOfArguments != 1)) args_ok = 0; /* make sure we have all the info we need for array arguments in */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { aType = (currentFunction->ArgTypes[i] & VTK_PARSE_UNQUALIFIED_TYPE); if (((aType & VTK_PARSE_INDIRECT) == VTK_PARSE_POINTER)&& (currentFunction->ArgCounts[i] <= 0)&& (aType != VTK_PARSE_VTK_OBJECT_PTR)&& (aType != VTK_PARSE_CHAR_PTR)) args_ok = 0; } /* if we need a return type hint make sure we have one */ switch (rType) { case VTK_PARSE_FLOAT_PTR: case VTK_PARSE_VOID_PTR: case VTK_PARSE_DOUBLE_PTR: case VTK_PARSE_INT_PTR: case VTK_PARSE_SHORT_PTR: case VTK_PARSE_LONG_PTR: case VTK_PARSE_ID_TYPE_PTR: case VTK_PARSE_LONG_LONG_PTR: case VTK_PARSE___INT64_PTR: case VTK_PARSE_SIGNED_CHAR_PTR: case VTK_PARSE_BOOL_PTR: case VTK_PARSE_UNSIGNED_CHAR_PTR: args_ok = currentFunction->HaveHint; break; } /* make sure there isn't a Java-specific override */ if (!strcmp("vtkObject",data->Name)) { /* remove the original vtkCommand observer methods */ if (!strcmp(currentFunction->Name,"AddObserver") || !strcmp(currentFunction->Name,"GetCommand") || (!strcmp(currentFunction->Name,"RemoveObserver") && (currentFunction->ArgTypes[0] != VTK_PARSE_UNSIGNED_LONG)) || ((!strcmp(currentFunction->Name,"RemoveObservers") || !strcmp(currentFunction->Name,"HasObserver")) && (((currentFunction->ArgTypes[0] != VTK_PARSE_UNSIGNED_LONG) && (currentFunction->ArgTypes[0] != (VTK_PARSE_CHAR_PTR|VTK_PARSE_CONST))) || (currentFunction->NumberOfArguments > 1))) || (!strcmp(currentFunction->Name,"RemoveAllObservers") && (currentFunction->NumberOfArguments > 0))) { args_ok = 0; } } else if (!strcmp("vtkObjectBase",data->Name)) { /* remove the special vtkObjectBase methods */ if (!strcmp(currentFunction->Name,"PrintRevisions") || !strcmp(currentFunction->Name,"Print")) { args_ok = 0; } } /* make sure it isn't a Delete or New function */ if (!strcmp("Delete",currentFunction->Name) || !strcmp("New",currentFunction->Name)) { args_ok = 0; } /* handle DataReader SetBinaryInputString as a special case */ if (!strcmp("SetBinaryInputString",currentFunction->Name) && (!strcmp("vtkDataReader",data->Name) || !strcmp("vtkStructuredGridReader",data->Name) || !strcmp("vtkRectilinearGridReader",data->Name) || !strcmp("vtkUnstructuredGridReader",data->Name) || !strcmp("vtkStructuredPointsReader",data->Name) || !strcmp("vtkPolyDataReader",data->Name))) { HandleDataReader(fp,data); wrappedFunctions[numberOfWrappedFunctions] = currentFunction; numberOfWrappedFunctions++; } if (currentFunction->IsPublic && args_ok && strcmp(data->Name,currentFunction->Name) && strcmp(data->Name, currentFunction->Name + 1)) { /* make sure we haven't already done one of these */ if (!DoneOne()) { fprintf(fp,"\n private native "); return_result_native(fp); fprintf(fp,"%s_%i(",currentFunction->Name,numberOfWrappedFunctions); for (i = 0; i < currentFunction->NumberOfArguments; i++) { if (i) { fprintf(fp,","); } output_temp(fp,i); } fprintf(fp,");\n"); fprintf(fp," public "); return_result(fp); fprintf(fp,"%s(",currentFunction->Name); for (i = 0; i < currentFunction->NumberOfArguments; i++) { if (i) { fprintf(fp,","); } output_temp(fp,i); } /* if returning object, lookup in global hash */ if (rType == VTK_PARSE_VTK_OBJECT_PTR) { fprintf(fp,") {"); fprintf(fp,"\n long temp = %s_%i(",currentFunction->Name, numberOfWrappedFunctions); for (i = 0; i < currentFunction->NumberOfArguments; i++) { if (i) { fprintf(fp,","); } fprintf(fp,"id%i",i); } fprintf(fp,");\n"); fprintf(fp,"\n if (temp == 0) return null;"); fprintf(fp,"\n %s obj = null;", currentFunction->ReturnClass); fprintf(fp,"\n java.lang.ref.WeakReference ref = (java.lang.ref.WeakReference)vtkGlobalJavaHash.PointerToReference.get(new Long(temp));"); fprintf(fp,"\n if (ref != null) {"); fprintf(fp,"\n obj = (%s)ref.get();", currentFunction->ReturnClass); fprintf(fp,"\n }"); fprintf(fp,"\n if (obj == null) {"); fprintf(fp,"\n %s tempObj = new %s(temp);", currentFunction->ReturnClass, currentFunction->ReturnClass); fprintf(fp,"\n String className = tempObj.GetClassName();"); fprintf(fp,"\n try {"); fprintf(fp,"\n Class c = Class.forName(\"vtk.\" + className);"); fprintf(fp,"\n java.lang.reflect.Constructor cons = c.getConstructor(new Class[] {long.class} );"); fprintf(fp,"\n obj = (%s)cons.newInstance(new Object[] {new Long(temp)});", currentFunction->ReturnClass); fprintf(fp,"\n } catch (Exception e) {"); fprintf(fp,"\n e.printStackTrace();"); fprintf(fp,"\n }"); fprintf(fp,"\n vtkObjectBase.VTKDeleteReference(temp);"); fprintf(fp,"\n }"); fprintf(fp,"\n return obj;"); fprintf(fp,"\n }\n"); } else { /* if not void then need return otherwise none */ if (rType == VTK_PARSE_VOID) { fprintf(fp,")\n { %s_%i(",currentFunction->Name, numberOfWrappedFunctions); } else { fprintf(fp,")\n { return %s_%i(",currentFunction->Name, numberOfWrappedFunctions); } for (i = 0; i < currentFunction->NumberOfArguments; i++) { if (i) { fprintf(fp,","); } fprintf(fp,"id%i",i); } if ((currentFunction->NumberOfArguments == 1) && (currentFunction->ArgTypes[0] == VTK_PARSE_FUNCTION)) { fprintf(fp,",id1"); } fprintf(fp,"); }\n"); } wrappedFunctions[numberOfWrappedFunctions] = currentFunction; numberOfWrappedFunctions++; } } }