void outputFunction(FILE *fp, ClassInfo *data) { int i; unsigned int rType = (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE); int args_ok = checkFunctionSignature(data); /* 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); 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); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } 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); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } /* 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 return (%s)vtkObject.JAVA_OBJECT_MANAGER.getJavaObject(temp);", currentFunction->ReturnClass); 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); } fprintf(fp,"); }\n"); } wrappedFunctions[numberOfWrappedFunctions] = currentFunction; numberOfWrappedFunctions++; } } }
void outputFunction(FILE *fp, ClassInfo *data) { int i; int args_ok; unsigned int rType = (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE); const char *jniFunction = 0; char *jniFunctionNew = 0; char *jniFunctionOld = 0; size_t j; CurrentData = data; args_ok = checkFunctionSignature(data); /* 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; jniFunctionOld = 0; j = 0; while (jniFunction[j] != '\0') { /* replace "_" with "_1" */ if (jniFunction[j] == '_') { j++; jniFunctionNew = (char *)malloc(strlen(jniFunction) + 2); strncpy(jniFunctionNew, jniFunction, j); jniFunctionNew[j] = '1'; strcpy(&jniFunctionNew[j+1], &jniFunction[j]); free(jniFunctionOld); jniFunctionOld = jniFunctionNew; jniFunction = jniFunctionNew; } j++; } 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); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } 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]); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } 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); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } 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++) { if (i) { fprintf(fp,","); } if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { fprintf(fp,"vtkJavaVoidFunc,(void *)temp%i",i); break; } else { fprintf(fp,"temp%i",i); } } /* for */ fprintf(fp,");\n"); if (currentFunction->NumberOfArguments == 2 && 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); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } 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) { unsigned int rType = (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE); unsigned int aType = 0; int i; /* beans */ char *beanfunc; /* make the first letter lowercase for set get methods */ beanfunc = strdup(currentFunction->Name); if (isupper(beanfunc[0])) beanfunc[0] = beanfunc[0] + 32; args_ok = checkFunctionSignature(data); 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(fp); fprintf(fp,"%s_%i(",currentFunction->Name,numberOfWrappedFunctions); for (i = 0; i < currentFunction->NumberOfArguments; i++) { if (i) { fprintf(fp,","); } output_temp(fp,i); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } fprintf(fp,");\n"); fprintf(fp," public "); return_result(fp); fprintf(fp,"%s(",beanfunc); for (i = 0; i < currentFunction->NumberOfArguments; i++) { if (i) { fprintf(fp,","); } output_temp(fp,i); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } /* 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); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } if ((currentFunction->NumberOfArguments == 1) && (currentFunction->ArgTypes[0] == VTK_PARSE_FUNCTION)) fprintf(fp,",id1"); /* stick in secret beanie code for set methods */ if (rType == VTK_PARSE_VOID) { aType = (currentFunction->ArgTypes[0] & VTK_PARSE_UNQUALIFIED_TYPE); /* only care about set methods and On/Off methods */ if (!strncmp(beanfunc,"set",3) && currentFunction->NumberOfArguments == 1 && (((aType & VTK_PARSE_INDIRECT) == 0 && (aType & VTK_PARSE_UNSIGNED) == 0)|| aType == VTK_PARSE_CHAR_PTR || (aType & VTK_PARSE_BASE_TYPE) == VTK_PARSE_OBJECT)) { char prop[256]; strncpy(prop,beanfunc+3,strlen(beanfunc)-3); prop[strlen(beanfunc)-3] = '\0'; if (isupper(prop[0])) prop[0] = prop[0] + 32; fprintf(fp,");\n changes.firePropertyChange(\"%s\",null,",prop); /* handle basic types */ if ((aType == VTK_PARSE_CHAR_PTR) || (aType == VTK_PARSE_STRING) || (aType == VTK_PARSE_STRING_REF)) { fprintf(fp," id0"); } else { switch ((aType & VTK_PARSE_BASE_TYPE) & ~VTK_PARSE_UNSIGNED) { case VTK_PARSE_FLOAT: case VTK_PARSE_DOUBLE: fprintf(fp," new Double(id0)"); break; case VTK_PARSE_INT: case VTK_PARSE_SHORT: case VTK_PARSE_LONG: fprintf(fp," new Integer(id0)"); break; case VTK_PARSE_OBJECT: fprintf(fp," id0"); break; case VTK_PARSE_CHAR: /* not implemented yet */ default: fprintf(fp," null"); } } } /* not a set method is it an On/Off method ? */ else { if (!strncmp(beanfunc + strlen(beanfunc) - 2, "On",2)) { /* OK we think this is a Boolean method so need to fire a change */ char prop[256]; strncpy(prop,beanfunc,strlen(beanfunc)-2); prop[strlen(beanfunc)-2] = '\0'; fprintf(fp,");\n changes.firePropertyChange(\"%s\",null,new Integer(1)", prop); } if (!strncmp(beanfunc + strlen(beanfunc) - 3, "Off",3)) { /* OK we think this is a Boolean method so need to fire a change */ char prop[256]; strncpy(prop,beanfunc,strlen(beanfunc)-3); prop[strlen(beanfunc)-3] = '\0'; fprintf(fp,");\n changes.firePropertyChange(\"%s\",null,new Integer(0)", prop); } } } fprintf(fp,"); }\n"); wrappedFunctions[numberOfWrappedFunctions] = currentFunction; numberOfWrappedFunctions++; } } free(beanfunc); }
void outputFunction(FILE *fp, ClassInfo *data) { int i; int required_args = 0; /* if the args are OK and it is not a constructor or destructor */ if (checkFunctionSignature(data) && strcmp(data->Name,currentFunction->Name) && strcmp(data->Name,currentFunction->Name + 1)) { /* calc the total required args */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { required_args = required_args + (currentFunction->ArgCounts[i] ? currentFunction->ArgCounts[i] : 1); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } if(currentFunction->IsLegacy) { fprintf(fp,"#if !defined(VTK_LEGACY_REMOVE)\n"); } fprintf(fp," if ((!strcmp(\"%s\",argv[1]))&&(argc == %i))\n {\n", currentFunction->Name, required_args + 2); /* process the args */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { output_temp(fp, i, currentFunction->ArgTypes[i], currentFunction->ArgClasses[i], currentFunction->ArgCounts[i]); /* ignore args after function pointer */ if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { break; } } output_temp(fp, MAX_ARGS,currentFunction->ReturnType, currentFunction->ReturnClass, 0); /* only use the error variable if we have arguments to parse */ if (currentFunction->NumberOfArguments) { fprintf(fp," error = 0;\n\n"); /* now get the required args from the stack */ for (i = 0; i < currentFunction->NumberOfArguments; i++) { get_args(fp,i); } fprintf(fp," if (!error)\n {\n"); } switch (currentFunction->ReturnType & VTK_PARSE_UNQUALIFIED_TYPE) { case VTK_PARSE_VOID: fprintf(fp," op->%s(",currentFunction->Name); break; default: if ((currentFunction->ReturnType & 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++) { if (i) { fprintf(fp,","); } if (currentFunction->ArgTypes[i] == VTK_PARSE_FUNCTION) { fprintf(fp,"vtkTclVoidFunc,static_cast<void *>(temp%i)",i); break; } else { fprintf(fp,"temp%i",i); } } fprintf(fp,");\n"); if (currentFunction->NumberOfArguments && (currentFunction->ArgTypes[0] == VTK_PARSE_FUNCTION)) { fprintf(fp," op->%sArgDelete(vtkTclVoidFuncArgDelete);\n", currentFunction->Name); } return_result(fp); fprintf(fp," return TCL_OK;\n"); /* close the if error */ if (currentFunction->NumberOfArguments) { fprintf(fp," }\n"); } fprintf(fp," }\n"); if(currentFunction->IsLegacy) { fprintf(fp,"#endif\n"); } wrappedFunctions[numberOfWrappedFunctions] = currentFunction; numberOfWrappedFunctions++; } }