00001
00002
00003
00004
00005 #include "gridlabd.h"
00006 #include "gridlabd_java.h"
00007
00008 #define JAVA_CLASS_PATH "Win32/Debug/"
00009 #define JAVA_LIB_PATH "Win32/Debug/"
00010
00011 static JavaVM *jvm = NULL;
00012 char256 classpath, libpath;
00013
00014 char *get_classpath(){return classpath;}
00015 char *get_libpath(){return libpath;}
00016
00017 static JAVACALLBACKS jcallbacks = {
00018 get_jvm,
00019 get_env,
00020 set_obj,
00021 };
00022
00023 JavaVM *init_jvm();
00024
00025 CDECL JavaVM *get_jvm(){
00026 return jvm ? jvm : init_jvm();
00027 }
00028
00029 void *get_jcb(){
00030 return &jcallbacks;
00031 }
00032
00033 CDECL JNIEnv *get_env(){
00034 JNIEnv *env;
00035 if(jvm == NULL)
00036 init_jvm();
00037 jvm->AttachCurrentThread((void **)&env, NULL);
00038 return env;
00039 }
00040
00041 CDECL void *set_obj(jobject obj, OBJECT * object_addr, void *block_addr, int id){
00042 JNIEnv *jnienv = get_env();
00043 jclass cls = jnienv->FindClass("GObject");
00044
00045 if(cls == NULL){
00046 gl_error("%s(%s): unable to find GObject.class", __FILE__, __LINE__);
00047 return NULL;
00048 }
00049
00050 jmethodID mid = jnienv->GetMethodID(cls, "SetObject", "(JJI)V");
00051
00052 if(mid == NULL){
00053 gl_error("%s(%s): unable to find \"void GObject.SetObject(long, long, int)\"", __FILE__, __LINE__);
00054 return NULL;
00055 }
00056 jnienv->CallVoidMethod(obj, mid, (int64)object_addr, (int64)block_addr, id);
00057 return NULL;
00058 }
00059
00060 EXPORT int do_kill()
00061 {
00062
00063 #if 0
00064
00065 if(jvm->DestroyJavaVM() == 0){;
00066 jvm = NULL;
00067 jnienv = NULL;
00068 } else {
00069 gl_error("javamod/init.cpp:do_kill() - error with jvm->DestroyJavaVM()");
00070 }
00071 #endif
00072 return 0;
00073 }
00074
00075 EXPORT void *getvar(char *varname, char *value, unsigned int size){
00076 void *rv = NULL;
00077 if(strcmp(varname, "jcallback") == 0)
00078 {
00079 rv = (void *)&jcallbacks;
00080 }
00081 else if(strcmp(varname, "jvm") == 0)
00082 {
00083 rv = (void *)get_jvm();
00084 }
00085 else if(strcmp(varname, "jnienv") == 0)
00086 {
00087 rv = (void *)get_env();
00088 }
00089 return rv;
00090 }
00091
00092 JavaVM *init_jvm(){
00093 JavaVMOption options[2];
00094 JavaVMInitArgs vm_args;
00095 JNIEnv *jnienv = NULL;
00096 int rv = 0;
00097 PROPERTYTYPE p;
00098
00099 if(sizeof(void *) == sizeof(int32))
00100 p = PT_int32;
00101 if(sizeof(void *) == sizeof(int64))
00102 p = PT_int64;
00103 char cpath[1025], lpath[1025];
00104 sprintf(cpath, "-Djava.class.path=%s", get_classpath());
00105 sprintf(lpath, "-Djava.library.path=%s", get_libpath());
00106 options[0].optionString = cpath;
00107 options[1].optionString = lpath;
00108
00109
00110
00111 memset(&vm_args, 0, sizeof(vm_args));
00112 vm_args.version = JNI_VERSION_1_6;
00113 vm_args.nOptions = 2;
00114 vm_args.options = options;
00115
00116 printf("Creating JVM...\n");
00117 rv = JNI_CreateJavaVM(&jvm, (void **)&jnienv, &vm_args);
00118 if(rv == 0)
00119 printf("JVM successfully created.\n");
00120 else
00121 printf("JVM creation failed.\n");
00122
00123 gl_global_create("glmjava::jvm",p,get_jvm(),PT_ACCESS,PA_REFERENCE,NULL);
00124 gl_global_create("glmjava::jnienv",p,get_env(),PT_ACCESS,PA_REFERENCE,NULL);
00125
00126 return jvm;
00127 }
00128
00129
00130
00131
00132
00133 EXPORT jint JNICALL Java_gridlabd_GObject__1GetID(JNIEnv *env, jclass _this, jlong oaddr){
00134 OBJECT *obj = (OBJECT *)oaddr;
00135 return obj->id;
00136 }
00137
00138 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetOClass(JNIEnv *env, jclass _this, jlong oaddr){
00139 OBJECT *obj = (OBJECT *)oaddr;
00140 return (int64)(obj->oclass);
00141 }
00142
00143 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetNext(JNIEnv *env, jclass _this, jlong oaddr){
00144 OBJECT *obj = (OBJECT *)oaddr;
00145 return (int64)(obj->next);
00146 }
00147
00148 EXPORT jstring JNICALL Java_gridlabd_GObject__1GetName(JNIEnv *env, jclass _this, jlong oaddr){
00149 OBJECT *obj = (OBJECT *)oaddr;
00150 return env->NewStringUTF(obj->name);
00151 }
00152
00153 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetParent(JNIEnv *env, jclass _this, jlong oaddr){
00154 OBJECT *obj = (OBJECT *)oaddr;
00155 return (int64)(obj->parent);
00156 }
00157
00158 EXPORT jint JNICALL Java_gridlabd_GObject__1GetRank(JNIEnv *env, jclass _this, jlong oaddr){
00159 OBJECT *obj = (OBJECT *)oaddr;
00160 return obj->rank;
00161 }
00162
00163 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetClock(JNIEnv *env, jclass _this, jlong oaddr){
00164 OBJECT *obj = (OBJECT *)oaddr;
00165 return obj->clock;
00166 }
00167
00168 EXPORT jdouble JNICALL Java_gridlabd_GObject__1GetLongitude(JNIEnv *env, jclass _this, jlong oaddr){
00169 OBJECT *obj = (OBJECT *)oaddr;
00170 return obj->longitude;
00171 }
00172
00173 EXPORT jdouble JNICALL Java_gridlabd_GObject__1GetLatitude(JNIEnv *env, jclass _this, jlong oaddr){
00174 OBJECT *obj = (OBJECT *)oaddr;
00175 return obj->latitude;
00176 }
00177
00178 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetInSvc(JNIEnv *env, jclass _this, jlong oaddr){
00179 OBJECT *obj = (OBJECT *)oaddr;
00180 return (int64)(obj->in_svc);
00181 }
00182
00183 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetOutSvc(JNIEnv *env, jclass _this, jlong oaddr){
00184 OBJECT *obj = (OBJECT *)oaddr;
00185 return (int64)(obj->out_svc);
00186 }
00187
00188 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetFlags(JNIEnv *env, jclass _this, jlong oaddr){
00189 OBJECT *obj = (OBJECT *)oaddr;
00190 return (int64)(obj->flags);
00191 }
00192
00193 EXPORT void JNICALL Java_gridlabd_GObject__1SetParent(JNIEnv *env, jclass _this, jlong oaddr, jlong paddr){
00194 OBJECT *obj = (OBJECT *)oaddr;
00195 obj->parent = (OBJECT *)paddr;
00196 }
00197
00198 EXPORT void JNICALL Java_gridlabd_GObject__1SetFlags(JNIEnv *env, jclass _this, jlong oaddr, jint flags){
00199 OBJECT *obj = (OBJECT *)oaddr;
00200 obj->flags ^= (unsigned long)flags;
00201 }
00202
00203
00204 EXPORT jstring JNICALL Java_gridlabd_GObject__1GetStringProp(JNIEnv *env, jclass _this, jlong oaddr, jlong offset, jlong size){
00205 char buffer[1029];
00206 memcpy(buffer, (void *)(oaddr+offset+sizeof(OBJECT)), (size_t)size);
00207 return env->NewStringUTF(buffer);
00208 }
00209
00210 EXPORT void JNICALL Java_gridlabd_GObject__1SetStringProp(JNIEnv *env, jclass _this, jlong oaddr, jlong offset, jlong size, jstring str){
00211 const char *buffer = env->GetStringUTFChars(str, NULL);
00212 size_t s = env->GetStringUTFLength(str);
00213 memcpy((void *)(oaddr+offset+sizeof(OBJECT)), buffer, (s < size) ? s : (size_t)size);
00214 }
00215
00216 EXPORT jint JNICALL Java_gridlabd_GObject__1GetInt16Prop(JNIEnv *env, jclass _this, jlong oaddr, jlong offset){
00217 return *(int16 *)(oaddr+offset+sizeof(OBJECT));
00218 }
00219
00220 EXPORT void JNICALL Java_gridlabd_GObject__1SetInt16Prop(JNIEnv *env, jclass _this, jlong oaddr, jlong offset, jint val){
00221 *(int16 *)(oaddr+offset+sizeof(OBJECT)) = (int16)val;
00222 }
00223
00224 EXPORT jint JNICALL Java_gridlabd_GObject__1GetInt32Prop(JNIEnv *env, jclass _this, jlong oaddr, jlong offset){
00225 return *(int32 *)(oaddr+offset+sizeof(OBJECT));
00226 }
00227
00228 EXPORT void JNICALL Java_gridlabd_GObject__1SetInt32Prop(JNIEnv *env, jclass _this, jlong oaddr, jlong offset, jint val){
00229 *(int32 *)(oaddr+offset+sizeof(OBJECT)) = val;
00230 }
00231
00232 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetInt64Prop(JNIEnv *env, jclass _this, jlong oaddr, jlong offset){
00233 return *(int64 *)(oaddr+offset+sizeof(OBJECT));
00234 }
00235
00236 EXPORT jlong JNICALL Java_gridlabd_GObject__1GetObjectProp(JNIEnv *env, jclass _this, jlong oaddr, jlong offset){
00237 return *(int64 *)(oaddr+offset+sizeof(OBJECT));
00238 }
00239
00240 EXPORT void JNICALL Java_gridlabd_GObject__1SetInt64Prop(JNIEnv *env, jclass _this, jlong oaddr, jlong offset, jlong val){
00241 *(int64 *)(oaddr+offset+sizeof(OBJECT)) = val;
00242 }
00243
00244 EXPORT jdouble JNICALL Java_gridlabd_GObject__1GetDoubleProp(JNIEnv *env, jclass _this, jlong oaddr, jlong offset){
00245 return *(double *)(oaddr+offset+sizeof(OBJECT));
00246 }
00247
00248 EXPORT void JNICALL Java_gridlabd_GObject__1SetDoubleProp(JNIEnv *env, jclass _this, jlong oaddr, jlong offset, jdouble val){
00249 *(double *)(oaddr+offset+sizeof(OBJECT)) = val;
00250 }
00251
00252 EXPORT jdouble JNICALL Java_gridlabd_GObject__1GetComplexRealProp(JNIEnv *env, jclass _this, jlong oaddr, jlong offset){
00253 complex *c = (complex *)(oaddr+offset+sizeof(OBJECT));
00254 return c->Re();
00255 }
00256
00257 EXPORT jdouble JNICALL Java_gridlabd_GObject__1GetComplexImagProp(JNIEnv *env, jclass _this, jlong oaddr, jlong offset){
00258 complex *c = (complex *)(oaddr+offset+sizeof(OBJECT));
00259 return c->Im();
00260 }
00261
00262 EXPORT void JNICALL Java_gridlabd_GObject__1SetComplexProp(JNIEnv *env, jclass _this, jlong oaddr, jlong offset, jdouble re, jdouble im){
00263 complex *c=(complex *)(oaddr+offset+sizeof(OBJECT));
00264 c->SetReal(re);
00265 c->SetImag(im);
00266 }
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276 EXPORT jint JNICALL Java_gridlabd_GridlabD_verbose(JNIEnv *env, jclass _this, jstring str){
00277 char *instr = (char *)env->GetStringUTFChars(str, NULL);
00278 int len = (int)strlen(instr);
00279 gl_verbose(instr);
00280
00281 return len;
00282 }
00283
00284 EXPORT jint JNICALL Java_gridlabd_GridlabD_output(JNIEnv *env, jclass _this, jstring str){
00285 char *instr = (char *)env->GetStringUTFChars(str, NULL);
00286 int len = (int)strlen(instr);
00287 gl_output(instr);
00288 env->ReleaseStringUTFChars(str, instr);
00289 return len;
00290 }
00291
00292 EXPORT jint JNICALL Java_gridlabd_GridlabD_warning(JNIEnv *env, jobject _this, jstring str){
00293 char *instr = (char *)env->GetStringUTFChars(str, NULL);
00294 int len = (int)strlen(instr);
00295 gl_warning(instr);
00296 env->ReleaseStringUTFChars(str, instr);
00297 return len;
00298 }
00299
00300 EXPORT jint JNICALL Java_gridlabd_GridlabD_error(JNIEnv *env, jobject _this, jstring str){
00301 char *instr = (char *)env->GetStringUTFChars(str, NULL);
00302 int len = (int)strlen(instr);
00303 gl_error(instr);
00304 env->ReleaseStringUTFChars(str, instr);
00305 return len;
00306 }
00307
00308 EXPORT jint JNICALL Java_gridlabd_GridlabD_debug(JNIEnv *env, jobject _this, jstring str){
00309 char *instr = (char *)env->GetStringUTFChars(str, NULL);
00310 int len = (int)strlen(instr);
00311 gl_debug(instr);
00312 env->ReleaseStringUTFChars(str, instr);
00313 return len;
00314 }
00315
00316 EXPORT jint JNICALL Java_gridlabd_GridlabD_testmsg(JNIEnv *env, jobject _this, jstring str){
00317 char *instr = (char *)env->GetStringUTFChars(str, NULL);
00318 int len = (int)strlen(instr);
00319 gl_testmsg(instr);
00320 env->ReleaseStringUTFChars(str, instr);
00321 return len;
00322 }
00323
00324
00325
00326
00327
00328 EXPORT jlong JNICALL Java_gridlabd_GridlabD_module_find(JNIEnv *env, jobject _this, jstring modulename){
00329 int64 rv = 0;
00330 char *instr = (char *)env->GetStringUTFChars(modulename, NULL);
00331 rv = (int64)gl_find_module(instr);
00332 env->ReleaseStringUTFChars(modulename, instr);
00333 return rv;
00334 }
00335
00336 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_module_var(JNIEnv *env, jobject _this, jstring modulename, jstring varname){
00337 int64 rv = 0;
00338 char *instr = (char *)env->GetStringUTFChars(modulename, NULL);
00339 MODULE *module = gl_find_module(instr);
00340 if(module != NULL){
00341 char *varstr = (char *)env->GetStringUTFChars(varname, NULL);
00342 void *addr = gl_get_module_var(module, varstr);
00343 env->ReleaseStringUTFChars(varname, varstr);
00344 rv = (int64)addr;
00345 }
00346 env->ReleaseStringUTFChars(modulename, instr);
00347 return rv;
00348 }
00349
00350 EXPORT jstring JNICALL Java_gridlabd_GridlabD_findfile(JNIEnv *env, jobject _this, jstring filename){
00351 char *instr = (char *)env->GetStringUTFChars(filename, NULL);
00352 char *filestr = gl_findfile(instr, NULL, 0);
00353 jstring rv = NULL;
00354 if(filestr)
00355 rv = env->NewStringUTF(filestr);
00356 env->ReleaseStringUTFChars(filename, instr);
00357 return rv;
00358 }
00359
00360 EXPORT jlong JNICALL Java_gridlabd_GridlabD_find_1module(JNIEnv *env, jobject _this, jstring modulename){
00361 char *instr = (char *)env->GetStringUTFChars(modulename, NULL);
00362 int64 rv = (int64)gl_find_module(instr);
00363 env->ReleaseStringUTFChars(modulename, instr);
00364 return rv;
00365 }
00366
00367
00368 EXPORT jlong JNICALL Java_gridlabd_GridlabD_find_1property(JNIEnv *env, jobject _this, jlong oclass_addr, jstring propname){
00369 char *instr = (char *)env->GetStringUTFChars(propname, NULL);
00370 int64 rv = (int64)(gl_find_property((CLASS *)oclass_addr, instr));
00371 env->ReleaseStringUTFChars(propname, instr);
00372 return rv;
00373 }
00374
00375
00376 EXPORT jint JNICALL Java_gridlabd_GridlabD_module_1depends(JNIEnv *env, jobject _this, jstring modname, jint major, jint minor, jint build){
00377 char *instr = (char *)env->GetStringUTFChars(modname, NULL);
00378 int rv = gl_module_depends(instr, (unsigned char)major, (unsigned char)minor, (unsigned char)build);
00379 return rv;
00380 }
00381
00382 EXPORT jlong JNICALL Java_gridlabd_GridlabD_register_1class(JNIEnv *env, jobject _this, jlong moduleaddr, jstring classname, jint passconfig){
00383 char *instr = (char *)env->GetStringUTFChars(classname, NULL);
00384 int64 rv = (int64)gl_register_class((MODULE *)moduleaddr, instr, 0, (PASSCONFIG)(0xFF & passconfig));
00385 env->ReleaseStringUTFChars(classname, instr);
00386 return rv;
00387 }
00388
00389 EXPORT jlong JNICALL Java_gridlabd_GridlabD_create_1object(JNIEnv *env, jobject _this, jlong oclass_addr, jlong size){
00390 return (int64)(gl_create_object((CLASS *)oclass_addr));
00391 }
00392
00393 EXPORT jlong JNICALL Java_gridlabd_GridlabD_create_1array(JNIEnv *env, jobject _this, jlong oclass_addr, jlong size, jint n_objects){
00394 return (int64)(gl_create_array((CLASS *)oclass_addr, n_objects));
00395 }
00396
00397
00398 EXPORT jlong JNICALL Java_gridlabd_GridlabD_create_foreign(JNIEnv *env, jobject _this, jlong inobj){
00399 OBJECT *ptr = gl_create_foreign((OBJECT *)inobj);
00400 return (jlong)ptr;
00401 }
00402
00403 EXPORT jint JNICALL Java_gridlabd_GridlabD_object_1isa(JNIEnv *env, jobject _this, jlong obj_addr, jstring _typename){
00404 char *name = (char *)env->GetStringUTFChars(_typename, NULL);
00405 int rv = gl_object_isa((OBJECT *)obj_addr, name);
00406 env->ReleaseStringUTFChars(_typename, name);
00407 return rv;
00408 }
00409
00410 EXPORT jlong JNICALL Java_gridlabd_GridlabD_publish_1variable(JNIEnv *env, jobject _this, jlong moduleaddr, jlong classaddr, jstring varname, jstring vartype, jlong offset){
00411 static struct s_map {
00412 char *name;
00413 PROPERTYTYPE pt;
00414 int size;
00415 } map[] = {
00416 {"int16", PT_int16, sizeof(int16)},
00417 {"int32", PT_int32, sizeof(int32)},
00418 {"int64", PT_int64, sizeof(int64)},
00419 {"double", PT_double, sizeof(double)},
00420 {"char8", PT_char8, sizeof(char8)},
00421 {"char32", PT_char32, sizeof(char8)},
00422 {"char256", PT_char256, sizeof(char256)},
00423 {"char1024", PT_char1024, sizeof(char1024)},
00424 {"complex", PT_complex, sizeof(complex)},
00425 {"object", PT_object, sizeof(OBJECT *)},
00426 };
00427 char *varstr = (char *)env->GetStringUTFChars(varname, NULL);
00428 char *typestr = (char *)env->GetStringUTFChars(vartype, NULL);
00429 PROPERTY *prop = NULL;
00430 int i = 0;
00431 for(i = 0; i < (sizeof(map)/sizeof(map[0])); ++i){
00432 if(0 == strcmp(map[i].name, typestr))
00433 break;
00434 }
00435 if(i < sizeof(map)/sizeof(map[0])){
00436 if(gl_publish_variable((CLASS *)(classaddr),map[i].pt, varstr, (void*)offset, PT_EXTEND, NULL) != 0){
00437 env->ReleaseStringUTFChars(varname, varstr);
00438 env->ReleaseStringUTFChars(vartype, typestr);
00439 return map[i].size;
00440 } else {
00441 gl_error("unable to publish property %s in class %s", varstr, ((CLASS *)(classaddr))->name);
00442 env->ReleaseStringUTFChars(varname, varstr);
00443 env->ReleaseStringUTFChars(vartype, typestr);
00444 return 0;
00445 }
00446 } else {
00447 gl_error("unrecognized proptype %s", typestr);
00448 env->ReleaseStringUTFChars(varname, varstr);
00449 env->ReleaseStringUTFChars(vartype, typestr);
00450 return 0;
00451 }
00452 }
00453
00454 EXPORT jlong JNICALL Java_gridlabd_GridlabD_publish_1function(JNIEnv *env, jobject _this, jlong moduleaddr, jlong classaddr, jstring funcname){
00455 gl_error("publish_function from Java not supported (still working on mapping fuctions to methods)");
00456 return 0;
00457 }
00458
00459
00460 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_1function(JNIEnv *env, jobject _this, jstring classstr, jstring ftnstr){
00461 gl_error("get_function from Java not supported (still working on mapping functions to methods)");
00462 return 0;
00463 }
00464
00465 EXPORT jint JNICALL Java_gridlabd_GridlabD_set_1dependent(JNIEnv *env, jobject _this, jlong from_addr, jlong to_addr){
00466 return gl_set_dependent((OBJECT *)from_addr, (OBJECT *)to_addr);
00467 }
00468
00469 EXPORT jint JNICALL Java_gridlabd_GridlabD_set_1parent(JNIEnv *env, jobject _this, jlong child_addr, jlong parent_addr){
00470 return gl_set_parent((OBJECT *)child_addr, (OBJECT *)parent_addr);
00471 }
00472
00473 EXPORT jint JNICALL Java_gridlabd_GridlabD_register_1type(JNIEnv *env, jobject _this, jlong oclass_addr, jstring _typename, jstring from_string_fname, jstring to_string_fname){
00474 gl_error("register_type from Java not supported (still working on mapping fuctions to methods)");
00475 return 0;
00476 }
00477
00478 EXPORT jint JNICALL Java_gridlabd_GridlabD_publish_1delegate(JNIEnv *env, jobject _this){
00479 gl_error("delegated types not supported using class_define_type (use class_define_map instead)");
00480 return 0;
00481 }
00482
00483 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_1property(JNIEnv *env, jobject _this, jlong oaddr, jstring propertyname){
00484 char *pstr = (char *)env->GetStringUTFChars(propertyname, NULL);
00485 OBJECT *obj = (OBJECT *)oaddr;
00486 int64 rv = (int64)gl_get_property(obj, pstr);
00487 env->ReleaseStringUTFChars(propertyname, pstr);
00488 return rv;
00489 }
00490
00491
00492 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_1property_1by_1name(JNIEnv *env, jobject _this, jstring objectname, jstring propertyname){
00493 char *ostr = (char *)env->GetStringUTFChars(objectname, NULL);
00494 char *pstr = (char *)env->GetStringUTFChars(propertyname, NULL);
00495 OBJECT *obj = gl_get_object(ostr);
00496 int64 rv = (int64)gl_get_property(obj, pstr);
00497 env->ReleaseStringUTFChars(propertyname, pstr);
00498 env->ReleaseStringUTFChars(objectname, ostr);
00499 return rv;
00500 }
00501
00502 EXPORT jstring JNICALL Java_gridlabd_GridlabD_get_1value(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00503 char buffer[1025];
00504 char *pstr = (char *)env->GetStringUTFChars(propertyname, NULL);
00505 PROPERTY *prop = gl_get_property((OBJECT *)object_addr, pstr);
00506
00507 int rv = gl_get_value((OBJECT *)object_addr, (void *)(object_addr+sizeof(OBJECT)+(int64)prop->addr), buffer, 1024, prop);
00508 env->ReleaseStringUTFChars(propertyname, pstr);
00509 return rv ? env->NewStringUTF(buffer) : NULL;
00510 }
00511
00512 EXPORT jint JNICALL Java_gridlabd_GridlabD_set_1value(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname, jstring value){
00513 char *vstr = (char *)env->GetStringUTFChars(value, NULL);
00514 char *pstr = (char *)env->GetStringUTFChars(propertyname, NULL);
00515 OBJECT *obj = (OBJECT *)object_addr;
00516 PROPERTY *prop = gl_get_property(obj, pstr);
00517 int rv = gl_set_value(obj, (void *)(object_addr + sizeof(OBJECT) + (int64)prop->addr), vstr, prop);
00518 if(rv == 0){
00519 gl_error("unable to set_value for %s.%s to %s", obj->oclass->name, pstr, vstr);
00520 }
00521 env->ReleaseStringUTFChars(propertyname, pstr);
00522 env->ReleaseStringUTFChars(value, vstr);
00523 return rv;
00524 }
00525
00526 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_unit_1convert(JNIEnv *env, jobject _this, jstring from, jstring to, jdouble invalue){
00527 char *fromstr = (char *)env->GetStringUTFChars(from, NULL);
00528 char *tostr = (char *)env->GetStringUTFChars(to, NULL);
00529 double rv = gl_convert(fromstr, tostr, &invalue);
00530 env->ReleaseStringUTFChars(from, fromstr);
00531 env->ReleaseStringUTFChars(to, tostr);
00532 return rv;
00533 }
00534
00535 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_get_1complex_1real(JNIEnv *env, jobject _this, jlong object_addr, jlong property_addr){
00536 return (gl_get_complex((OBJECT *)object_addr, (PROPERTY *)property_addr))->Re();
00537 }
00538
00539 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_get_1complex_1_real_1by_1name(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00540 char *pname =(char *)env->GetStringUTFChars(propertyname, NULL);
00541 double rv = (gl_get_complex_by_name((OBJECT *)object_addr, pname))->Re();
00542 env->ReleaseStringUTFChars(propertyname, pname);
00543 return rv;
00544 }
00545
00546 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_get_1complex_1imag(JNIEnv *env, jobject _this, jlong object_addr, jlong property_addr){
00547 return (gl_get_complex((OBJECT *)object_addr, (PROPERTY *)property_addr))->Im();
00548 }
00549
00550 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_get_1complex_1imag_1by_1name(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00551 char *pname =(char *)env->GetStringUTFChars(propertyname, NULL);
00552 double rv = (gl_get_complex_by_name((OBJECT *)object_addr, pname))->Im();
00553 env->ReleaseStringUTFChars(propertyname, pname);
00554 return rv;
00555 }
00556
00557 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_1object(JNIEnv *env, jobject _this, jstring oname){
00558 char *name =(char *)env->GetStringUTFChars(oname, NULL);
00559 int64 rv = (int64)gl_get_object(name);
00560 env->ReleaseStringUTFChars(oname, name);
00561 return rv;
00562 }
00563
00564 EXPORT jint JNICALL Java_gridlabd_GridlabD_get_1int16(JNIEnv *env, jobject _this, jlong object_addr, jlong property_addr){
00565 return *gl_get_int16((OBJECT *)object_addr, (PROPERTY *)property_addr);
00566 }
00567
00568 EXPORT jint JNICALL Java_gridlabd_GridlabD_get_1int16_1by_1name(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00569 char *pname =(char *)env->GetStringUTFChars(propertyname, NULL);
00570 int16 rv = *gl_get_int16_by_name((OBJECT *)object_addr, pname);
00571 env->ReleaseStringUTFChars(propertyname, pname);
00572 return rv;
00573 }
00574
00575 EXPORT jint JNICALL Java_gridlabd_GridlabD_get_1int32(JNIEnv *env, jobject _this, jlong object_addr, jlong property_addr){
00576 return *gl_get_int32((OBJECT *)object_addr, (PROPERTY *)property_addr);
00577 }
00578
00579 EXPORT jint JNICALL Java_gridlabd_GridlabD_get_1int32_1by_1name(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00580 char *pname =(char *)env->GetStringUTFChars(propertyname, NULL);
00581 int32 rv = *gl_get_int32_by_name((OBJECT *)object_addr, pname);
00582 env->ReleaseStringUTFChars(propertyname, pname);
00583 return rv;
00584 }
00585
00586 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_1int64(JNIEnv *env, jobject _this, jlong object_addr, jlong property_addr){
00587 return *gl_get_int64((OBJECT *)object_addr, (PROPERTY *)property_addr);
00588 }
00589
00590 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_1int64_1by_1name(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00591 char *pname =(char *)env->GetStringUTFChars(propertyname, NULL);
00592 int64 rv = *gl_get_int64_by_name((OBJECT *)object_addr, pname);
00593 env->ReleaseStringUTFChars(propertyname, pname);
00594 return rv;
00595 }
00596
00597 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_get_1double(JNIEnv *env, jobject _this, jlong object_addr, jlong property_addr){
00598 return *gl_get_double((OBJECT *)object_addr, (PROPERTY *)property_addr);
00599 }
00600
00601 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_get_1double_1by_1name(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00602 char *pname =(char *)env->GetStringUTFChars(propertyname, NULL);
00603 int l = env->GetStringUTFLength(propertyname);
00604 double rv = *gl_get_double_by_name((OBJECT *)object_addr, pname);
00605 env->ReleaseStringUTFChars(propertyname, pname);
00606 return rv;
00607 }
00608
00609 EXPORT jstring JNICALL Java_gridlabd_GridlabD_get_1string(JNIEnv *env, jobject _this, jlong object_addr, jlong property_addr){
00610 char *str = gl_get_string((OBJECT *)object_addr, (PROPERTY *)property_addr);
00611 return env->NewStringUTF(str);
00612 }
00613
00614 EXPORT jstring JNICALL Java_gridlabd_GridlabD_get_1string_1by_1name(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00615 char *pname =(char *)env->GetStringUTFChars(propertyname, NULL);
00616 char *str = gl_get_string_by_name((OBJECT *)object_addr, pname);
00617 env->ReleaseStringUTFChars(propertyname, pname);
00618 return env->NewStringUTF(str);
00619 }
00620
00621 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_1object_1prop(JNIEnv *env, jobject _this, jlong object_addr, jlong property_addr){
00622 PROPERTY *p = (PROPERTY *)(property_addr);
00623 int64 i = (int64)(gl_get_object_prop((OBJECT *)object_addr, p));
00624 return i;
00625 }
00626
00627
00628 EXPORT jlong JNICALL Java_gridlabd_GridlabD_get_1object_1by_1name(JNIEnv *env, jobject _this, jlong object_addr, jstring propertyname){
00629 char *pname =(char *)env->GetStringUTFChars(propertyname, NULL);
00630 int64 rv = (int64)gl_get_object_prop((OBJECT *)object_addr, gl_get_property((OBJECT *)object_addr, pname));
00631 env->ReleaseStringUTFChars(propertyname, pname);
00632 return rv;
00633 }
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645 EXPORT jlong JNICALL Java_gridlabd_GridlabD_create_1aggregate(JNIEnv *env, jobject _this, jstring aggregator, jstring group_expression){
00646 char *agstr = (char *)env->GetStringUTFChars(aggregator, NULL);
00647 char *expstr = (char *)env->GetStringUTFChars(group_expression, NULL);
00648 int64 rv = (int64)gl_create_aggregate(agstr, expstr);
00649 env->ReleaseStringUTFChars(group_expression, expstr);
00650 env->ReleaseStringUTFChars(aggregator, agstr);
00651 return rv;
00652 }
00653
00654 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_run_1aggregate(JNIEnv *env, jobject _this, jlong aggregate_addr){
00655 return gl_run_aggregate((s_aggregate *)aggregate_addr);
00656 }
00657
00658
00659
00660
00661
00662 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_random_1unifrom(JNIEnv *env, jobject _this, jdouble a, jdouble b){
00663 return gl_random_uniform(a, b);
00664 }
00665
00666 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_random_1normal(JNIEnv *env, jobject _this, jdouble m, jdouble s){
00667 return gl_random_normal(m, s);
00668 }
00669
00670 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_random_1lognormal(JNIEnv *env, jobject _this, jdouble m, jdouble s){
00671 return gl_random_lognormal(m, s);
00672 }
00673
00674 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_random_1bernoulli(JNIEnv *env, jobject _this, jdouble p){
00675 return gl_random_bernoulli(p);
00676 }
00677
00678 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_random_1pareto(JNIEnv *env, jobject _this, jdouble m, jdouble s){
00679 return gl_random_pareto(m, s);
00680 }
00681
00682 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_random_1sampled(JNIEnv *env, jobject _this, jint n, jdoubleArray x){
00683 double *_x = env->GetDoubleArrayElements(x, NULL);
00684 double rv = gl_random_sampled(n, _x);
00685 env->ReleaseDoubleArrayElements(x, _x, 0);
00686 return rv;
00687 }
00688
00689 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_random_1exponential(JNIEnv *env, jobject _this, jdouble l){
00690 return gl_random_exponential(l);
00691 }
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701 EXPORT jlong JNICALL Java_gridlabd_GridlabD_parsetime(JNIEnv *env, jobject _this, jstring value){
00702 char *timestr = (char *)env->GetStringUTFChars(value, NULL);
00703 int64 rv = gl_parsetime(timestr);
00704 env->ReleaseStringUTFChars(value, timestr);
00705 return rv;
00706 }
00707
00708
00709
00710
00711
00712 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_todays(JNIEnv *env, jobject _this, jlong t){
00713 return gl_todays(t);
00714 }
00715
00716 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_tohours(JNIEnv *env, jobject _this, jlong t){
00717 return gl_tohours(t);
00718 }
00719
00720 EXPORT jdouble JNICALL Java_gridlabd_GridlabD_tominutes(JNIEnv *env, jobject _this, jlong t){
00721 return gl_tominutes(t);
00722 }
00723
00724
00725
00726
00727
00728
00729 EXPORT jlong JNICALL Java_gridlabd_GridlabD_global_1create(JNIEnv *env, jobject _this, jstring name, jstring args){
00730 char *namestr = (char *)env->GetStringUTFChars(name, NULL);
00731 char *argstr = (char *)env->GetStringUTFChars(args, NULL);
00732 int rv = gl_global_setvar(namestr, argstr);
00733 env->ReleaseStringUTFChars(args, argstr);
00734 env->ReleaseStringUTFChars(name, namestr);
00735 return rv;
00736 }
00737
00738 EXPORT jint JNICALL Java_gridlabd_GridlabD_global_1setvar(JNIEnv *env, jobject _this, jstring def, jstring args){
00739 char *namestr = (char *)env->GetStringUTFChars(def, NULL);
00740 char *argstr = (char *)env->GetStringUTFChars(args, NULL);
00741 int rv = gl_global_setvar(namestr, argstr);
00742 env->ReleaseStringUTFChars(args, argstr);
00743 env->ReleaseStringUTFChars(def, namestr);
00744 return rv;
00745 }
00746
00747 EXPORT jstring JNICALL Java_gridlabd_GridlabD_global_1getvar(JNIEnv *env, jobject _this, jstring name){
00748 char buffer[1025];
00749 char *namestr = (char *)env->GetStringUTFChars(name, NULL);
00750 int64 rv = (int64)gl_global_getvar(namestr, buffer, 1024);
00751 env->ReleaseStringUTFChars(name, namestr);
00752 return rv ? env->NewStringUTF(buffer) : NULL;
00753 }
00754
00755 EXPORT jlong JNICALL Java_gridlabd_GridlabD_global_1find(JNIEnv *env, jobject _this, jstring name){
00756 char *namestr = (char *)env->GetStringUTFChars(name, NULL);
00757 int64 rv = (int64)gl_global_find(namestr);
00758 env->ReleaseStringUTFChars(name, namestr);
00759 return rv;
00760 }
00761
00762
00763 EXPORT jdouble Java_gridlabd_GridlabD_clip(JNIEnv *env, jobject _this, jdouble x, jdouble a, jdouble b){
00764 return clip(x, a, b);
00765 }
00766
00767
00768 EXPORT jint Java_gridlabd_GridlabD_bitof(JNIEnv *env, jobject _this, jlong x){
00769 return bitof(x);
00770 }
00771
00772
00773 EXPORT jstring Java_gridlabd_GridlabD_name(JNIEnv *env, jobject _this, jlong myaddr){
00774 char buffer[256];
00775 char *ptr;
00776 OBJECT *my = (OBJECT *)myaddr;
00777 if(my == 0){
00778 return NULL;
00779 }
00780 ptr = gl_name(my, buffer, 255);
00781 if(ptr){
00782 return env->NewStringUTF(buffer);
00783 } else {
00784 return NULL;
00785 }
00786 }
00787
00788
00789 JNIEXPORT jlong JNICALL Java_gridlabd_GridlabD_find_1schedule(JNIEnv *env, jobject _this, jstring name){
00790 char *namestr = (char *)env->GetStringUTFChars(name, NULL);
00791 return (jlong)(callback->schedule.find(namestr));
00792 }
00793
00794
00795 JNIEXPORT jlong JNICALL Java_gridlabd_GridlabD_schedule_1create(JNIEnv *env, jobject _this, jstring name, jstring def){
00796 char *namestr = (char *)(env->GetStringUTFChars(name, NULL));
00797 char *definition = (char *)(env->GetStringUTFChars(def, NULL));
00798 return (jlong)(callback->schedule.create(namestr, definition));
00799 }
00800
00801
00802 JNIEXPORT jlong JNICALL Java_gridlabd_GridlabD_schedule_1index(JNIEnv *env, jobject _this, jlong sch, jlong ts){
00803 return (jlong)(callback->schedule.index((SCHEDULE *)(sch), (TIMESTAMP)(ts)));
00804 }
00805
00806
00807 JNIEXPORT jdouble JNICALL Java_gridlabd_GridlabD_schedule_1value(JNIEnv *env, jobject _this, jlong sch, jlong index){
00808 return (jdouble)(callback->schedule.value((SCHEDULE *)sch, (SCHEDULEINDEX)index));
00809 }
00810
00811
00812 JNIEXPORT jlong JNICALL Java_gridlabd_GridlabD_schedule_1dtnext(JNIEnv *env, jobject _this, jlong sch, jlong index){
00813 return (jlong)(callback->schedule.dtnext((SCHEDULE *)(sch), (SCHEDULEINDEX)index));
00814 }
00815
00816
00817 JNIEXPORT jlong JNICALL Java_gridlabd_GridlabD_enduse_1create(JNIEnv *env, jobject _this){
00818 enduse *eu = (enduse *)malloc(sizeof(enduse));
00819 memset(eu, 0, sizeof(enduse));
00820 if(1 == (callback->enduse.create(eu))){
00821 return (jlong)(eu);
00822 } else {
00823 return 0;
00824 }
00825 }
00826
00827
00828 JNIEXPORT jlong JNICALL Java_gridlabd_GridlabD_enduse_1sync(JNIEnv *env, jobject _this, jlong e, jlong t1){
00829 return (callback->enduse.sync((enduse *)e, PC_BOTTOMUP,(TIMESTAMP)t1));
00830 }
00831
00832
00833 JNIEXPORT jlong JNICALL Java_gridlabd_GridlabD_loadshape_1create(JNIEnv *env, jobject _this, jlong sched_addr){
00834 loadshape *ls;
00835 if(sched_addr == 0){
00836 return 0;
00837 }
00838 ls = (loadshape *)malloc(sizeof(loadshape));
00839 memset(ls, 0, sizeof(loadshape));
00840 if(0 == callback->loadshape.create(ls)){
00841 return 0;
00842 }
00843 ls->schedule = (SCHEDULE *)sched_addr;
00844 return (jlong)ls;
00845 }
00846
00847
00848 JNIEXPORT jdouble JNICALL Java_gridlabd_GridlabD_get_1loadshape_1value(JNIEnv *env, jobject _this, jlong ls_addr){
00849 if(ls_addr != 0){
00850 loadshape *ls = (loadshape *)ls_addr;
00851 return (jdouble)(ls->load);
00852 } else {
00853 return 0.0;
00854 }
00855 }
00856
00857
00858
00859
00860
00861
00862 JNIEXPORT jstring JNICALL Java_gridlabd_GridlabD_(JNIEnv *env, jobject _this, jlong ts){
00863 char buffer[64];
00864 DATETIME dt;
00865 strcpy(buffer,"(invalid time)");
00866 if(gl_localtime(ts, &dt)){
00867 gl_strftime(&dt, buffer, sizeof(buffer));
00868 }
00869 return env->NewStringUTF(buffer);
00870 }
00871
00872
00873 JNIEXPORT jdouble JNICALL Java_gridlabd_GridlabD_lerp(JNIEnv *env, jobject _this, jdouble t, jdouble x0, jdouble y0, jdouble x1, jdouble y1){
00874 return gl_lerp(t, x0, y0, x1, y1);
00875 }
00876
00877
00878 JNIEXPORT jdouble JNICALL Java_gridlabd_GridlabD_qerp(JNIEnv *env, jobject _this, jdouble t, jdouble x0, jdouble y0, jdouble x1, jdouble y1, jdouble x2, jdouble y2){
00879 return gl_qerp(t, x0, y0, x1, y1, x2, y2);
00880 }
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890
00891
00892
00893
00894
00895
00896
00897
00898
00899