12 #include <../../nrnconf.h> 34 extern void* (*p_java2nrn_cons)(
Object*);
37 extern char** (*p_java2nrn_smeth)(
Object* ho,
Symbol* method);
39 extern const char* (*p_java2nrn_classname)(
Object* ho);
92 hoc_execerror(
"JavaObject for internal use only.",
"Do not construct");
102 jobject jo1 = (jobject)v;
105 if (o2 ==
nil) {
return 0.;}
110 jo1,jo2 ) != 0 ) ? 1. : 0.;
117 jstring js = (jstring)
nrnjava_env->CallStaticObjectMethod(
137 nil,
nil, jo_retstr_members);
141 #if defined(_MSWIN) || (defined(MAC) && !defined(DARWIN)) 144 printf(
"ERROR in nrnjava_init : neuron/Redirect class not loaded\n");
145 printf(
"Look in the Redirect.out file of the current working directory for the reason for failure\n");
153 printf(
"ERROR in nrnjava_init : neuron/NrnClassLoader not found\n");
156 "load",
"(Ljava/lang/String;)Ljava/lang/Class;" );
162 printf(
"ERROR in nrnjava_init : neuron.Neuron class not found\n");
165 js =
nrnjava_env->NewStringUTF(
"neuron.HocObject");
168 printf(
"ERROR in nrnjava_init : neuron.HocObject class not found\n");
187 "(I)Ljava/lang/Object;" );
190 "(I)Ljava/lang/Object;" );
193 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I" );
195 "invokeDoubleMethod",
196 "(Ljava/lang/Object;III)D" );
199 "(Ljava/lang/Object;III)Ljava/lang/String;" );
201 "invokeObjectMethod",
202 "(Ljava/lang/Object;III)Ljava/lang/Object;" );
204 "encapsulateHocObject",
205 "(JI)Ljava/lang/Object;" );
208 "(Ljava/lang/Object;)I" );
214 "(Ljava/lang/Object;Ljava/lang/Object;)I" );
217 "(Ljava/lang/Object;)Ljava/lang/String;" );
219 "hocObjectCast",
"J");
229 char *mangledstr =
new char[strlen(s) + 1];
230 strcpy(mangledstr, s);
231 for (
char* cp = mangledstr; *cp; ++cp) {
241 char *mangledstr =
new char[strlen(s) + 1];
242 strcpy(mangledstr, s);
243 for (
char* cp = mangledstr; *cp; ++cp) {
254 if (o1 == o2)
return true;
255 if (o1 == 0 || o2 == 0)
return false;
258 ) != 0 ) ?
true :
false;
267 jint cid = -(o->ctemplate->id) - 1;
290 if (opaque_java_object) {
291 nrnjava_env->DeleteGlobalRef( (jobject) opaque_java_object );
314 jstring js = env->NewStringUTF( jname );
315 if (env->ExceptionOccurred()) { env->ExceptionDescribe();}
316 jstring hs = env->NewStringUTF( hn );
317 jstring jp = env->NewStringUTF(path);
330 jint cid = -(ho->ctemplate->id) - 1;
335 int n = strlen(method->
name);
337 for (
Symbol*
s = ho->ctemplate->symtable->first;
s;
s =
s->next) {
338 if (
s != method && strncmp(
s->name, method->
name, n) == 0
339 && isdigit(
s->name[n])
344 hoc_execerror(method->
name,
"Overloaded. Disambiguate using a more specific method.");
352 double d = (double)
nrnjava_env->CallStaticDoubleMethod(
355 -(jint)ho->ctemplate->id - 1,
373 cs =
new char*[
imax];
374 for (i=0; i <
imax; ++
i) {
379 const char* jc =
nrnjava_env->GetStringUTFChars(js, 0);
385 cs[
i] =
new char[strlen(jc) + 1];
396 jstring js = (jstring)
nrnjava_env->CallStaticObjectMethod(
399 -(jint)ho->ctemplate->id - 1,
459 -(jint)ho->ctemplate->id - 1,
503 setwinID, (jlong)win, type, left, top);
const char *(* p_java2nrn_classname)(Object *ho)
static jmethodID invokeDoubleMethodID
char * nrn_underbar2dot(const char *s)
static void java2nrn_destruct(void *opaque_java_object)
Destroy java reference.
static jmethodID nrnclsldID
static jmethodID encapsulateID
static const char ** joname(void *v)
static jmethodID jclassnameID
static char ** java2nrn_smeth(Object *ho, Symbol *method)
invoke java method returning String
Object ** nj_j2hObject(jobject jo, int type)
Symbol * hoc_lookup(const char *)
static Object ** java2nrn_ometh(Object *ho, Symbol *method)
invoke java method returning a Java Object
char * hoc_object_name(Object *ob)
Object **(* p_java2nrn_ometh)(Object *ho, Symbol *method)
void(* nrnjava_pwm_setwin)(void *, int, int, int)
static bool java2nrn_identity(Object *o1, Object *o2)
equality in the sense of ==
static void * joconstruct(Object *)
const char * string() const
#define implementPtrList(PtrList, T)
JNIEnv * nrnjava_root_env
static double java2nrn_dmeth(Object *ho, Symbol *method)
invoke java method returning double
Object ** hoc_temp_objvar(Symbol *symtemp, void *v)
static jmethodID constructNoArgID
int const size_t const size_t n
void class2oc(const char *, void *(*cons)(Object *), void(*destruct)(void *), Member_func *, int(*checkpoint)(void **), Member_ret_obj_func *, Member_ret_str_func *)
Symlist * hoc_top_level_symlist
Neuron/Java Interface code.
static void jodestruct(void *v)
static String NJStrList * njclassnames
static jmethodID invokeCharsMethodID
void nrnjni_registration(jclass nrnCls)
static jmethodID constructWithArgID
static Member_ret_str_func jo_retstr_members[]
void hoc_execerror(const char *, const char *)
static jmethodID makeHocClassID
static void pwm_setwin(void *, int, int, int)
static jfieldID hocObjectCastID
void nrnjni_redirreg(jclass nrnCls)
Symbol NJSymList * nrn_jclass_symlist
static char ** js2charpool(jstring js)
static void overloaded(Object *ho, Symbol *method)
static jmethodID identityID
char * nrn_dot2underbar(const char *s)
JNI code for Neuron.java C implementations of Java native methods.
HocStruct cTemplate * ctemplate
double(* p_java2nrn_dmeth)(Object *ho, Symbol *method)
void *(* p_java2nrn_cons)(Object *)
jobject nj_encapsulate(Object *ho)
a hoc object must be encapsulated in a java object for use in java.
Symbol * hoc_table_lookup(const char *, Symlist *)
int convertJavaClassToHoc(JNIEnv *env, const char *jname, const char *hname, const char *path)
Make a hoc equivalent to Java class (jname) calling it hname in hoc.
static void * java2nrn_cons(Object *o)
Construct a new instance of a java class.
static jmethodID setwinID
static double joequals(void *v)
bool(* p_java2nrn_identity)(Object *o1, Object *o2)
void(* p_java2nrn_destruct)(void *opaque_java_object)
declarePtrList(NJSymList, Symbol) implementPtrList(NJSymList
Object ** hoc_temp_objptr(Object *)
char **(* p_java2nrn_smeth)(Object *ho, Symbol *method)
Object ** hoc_objgetarg(int)
static jmethodID getObjectTypeID
static const char * java2nrn_classname(Object *ho)
static Member_func jo_members[]
static jmethodID invokeObjectMethodID