You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by va...@apache.org on 2009/10/20 01:08:05 UTC
svn commit: r826864 - in /lucene/pylucene/trunk/jcc: CHANGES jcc/python.py
jcc/sources/JArray.h jcc/sources/JCCEnv.cpp jcc/sources/JCCEnv.h
jcc/sources/JObject.h jcc/sources/functions.cpp jcc/sources/functions.h
jcc/sources/jcc.cpp
Author: vajda
Date: Mon Oct 19 23:08:04 2009
New Revision: 826864
URL: http://svn.apache.org/viewvc?rev=826864&view=rev
Log:
- reworked iterator and enumeration 'next' templates to shortcut C++ wrappers
Modified:
lucene/pylucene/trunk/jcc/CHANGES
lucene/pylucene/trunk/jcc/jcc/python.py
lucene/pylucene/trunk/jcc/jcc/sources/JArray.h
lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h
lucene/pylucene/trunk/jcc/jcc/sources/JObject.h
lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
lucene/pylucene/trunk/jcc/jcc/sources/functions.h
lucene/pylucene/trunk/jcc/jcc/sources/jcc.cpp
Modified: lucene/pylucene/trunk/jcc/CHANGES
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/CHANGES?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/CHANGES (original)
+++ lucene/pylucene/trunk/jcc/CHANGES Mon Oct 19 23:08:04 2009
@@ -7,6 +7,7 @@
- added (partial) support for Java generics
- added 'string_' property to JArray('byte') instances to extract byte string
- fixed bug with passing list of extension objects
+ - reworked iterator and enumeration 'next' templates to shortcut C++ wrappers
-
Version 2.3 -> 2.4
Modified: lucene/pylucene/trunk/jcc/jcc/python.py
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/python.py?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/python.py (original)
+++ lucene/pylucene/trunk/jcc/jcc/python.py Mon Oct 19 23:08:04 2009
@@ -49,7 +49,7 @@
'int': ('i', '(int) %s', False),
'long': ('L', '(long long) %s', False),
'short': ('i', '(int) %s', False),
- 'java.lang.String': ('O', 'env->fromJString((jstring) %s)', True) }
+ 'java.lang.String': ('O', 'env->fromJString((jstring) %s, 0)', True) }
def parseArgs(params, current, generics):
@@ -809,9 +809,9 @@
if nextExt:
tp_iternext = 'get_extension_next'
elif generics and clsParams:
- tp_iternext = '((PyObject *(*)(java::util::t_Iterator *)) get_generic_iterator_next<java::util::t_Iterator,%s%st_%s,%s>)' %(ns, sep, n, returnName)
+ tp_iternext = '((PyObject *(*)(java::util::t_Iterator *)) get_generic_iterator_next<java::util::t_Iterator,%s%st_%s>)' %(ns, sep, n)
else:
- tp_iternext = '((PyObject *(*)(java::util::t_Iterator *)) get_iterator_next<java::util::t_Iterator,%s%st_%s,%s>)' %(ns, sep, n, returnName)
+ tp_iternext = '((PyObject *(*)(java::util::t_Iterator *)) get_iterator_next<java::util::t_Iterator,%s%st_%s>)' %(ns, sep, n)
elif nextElementMethod and enumeration.isAssignableFrom(cls):
tp_iter = 'PyObject_SelfIter'
returnName = typename(nextElementMethod.getReturnType(), cls, False)
@@ -819,9 +819,9 @@
if nextElementExt:
tp_iternext = 'get_extension_nextElement'
elif generics and clsParams:
- tp_iternext = '((PyObject *(*)(java::util::t_Enumeration *)) get_generic_enumeration_next<java::util::t_Enumeration,%s%st_%s,%s>)' %(ns, sep, n, returnName)
+ tp_iternext = '((PyObject *(*)(java::util::t_Enumeration *)) get_generic_enumeration_next<java::util::t_Enumeration,%s%st_%s>)' %(ns, sep, n)
else:
- tp_iternext = '((PyObject *(*)(java::util::t_Enumeration *)) get_enumeration_next<java::util::t_Enumeration,%s%st_%s,%s>)' %(ns, sep, n, returnName)
+ tp_iternext = '((PyObject *(*)(java::util::t_Enumeration *)) get_enumeration_next<java::util::t_Enumeration,%s%st_%s>)' %(ns, sep, n)
elif nextMethod:
tp_iter = 'PyObject_SelfIter'
returnName = typename(nextMethod.getReturnType(), cls, False)
Modified: lucene/pylucene/trunk/jcc/jcc/sources/JArray.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JArray.h?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JArray.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JArray.h Mon Oct 19 23:08:04 2009
@@ -272,9 +272,8 @@
for (int i = lo; i < hi; i++) {
jstring str = (jstring)
env->getObjectArrayElement((jobjectArray) this$, i);
- PyObject *obj = env->fromJString(str);
+ PyObject *obj = env->fromJString(str, 1);
- env->get_vm_env()->DeleteLocalRef(str);
PyList_SET_ITEM(list, i - lo, obj);
}
@@ -292,9 +291,8 @@
{
jstring str = (jstring)
env->getObjectArrayElement((jobjectArray) this$, n);
- PyObject *obj = env->fromJString(str);
+ PyObject *obj = env->fromJString(str, 1);
- env->get_vm_env()->DeleteLocalRef(str);
return obj;
}
}
Modified: lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp Mon Oct 19 23:08:04 2009
@@ -109,6 +109,13 @@
_mids[mid_obj_getClass] =
vm_env->GetMethodID(_obj, "getClass",
"()Ljava/lang/Class;");
+
+ _mids[mid_iterator_next] =
+ vm_env->GetMethodID(vm_env->FindClass("java/util/Iterator"),
+ "next", "()Ljava/lang/Object;");
+ _mids[mid_enumeration_nextElement] =
+ vm_env->GetMethodID(vm_env->FindClass("java/util/Enumeration"),
+ "nextElement", "()Ljava/lang/Object;");
}
#if defined(_MSC_VER) || defined(__WIN32)
@@ -131,19 +138,29 @@
#endif
-jint JCCEnv::getJNIVersion()
+jint JCCEnv::getJNIVersion() const
{
return get_vm_env()->GetVersion();
}
-jstring JCCEnv::getJavaVersion()
+jstring JCCEnv::getJavaVersion() const
{
return (jstring)
callStaticObjectMethod(_sys, _mids[mid_sys_getProperty],
get_vm_env()->NewStringUTF("java.version"));
}
-jclass JCCEnv::findClass(const char *className)
+jobject JCCEnv::iteratorNext(jobject obj) const
+{
+ return callObjectMethod(obj, _mids[mid_iterator_next]);
+}
+
+jobject JCCEnv::enumerationNext(jobject obj) const
+{
+ return callObjectMethod(obj, _mids[mid_enumeration_nextElement]);
+}
+
+jclass JCCEnv::findClass(const char *className) const
{
jclass cls = NULL;
@@ -184,7 +201,7 @@
return cls;
}
-void JCCEnv::registerNatives(jclass cls, JNINativeMethod *methods, int n)
+void JCCEnv::registerNatives(jclass cls, JNINativeMethod *methods, int n) const
{
get_vm_env()->RegisterNatives(cls, methods, n);
}
@@ -309,13 +326,14 @@
return array;
}
-void JCCEnv::setObjectArrayElement(jobjectArray array, int n, jobject obj)
+void JCCEnv::setObjectArrayElement(jobjectArray array, int n,
+ jobject obj) const
{
get_vm_env()->SetObjectArrayElement(array, n, obj);
reportException();
}
-jobject JCCEnv::getObjectArrayElement(jobjectArray array, int n)
+jobject JCCEnv::getObjectArrayElement(jobjectArray array, int n) const
{
jobject obj = get_vm_env()->GetObjectArrayElement(array, n);
@@ -323,7 +341,7 @@
return obj;
}
-int JCCEnv::getArrayLength(jarray array)
+int JCCEnv::getArrayLength(jarray array) const
{
int len = get_vm_env()->GetArrayLength(array);
@@ -331,12 +349,14 @@
return len;
}
-jclass JCCEnv::getPythonExceptionClass()
+#ifdef PYTHON
+jclass JCCEnv::getPythonExceptionClass() const
{
return _thr;
}
+#endif
-void JCCEnv::reportException()
+void JCCEnv::reportException() const
{
JNIEnv *vm_env = get_vm_env();
jthrowable throwable = vm_env->ExceptionOccurred();
@@ -368,42 +388,42 @@
}
-#define DEFINE_CALL(jtype, Type) \
- jtype JCCEnv::call##Type##Method(jobject obj, \
- jmethodID mid, ...) \
- { \
- va_list ap; \
- jtype result; \
- \
- va_start(ap, mid); \
- result = get_vm_env()->Call##Type##MethodV(obj, mid, ap); \
- va_end(ap); \
- \
- reportException(); \
- \
- return result; \
+#define DEFINE_CALL(jtype, Type) \
+ jtype JCCEnv::call##Type##Method(jobject obj, \
+ jmethodID mid, ...) const \
+ { \
+ va_list ap; \
+ jtype result; \
+ \
+ va_start(ap, mid); \
+ result = get_vm_env()->Call##Type##MethodV(obj, mid, ap); \
+ va_end(ap); \
+ \
+ reportException(); \
+ \
+ return result; \
}
-#define DEFINE_NONVIRTUAL_CALL(jtype, Type) \
- jtype JCCEnv::callNonvirtual##Type##Method(jobject obj, jclass cls, \
- jmethodID mid, ...) \
- { \
- va_list ap; \
- jtype result; \
- \
- va_start(ap, mid); \
- result = get_vm_env()->CallNonvirtual##Type##MethodV(obj, cls, \
- mid, ap); \
- va_end(ap); \
- \
- reportException(); \
- \
- return result; \
+#define DEFINE_NONVIRTUAL_CALL(jtype, Type) \
+ jtype JCCEnv::callNonvirtual##Type##Method(jobject obj, jclass cls, \
+ jmethodID mid, ...) const \
+ { \
+ va_list ap; \
+ jtype result; \
+ \
+ va_start(ap, mid); \
+ result = get_vm_env()->CallNonvirtual##Type##MethodV(obj, cls, \
+ mid, ap); \
+ va_end(ap); \
+ \
+ reportException(); \
+ \
+ return result; \
}
#define DEFINE_STATIC_CALL(jtype, Type) \
jtype JCCEnv::callStatic##Type##Method(jclass cls, \
- jmethodID mid, ...) \
+ jmethodID mid, ...) const \
{ \
va_list ap; \
jtype result; \
@@ -447,7 +467,7 @@
DEFINE_STATIC_CALL(jlong, Long)
DEFINE_STATIC_CALL(jshort, Short)
-void JCCEnv::callVoidMethod(jobject obj, jmethodID mid, ...)
+void JCCEnv::callVoidMethod(jobject obj, jmethodID mid, ...) const
{
va_list ap;
@@ -459,7 +479,7 @@
}
void JCCEnv::callNonvirtualVoidMethod(jobject obj, jclass cls,
- jmethodID mid, ...)
+ jmethodID mid, ...) const
{
va_list ap;
@@ -470,7 +490,7 @@
reportException();
}
-void JCCEnv::callStaticVoidMethod(jclass cls, jmethodID mid, ...)
+void JCCEnv::callStaticVoidMethod(jclass cls, jmethodID mid, ...) const
{
va_list ap;
@@ -483,7 +503,7 @@
jmethodID JCCEnv::getMethodID(jclass cls, const char *name,
- const char *signature)
+ const char *signature) const
{
jmethodID id = get_vm_env()->GetMethodID(cls, name, signature);
@@ -493,7 +513,7 @@
}
jfieldID JCCEnv::getFieldID(jclass cls, const char *name,
- const char *signature)
+ const char *signature) const
{
jfieldID id = get_vm_env()->GetFieldID(cls, name, signature);
@@ -504,7 +524,7 @@
jmethodID JCCEnv::getStaticMethodID(jclass cls, const char *name,
- const char *signature)
+ const char *signature) const
{
jmethodID id = get_vm_env()->GetStaticMethodID(cls, name, signature);
@@ -514,7 +534,7 @@
}
jobject JCCEnv::getStaticObjectField(jclass cls, const char *name,
- const char *signature)
+ const char *signature) const
{
JNIEnv *vm_env = get_vm_env();
jfieldID id = vm_env->GetStaticFieldID(cls, name, signature);
@@ -525,7 +545,8 @@
}
#define DEFINE_GET_STATIC_FIELD(jtype, Type, signature) \
- jtype JCCEnv::getStatic##Type##Field(jclass cls, const char *name) \
+ jtype JCCEnv::getStatic##Type##Field(jclass cls, \
+ const char *name) const \
{ \
JNIEnv *vm_env = get_vm_env(); \
jfieldID id = vm_env->GetStaticFieldID(cls, name, #signature); \
@@ -543,7 +564,7 @@
DEFINE_GET_STATIC_FIELD(jshort, Short, S)
#define DEFINE_GET_FIELD(jtype, Type) \
- jtype JCCEnv::get##Type##Field(jobject obj, jfieldID id) \
+ jtype JCCEnv::get##Type##Field(jobject obj, jfieldID id) const \
{ \
jtype value = get_vm_env()->Get##Type##Field(obj, id); \
reportException(); \
@@ -560,11 +581,12 @@
DEFINE_GET_FIELD(jlong, Long)
DEFINE_GET_FIELD(jshort, Short)
-#define DEFINE_SET_FIELD(jtype, Type) \
- void JCCEnv::set##Type##Field(jobject obj, jfieldID id, jtype value) \
- { \
- get_vm_env()->Set##Type##Field(obj, id, value); \
- reportException(); \
+#define DEFINE_SET_FIELD(jtype, Type) \
+ void JCCEnv::set##Type##Field(jobject obj, jfieldID id, \
+ jtype value) const \
+ { \
+ get_vm_env()->Set##Type##Field(obj, id, value); \
+ reportException(); \
}
DEFINE_SET_FIELD(jobject, Object)
@@ -607,7 +629,7 @@
free(path);
}
-jstring JCCEnv::fromUTF(const char *bytes)
+jstring JCCEnv::fromUTF(const char *bytes) const
{
jstring str = get_vm_env()->NewStringUTF(bytes);
@@ -616,7 +638,7 @@
return str;
}
-char *JCCEnv::toUTF(jstring str)
+char *JCCEnv::toUTF(jstring str) const
{
JNIEnv *vm_env = get_vm_env();
int len = vm_env->GetStringUTFLength(str);
@@ -635,14 +657,14 @@
return bytes;
}
-char *JCCEnv::toString(jobject obj)
+char *JCCEnv::toString(jobject obj) const
{
return obj
? toUTF((jstring) callObjectMethod(obj, _mids[mid_obj_toString]))
: NULL;
}
-char *JCCEnv::getClassName(jobject obj)
+char *JCCEnv::getClassName(jobject obj) const
{
return obj
? toString(callObjectMethod(obj, _mids[mid_obj_getClass]))
@@ -651,7 +673,7 @@
#ifdef PYTHON
-jstring JCCEnv::fromPyString(PyObject *object)
+jstring JCCEnv::fromPyString(PyObject *object) const
{
if (object == Py_None)
return NULL;
@@ -694,43 +716,48 @@
}
}
-PyObject *JCCEnv::fromJString(jstring js)
+PyObject *JCCEnv::fromJString(jstring js, int delete_local_ref) const
{
if (!js)
Py_RETURN_NONE;
JNIEnv *vm_env = get_vm_env();
+ PyObject *string;
if (sizeof(Py_UNICODE) == sizeof(jchar))
{
jboolean isCopy;
const jchar *buf = vm_env->GetStringChars(js, &isCopy);
jsize len = vm_env->GetStringLength(js);
- PyObject *string = PyUnicode_FromUnicode((const Py_UNICODE *) buf, len);
+ string = PyUnicode_FromUnicode((const Py_UNICODE *) buf, len);
vm_env->ReleaseStringChars(js, buf);
- return string;
}
else
{
jsize len = vm_env->GetStringLength(js);
- PyObject *string = PyUnicode_FromUnicode(NULL, len);
- if (!string)
- return NULL;
-
- jboolean isCopy;
- const jchar *jchars = vm_env->GetStringChars(js, &isCopy);
- Py_UNICODE *pchars = PyUnicode_AS_UNICODE(string);
+ string = PyUnicode_FromUnicode(NULL, len);
+ if (string)
+ {
+ jboolean isCopy;
+ const jchar *jchars = vm_env->GetStringChars(js, &isCopy);
+ Py_UNICODE *pchars = PyUnicode_AS_UNICODE(string);
- for (int i = 0; i < len; i++)
- pchars[i] = (Py_UNICODE) jchars[i];
+ for (int i = 0; i < len; i++)
+ pchars[i] = (Py_UNICODE) jchars[i];
- vm_env->ReleaseStringChars(js, jchars);
- return string;
+ vm_env->ReleaseStringChars(js, jchars);
+ }
}
+
+ if (delete_local_ref)
+ vm_env->DeleteLocalRef((jobject) js);
+
+ return string;
}
+
/* may be called from finalizer thread which has no vm_env thread local */
void JCCEnv::finalizeObject(JNIEnv *jenv, PyObject *obj)
{
Modified: lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h Mon Oct 19 23:08:04 2009
@@ -86,6 +86,8 @@
mid_obj_toString,
mid_obj_hashCode,
mid_obj_getClass,
+ mid_iterator_next,
+ mid_enumeration_nextElement,
max_mid
};
@@ -116,14 +118,14 @@
virtual ~JCCEnv() {};
#if defined(_MSC_VER) || defined(__WIN32)
- inline JNIEnv *get_vm_env()
+ inline JNIEnv *get_vm_env() const
{
return (JNIEnv *) TlsGetValue(VM_ENV);
}
#else
static pthread_key_t VM_ENV;
- inline JNIEnv *get_vm_env()
+ inline JNIEnv *get_vm_env() const
{
return (JNIEnv *) pthread_getspecific(VM_ENV);
}
@@ -131,11 +133,16 @@
virtual void set_vm(JavaVM *vm, JNIEnv *vm_env);
virtual void set_vm_env(JNIEnv *vm_env);
- virtual jint getJNIVersion();
- virtual jstring getJavaVersion();
+ virtual jint getJNIVersion() const;
+ virtual jstring getJavaVersion() const;
+
+ virtual jclass findClass(const char *className) const;
+ virtual void registerNatives(jclass cls, JNINativeMethod *methods,
+ int n) const;
+
+ virtual jobject iteratorNext(jobject obj) const;
+ virtual jobject enumerationNext(jobject obj) const;
- virtual jclass findClass(const char *className);
- virtual void registerNatives(jclass cls, JNINativeMethod *methods, int n);
virtual jobject newGlobalRef(jobject obj, int id);
virtual jobject deleteGlobalRef(jobject obj, int id);
@@ -143,85 +150,105 @@
int m, ...);
virtual jobjectArray newObjectArray(jclass cls, int size);
- virtual void setObjectArrayElement(jobjectArray a, int n, jobject obj);
- virtual jobject getObjectArrayElement(jobjectArray a, int n);
- virtual int getArrayLength(jarray a);
-
- virtual jclass getPythonExceptionClass();
- virtual void reportException();
-
- virtual jobject callObjectMethod(jobject obj, jmethodID mid, ...);
- virtual jboolean callBooleanMethod(jobject obj, jmethodID mid, ...);
- virtual jbyte callByteMethod(jobject obj, jmethodID mid, ...);
- virtual jchar callCharMethod(jobject obj, jmethodID mid, ...);
- virtual jdouble callDoubleMethod(jobject obj, jmethodID mid, ...);
- virtual jfloat callFloatMethod(jobject obj, jmethodID mid, ...);
- virtual jint callIntMethod(jobject obj, jmethodID mid, ...);
- virtual jlong callLongMethod(jobject obj, jmethodID mid, ...);
- virtual jshort callShortMethod(jobject obj, jmethodID mid, ...);
- virtual void callVoidMethod(jobject obj, jmethodID mid, ...);
-
- virtual jobject callNonvirtualObjectMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual jboolean callNonvirtualBooleanMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual jbyte callNonvirtualByteMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual jchar callNonvirtualCharMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual jdouble callNonvirtualDoubleMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual jfloat callNonvirtualFloatMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual jint callNonvirtualIntMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual jlong callNonvirtualLongMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual jshort callNonvirtualShortMethod(jobject obj, jclass cls, jmethodID mid, ...);
- virtual void callNonvirtualVoidMethod(jobject obj, jclass cls, jmethodID mid, ...);
-
- virtual jobject callStaticObjectMethod(jclass cls, jmethodID mid, ...);
- virtual jboolean callStaticBooleanMethod(jclass cls, jmethodID mid, ...);
- virtual jbyte callStaticByteMethod(jclass cls, jmethodID mid, ...);
- virtual jchar callStaticCharMethod(jclass cls, jmethodID mid, ...);
- virtual jdouble callStaticDoubleMethod(jclass cls, jmethodID mid, ...);
- virtual jfloat callStaticFloatMethod(jclass cls, jmethodID mid, ...);
- virtual jint callStaticIntMethod(jclass cls, jmethodID mid, ...);
- virtual jlong callStaticLongMethod(jclass cls, jmethodID mid, ...);
- virtual jshort callStaticShortMethod(jclass cls, jmethodID mid, ...);
- virtual void callStaticVoidMethod(jclass cls, jmethodID mid, ...);
+ virtual void setObjectArrayElement(jobjectArray a, int n,
+ jobject obj) const;
+ virtual jobject getObjectArrayElement(jobjectArray a, int n) const;
+ virtual int getArrayLength(jarray a) const;
+
+ virtual void reportException() const;
+
+ virtual jobject callObjectMethod(jobject obj, jmethodID mid, ...) const;
+ virtual jboolean callBooleanMethod(jobject obj, jmethodID mid, ...) const;
+ virtual jbyte callByteMethod(jobject obj, jmethodID mid, ...) const;
+ virtual jchar callCharMethod(jobject obj, jmethodID mid, ...) const;
+ virtual jdouble callDoubleMethod(jobject obj, jmethodID mid, ...) const;
+ virtual jfloat callFloatMethod(jobject obj, jmethodID mid, ...) const;
+ virtual jint callIntMethod(jobject obj, jmethodID mid, ...) const;
+ virtual jlong callLongMethod(jobject obj, jmethodID mid, ...) const;
+ virtual jshort callShortMethod(jobject obj, jmethodID mid, ...) const;
+ virtual void callVoidMethod(jobject obj, jmethodID mid, ...) const;
+
+ virtual jobject callNonvirtualObjectMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual jboolean callNonvirtualBooleanMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual jbyte callNonvirtualByteMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual jchar callNonvirtualCharMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual jdouble callNonvirtualDoubleMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual jfloat callNonvirtualFloatMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual jint callNonvirtualIntMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual jlong callNonvirtualLongMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual jshort callNonvirtualShortMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+ virtual void callNonvirtualVoidMethod(jobject obj, jclass cls,
+ jmethodID mid, ...) const;
+
+ virtual jobject callStaticObjectMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual jboolean callStaticBooleanMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual jbyte callStaticByteMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual jchar callStaticCharMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual jdouble callStaticDoubleMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual jfloat callStaticFloatMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual jint callStaticIntMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual jlong callStaticLongMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual jshort callStaticShortMethod(jclass cls,
+ jmethodID mid, ...) const;
+ virtual void callStaticVoidMethod(jclass cls,
+ jmethodID mid, ...) const;
virtual jmethodID getMethodID(jclass cls, const char *name,
- const char *signature);
+ const char *signature) const;
virtual jfieldID getFieldID(jclass cls, const char *name,
- const char *signature);
+ const char *signature) const;
virtual jmethodID getStaticMethodID(jclass cls, const char *name,
- const char *signature);
+ const char *signature) const;
virtual jobject getStaticObjectField(jclass cls, const char *name,
- const char *signature);
- virtual jboolean getStaticBooleanField(jclass cls, const char *name);
- virtual jbyte getStaticByteField(jclass cls, const char *name);
- virtual jchar getStaticCharField(jclass cls, const char *name);
- virtual jdouble getStaticDoubleField(jclass cls, const char *name);
- virtual jfloat getStaticFloatField(jclass cls, const char *name);
- virtual jint getStaticIntField(jclass cls, const char *name);
- virtual jlong getStaticLongField(jclass cls, const char *name);
- virtual jshort getStaticShortField(jclass cls, const char *name);
-
- virtual jobject getObjectField(jobject obj, jfieldID id);
- virtual jboolean getBooleanField(jobject obj, jfieldID id);
- virtual jbyte getByteField(jobject obj, jfieldID id);
- virtual jchar getCharField(jobject obj, jfieldID id);
- virtual jdouble getDoubleField(jobject obj, jfieldID id);
- virtual jfloat getFloatField(jobject obj, jfieldID id);
- virtual jint getIntField(jobject obj, jfieldID id);
- virtual jlong getLongField(jobject obj, jfieldID id);
- virtual jshort getShortField(jobject obj, jfieldID id);
-
- virtual void setObjectField(jobject obj, jfieldID id, jobject value);
- virtual void setBooleanField(jobject obj, jfieldID id, jboolean value);
- virtual void setByteField(jobject obj, jfieldID id, jbyte value);
- virtual void setCharField(jobject obj, jfieldID id, jchar value);
- virtual void setDoubleField(jobject obj, jfieldID id, jdouble value);
- virtual void setFloatField(jobject obj, jfieldID id, jfloat value);
- virtual void setIntField(jobject obj, jfieldID id, jint value);
- virtual void setLongField(jobject obj, jfieldID id, jlong value);
- virtual void setShortField(jobject obj, jfieldID id, jshort value);
+ const char *signature) const;
+ virtual jboolean getStaticBooleanField(jclass cls, const char *name) const;
+ virtual jbyte getStaticByteField(jclass cls, const char *name) const;
+ virtual jchar getStaticCharField(jclass cls, const char *name) const;
+ virtual jdouble getStaticDoubleField(jclass cls, const char *name) const;
+ virtual jfloat getStaticFloatField(jclass cls, const char *name) const;
+ virtual jint getStaticIntField(jclass cls, const char *name) const;
+ virtual jlong getStaticLongField(jclass cls, const char *name) const;
+ virtual jshort getStaticShortField(jclass cls, const char *name) const;
+
+ virtual jobject getObjectField(jobject obj, jfieldID id) const;
+ virtual jboolean getBooleanField(jobject obj, jfieldID id) const;
+ virtual jbyte getByteField(jobject obj, jfieldID id) const;
+ virtual jchar getCharField(jobject obj, jfieldID id) const;
+ virtual jdouble getDoubleField(jobject obj, jfieldID id) const;
+ virtual jfloat getFloatField(jobject obj, jfieldID id) const;
+ virtual jint getIntField(jobject obj, jfieldID id) const;
+ virtual jlong getLongField(jobject obj, jfieldID id) const;
+ virtual jshort getShortField(jobject obj, jfieldID id) const;
+
+ virtual void setObjectField(jobject obj, jfieldID id, jobject value) const;
+ virtual void setBooleanField(jobject obj, jfieldID id, jboolean value) const;
+ virtual void setByteField(jobject obj, jfieldID id, jbyte value) const;
+ virtual void setCharField(jobject obj, jfieldID id, jchar value) const;
+ virtual void setDoubleField(jobject obj, jfieldID id, jdouble value) const;
+ virtual void setFloatField(jobject obj, jfieldID id, jfloat value) const;
+ virtual void setIntField(jobject obj, jfieldID id, jint value) const;
+ virtual void setLongField(jobject obj, jfieldID id, jlong value) const;
+ virtual void setShortField(jobject obj, jfieldID id, jshort value) const;
- int id(jobject obj) {
+ int id(jobject obj) const {
return obj
? get_vm_env()->CallStaticIntMethod(_sys,
_mids[mid_sys_identityHashCode],
@@ -229,24 +256,26 @@
: 0;
}
- int hash(jobject obj) {
+ int hash(jobject obj) const {
return obj
? get_vm_env()->CallIntMethod(obj, _mids[mid_obj_hashCode])
: 0;
}
virtual void setClassPath(const char *classPath);
- virtual jstring fromUTF(const char *bytes);
- virtual char *toUTF(jstring str);
- virtual char *toString(jobject obj);
- virtual char *getClassName(jobject obj);
+
+ virtual jstring fromUTF(const char *bytes) const;
+ virtual char *toUTF(jstring str) const;
+ virtual char *toString(jobject obj) const;
+ virtual char *getClassName(jobject obj) const;
#ifdef PYTHON
- virtual jstring fromPyString(PyObject *object);
- virtual PyObject *fromJString(jstring js);
+ virtual jclass getPythonExceptionClass() const;
+ virtual jstring fromPyString(PyObject *object) const;
+ virtual PyObject *fromJString(jstring js, int delete_local_ref) const;
virtual void finalizeObject(JNIEnv *jenv, PyObject *obj);
#endif
- virtual inline int isSame(jobject o1, jobject o2)
+ virtual inline int isSame(jobject o1, jobject o2) const
{
return o1 == o2 || get_vm_env()->IsSameObject(o1, o2);
}
Modified: lucene/pylucene/trunk/jcc/jcc/sources/JObject.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JObject.h?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JObject.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JObject.h Mon Oct 19 23:08:04 2009
@@ -27,8 +27,16 @@
inline explicit JObject(jobject obj)
{
- id = env->id(obj);
- this$ = env->newGlobalRef(obj, id);
+ if (obj)
+ {
+ id = env->id(obj);
+ this$ = env->newGlobalRef(obj, id);
+ }
+ else
+ {
+ id = 0;
+ this$ = NULL;
+ }
}
inline JObject(const JObject& obj)
Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp Mon Oct 19 23:08:04 2009
@@ -903,7 +903,7 @@
PyObject *j2p(const String& js)
{
- return env->fromJString((jstring) js.this$);
+ return env->fromJString((jstring) js.this$, 0);
}
PyObject *PyErr_SetArgsError(char *name, PyObject *args)
Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.h?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.h Mon Oct 19 23:08:04 2009
@@ -69,6 +69,7 @@
#endif
int abstract_init(PyObject *self, PyObject *args, PyObject *kwds);
+PyObject *wrapType(PyTypeObject *type, const jobject& obj);
PyObject *j2p(const java::lang::String& js);
java::lang::String p2j(PyObject *object);
@@ -113,10 +114,9 @@
}
#endif
-template<class T, class U, class V> PyObject *get_iterator_next(T *self)
+template<class T, class U> PyObject *get_iterator_next(T *self)
{
jboolean hasNext;
-
OBJ_CALL(hasNext = self->object.hasNext());
if (!hasNext)
{
@@ -124,21 +124,20 @@
return NULL;
}
- V next((jobject) NULL);
- OBJ_CALL(next = self->object.next());
+ jobject next;
+ OBJ_CALL(next = env->iteratorNext(self->object.this$));
jclass cls = java::lang::String::initializeClass();
- if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
- return env->fromJString((jstring) next.this$);
+ if (env->get_vm_env()->IsInstanceOf(next, cls))
+ return env->fromJString((jstring) next, 1);
- return U::wrap_Object(next);
+ return U::wrap_jobject(next);
}
#ifdef _java_generics
-template<class T, class U, class V> PyObject *get_generic_iterator_next(T *self)
+template<class T, class U> PyObject *get_generic_iterator_next(T *self)
{
jboolean hasNext;
-
OBJ_CALL(hasNext = self->object.hasNext());
if (!hasNext)
{
@@ -146,26 +145,24 @@
return NULL;
}
- V next((jobject) NULL);
- OBJ_CALL(next = self->object.next());
+ jobject next;
+ OBJ_CALL(next = env->iteratorNext(self->object.this$));
jclass cls = java::lang::String::initializeClass();
- if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
- return env->fromJString((jstring) next.this$);
+ if (env->get_vm_env()->IsInstanceOf(next, cls))
+ return env->fromJString((jstring) next, 1);
PyTypeObject *param = self->parameters ? self->parameters[0] : NULL;
-
if (param != NULL)
- return wrapType(param, next.this$);
+ return wrapType(param, next);
- return U::wrap_Object(next);
+ return U::wrap_jobject(next);
}
#endif
-template<class T, class U, class V> PyObject *get_enumeration_next(T *self)
+template<class T, class U> PyObject *get_enumeration_next(T *self)
{
jboolean hasMoreElements;
-
OBJ_CALL(hasMoreElements = self->object.hasMoreElements());
if (!hasMoreElements)
{
@@ -173,21 +170,20 @@
return NULL;
}
- V next((jobject) NULL);
- OBJ_CALL(next = self->object.nextElement());
+ jobject next;
+ OBJ_CALL(next = env->enumerationNext(self->object.this$));
jclass cls = java::lang::String::initializeClass();
- if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
- return env->fromJString((jstring) next.this$);
+ if (env->get_vm_env()->IsInstanceOf(next, cls))
+ return env->fromJString((jstring) next, 1);
- return U::wrap_Object(next);
+ return U::wrap_jobject(next);
}
#ifdef _java_generics
-template<class T, class U, class V> PyObject *get_generic_enumeration_next(T *self)
+template<class T, class U> PyObject *get_generic_enumeration_next(T *self)
{
jboolean hasMoreElements;
-
OBJ_CALL(hasMoreElements = self->object.hasMoreElements());
if (!hasMoreElements)
{
@@ -195,26 +191,24 @@
return NULL;
}
- V next((jobject) NULL);
- OBJ_CALL(next = self->object.nextElement());
+ jobject next;
+ OBJ_CALL(next = env->enumerationNext(self->object.this$));
jclass cls = java::lang::String::initializeClass();
- if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
- return env->fromJString((jstring) next.this$);
+ if (env->get_vm_env()->IsInstanceOf(next, cls))
+ return env->fromJString((jstring) next, 1);
PyTypeObject *param = self->parameters ? self->parameters[0] : NULL;
-
if (param != NULL)
- return wrapType(param, next.this$);
+ return wrapType(param, next);
- return U::wrap_Object(next);
+ return U::wrap_jobject(next);
}
#endif
template<class T, class U, class V> PyObject *get_next(T *self)
{
V next((jobject) NULL);
-
OBJ_CALL(next = self->object.next());
if (!next)
{
@@ -224,7 +218,7 @@
jclass cls = java::lang::String::initializeClass();
if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
- return env->fromJString((jstring) next.this$);
+ return env->fromJString((jstring) next.this$, 0);
return U::wrap_Object(next);
}
@@ -233,7 +227,6 @@
template<class T, class U, class V> PyObject *get_generic_next(T *self)
{
V next((jobject) NULL);
-
OBJ_CALL(next = self->object.next());
if (!next)
{
@@ -243,10 +236,9 @@
jclass cls = java::lang::String::initializeClass();
if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
- return env->fromJString((jstring) next.this$);
+ return env->fromJString((jstring) next.this$, 0);
PyTypeObject *param = self->parameters ? self->parameters[0] : NULL;
-
if (param != NULL)
return wrapType(param, next.this$);
@@ -263,7 +255,6 @@
int reportError);
void installType(PyTypeObject *type, PyObject *module, char *name,
int isExtension);
-PyObject *wrapType(PyTypeObject *type, const jobject& obj);
#ifdef _java_generics
PyObject *typeParameters(PyTypeObject *types[], size_t size);
Modified: lucene/pylucene/trunk/jcc/jcc/sources/jcc.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/jcc.cpp?rev=826864&r1=826863&r2=826864&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/jcc.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/jcc.cpp Mon Oct 19 23:08:04 2009
@@ -275,7 +275,7 @@
static PyObject *t_jccenv__get_java_version(PyObject *self, void *data)
{
- return env->fromJString(env->getJavaVersion());
+ return env->fromJString(env->getJavaVersion(), 1);
}
_DLL_EXPORT PyObject *getVMEnv(PyObject *self)