173 |
createRawData (JNIEnv * env, jobject obj, void *ptr) |
createRawData (JNIEnv * env, jobject obj, void *ptr) |
174 |
{ |
{ |
175 |
jclass cls; |
jclass cls; |
|
jmethodID method; |
|
176 |
jobject data; |
jobject data; |
177 |
jfieldID data_fid; |
jfieldID data_fid; |
178 |
|
|
179 |
cls = (*env)->GetObjectClass (env, obj); |
cls = (*env)->GetObjectClass (env, obj); |
180 |
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/RawData;"); |
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/Pointer;"); |
181 |
assert (data_fid != 0); |
assert (data_fid != 0); |
182 |
|
|
183 |
#ifdef POINTERS_ARE_64BIT |
data = JCL_NewRawDataObject (env, ptr); |
|
cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); |
|
|
method = (*env)->GetMethodID (env, cls, "<init>", "(J)V"); |
|
|
data = (*env)->NewObject (env, cls, method, (jlong) ptr); |
|
|
#else |
|
|
cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); |
|
|
method = (*env)->GetMethodID (env, cls, "<init>", "(I)V"); |
|
|
data = (*env)->NewObject (env, cls, method, (jint) ptr); |
|
|
#endif |
|
184 |
|
|
185 |
(*env)->SetObjectField (env, obj, data_fid, data); |
(*env)->SetObjectField (env, obj, data_fid, data); |
186 |
} |
} |
189 |
getData (JNIEnv * env, jobject obj) |
getData (JNIEnv * env, jobject obj) |
190 |
{ |
{ |
191 |
jclass cls; |
jclass cls; |
|
jfieldID field; |
|
192 |
jfieldID data_fid; |
jfieldID data_fid; |
193 |
jobject data; |
jobject data; |
194 |
|
|
195 |
cls = (*env)->GetObjectClass (env, obj); |
cls = (*env)->GetObjectClass (env, obj); |
196 |
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/RawData;"); |
data_fid = (*env)->GetFieldID (env, cls, "data", "Lgnu/classpath/Pointer;"); |
197 |
assert (data_fid != 0); |
assert (data_fid != 0); |
198 |
data = (*env)->GetObjectField (env, obj, data_fid); |
data = (*env)->GetObjectField (env, obj, data_fid); |
199 |
|
|
200 |
#if SIZEOF_VOID_P == 8 |
return JCL_GetRawData(env, data); |
|
cls = (*env)->FindClass (env, "gnu/classpath/RawData64"); |
|
|
field = (*env)->GetFieldID (env, cls, "data", "J"); |
|
|
return (void *) (*env)->GetLongField (env, data, field); |
|
|
#else |
|
|
cls = (*env)->FindClass (env, "gnu/classpath/RawData32"); |
|
|
field = (*env)->GetFieldID (env, cls, "data", "I"); |
|
|
return (void *) (*env)->GetIntField (env, data, field); |
|
|
#endif |
|
201 |
} |
} |