⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jni.xs

📁 UNIX下perl实现代码
💻 XS
📖 第 1 页 / 共 5 页
字号:
		    PUSHs(sv_2mortal(newSViv(*r++)));		}	    }	    else {		if (RETVAL_len_) {		    PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,			(STRLEN)RETVAL_len_ * sizeof(jbyte))));		}		else		    PUSHs(&PL_sv_no);	    }	    (*env)->ReleaseByteArrayElements(env, array,RETVAL,JNI_ABORT);	    RESTOREENV;	}jchar *GetCharArrayElements(array)	JNIEnv *		env = FETCHENV;	jsize			RETVAL_len_ = NO_INIT;	jcharArray		array	jboolean		isCopy = NO_INIT;    PPCODE:	{	    RETVAL = (*env)->GetCharArrayElements(env, array,&isCopy);	    RETVAL_len_ = (*env)->GetArrayLength(env, array);	    if (GIMME == G_ARRAY) {		int i;		jchar* r = RETVAL;		EXTEND(sp, RETVAL_len_);		for (i = RETVAL_len_; i; --i) {		    PUSHs(sv_2mortal(newSViv(*r++)));		}	    }	    else {		if (RETVAL_len_) {		    PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,			(STRLEN)RETVAL_len_ * sizeof(jchar))));		}		else		    PUSHs(&PL_sv_no);	    }	    (*env)->ReleaseCharArrayElements(env, array,RETVAL,JNI_ABORT);	    RESTOREENV;	}jshort *GetShortArrayElements(array)	JNIEnv *		env = FETCHENV;	jsize			RETVAL_len_ = NO_INIT;	jshortArray		array	jboolean		isCopy = NO_INIT;    PPCODE:	{	    RETVAL = (*env)->GetShortArrayElements(env, array,&isCopy);	    RETVAL_len_ = (*env)->GetArrayLength(env, array);	    if (GIMME == G_ARRAY) {		int i;		jshort* r = RETVAL;		EXTEND(sp, RETVAL_len_);		for (i = RETVAL_len_; i; --i) {		    PUSHs(sv_2mortal(newSViv(*r++)));		}	    }	    else {		if (RETVAL_len_) {		    PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,			(STRLEN)RETVAL_len_ * sizeof(jshort))));		}		else		    PUSHs(&PL_sv_no);	    }	    (*env)->ReleaseShortArrayElements(env, array,RETVAL,JNI_ABORT);	    RESTOREENV;	}jint *GetIntArrayElements(array)	JNIEnv *		env = FETCHENV;	jsize			RETVAL_len_ = NO_INIT;	jintArray		array	jboolean		isCopy = NO_INIT;    PPCODE:	{	    RETVAL = (*env)->GetIntArrayElements(env, array,&isCopy);	    RETVAL_len_ = (*env)->GetArrayLength(env, array);	    if (GIMME == G_ARRAY) {		int i;		jint* r = RETVAL;		EXTEND(sp, RETVAL_len_);		for (i = RETVAL_len_; i; --i) {		    PUSHs(sv_2mortal(newSViv(*r++)));		}	    }	    else {		if (RETVAL_len_) {		    PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,			(STRLEN)RETVAL_len_ * sizeof(jint))));		}		else		    PUSHs(&PL_sv_no);	    }	    (*env)->ReleaseIntArrayElements(env, array,RETVAL,JNI_ABORT);	    RESTOREENV;	}jlong *GetLongArrayElements(array)	JNIEnv *		env = FETCHENV;	jsize			RETVAL_len_ = NO_INIT;	jlongArray		array	jboolean		isCopy = NO_INIT;    PPCODE:	{	    RETVAL = (*env)->GetLongArrayElements(env, array,&isCopy);	    RETVAL_len_ = (*env)->GetArrayLength(env, array);	    if (GIMME == G_ARRAY) {		int i;		jlong* r = RETVAL;		EXTEND(sp, RETVAL_len_);		for (i = RETVAL_len_; i; --i) {		    PUSHs(sv_2mortal(newSViv(*r++)));		}	    }	    else {		if (RETVAL_len_) {		    PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,			(STRLEN)RETVAL_len_ * sizeof(jlong))));		}		else		    PUSHs(&PL_sv_no);	    }	    (*env)->ReleaseLongArrayElements(env, array,RETVAL,JNI_ABORT);	    RESTOREENV;	}jfloat *GetFloatArrayElements(array)	JNIEnv *		env = FETCHENV;	jsize			RETVAL_len_ = NO_INIT;	jfloatArray		array	jboolean		isCopy = NO_INIT;    PPCODE:	{	    RETVAL = (*env)->GetFloatArrayElements(env, array,&isCopy);	    RETVAL_len_ = (*env)->GetArrayLength(env, array);	    if (GIMME == G_ARRAY) {		int i;		jfloat* r = RETVAL;		EXTEND(sp, RETVAL_len_);		for (i = RETVAL_len_; i; --i) {		    PUSHs(sv_2mortal(newSVnv(*r++)));		}	    }	    else {		if (RETVAL_len_) {		    PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,			(STRLEN)RETVAL_len_ * sizeof(jfloat))));		}		else		    PUSHs(&PL_sv_no);	    }	    (*env)->ReleaseFloatArrayElements(env, array,RETVAL,JNI_ABORT);	    RESTOREENV;	}jdouble *GetDoubleArrayElements(array)	JNIEnv *		env = FETCHENV;	jsize			RETVAL_len_ = NO_INIT;	jdoubleArray		array	jboolean		isCopy = NO_INIT;    PPCODE:	{	    RETVAL = (*env)->GetDoubleArrayElements(env, array,&isCopy);	    RETVAL_len_ = (*env)->GetArrayLength(env, array);	    if (GIMME == G_ARRAY) {		int i;		jdouble* r = RETVAL;		EXTEND(sp, RETVAL_len_);		for (i = RETVAL_len_; i; --i) {		    PUSHs(sv_2mortal(newSVnv(*r++)));		}	    }	    else {		if (RETVAL_len_) {		    PUSHs(sv_2mortal(newSVpvn((char*)RETVAL,			(STRLEN)RETVAL_len_ * sizeof(jdouble))));		}		else		    PUSHs(&PL_sv_no);	    }	    (*env)->ReleaseDoubleArrayElements(env, array,RETVAL,JNI_ABORT);	    RESTOREENV;	}voidGetBooleanArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	jbooleanArray		array	jsize			start	jsize			len	STRLEN			tmplen = len * sizeof(jboolean) + 1;	char *			tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);	jboolean *		buf = (jboolean*)sv_grow(ST(3),len * sizeof(jboolean)+1);    CODE:	{	    (*env)->GetBooleanArrayRegion(env, array,start,len,buf);	    SvCUR_set(ST(3), len * sizeof(jboolean));	    *SvEND(ST(3)) = '\0';	    RESTOREENV;	}voidGetByteArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	jbyteArray		array	jsize			start	jsize			len	STRLEN			tmplen = len * sizeof(jboolean) + 1;	char *			tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);	jbyte *			buf = (jbyte*)sv_grow(ST(3),len * sizeof(jbyte)+1);    CODE:	{	    (*env)->GetByteArrayRegion(env, array,start,len,buf);	    SvCUR_set(ST(3), len * sizeof(jbyte));	    *SvEND(ST(3)) = '\0';	    RESTOREENV;	}voidGetCharArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	jcharArray		array	jsize			start	jsize			len	STRLEN			tmplen = len * sizeof(jboolean) + 1;	char *			tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);	jchar *			buf = (jchar*)sv_grow(ST(3),len * sizeof(jchar)+1);    CODE:	{	    (*env)->GetCharArrayRegion(env, array,start,len,buf);	    SvCUR_set(ST(3), len * sizeof(jchar));	    *SvEND(ST(3)) = '\0';	    RESTOREENV;	}voidGetShortArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	jshortArray		array	jsize			start	jsize			len	STRLEN			tmplen = len * sizeof(jboolean) + 1;	char *			tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);	jshort *		buf = (jshort*)sv_grow(ST(3),len * sizeof(jshort)+1);    CODE:	{	    (*env)->GetShortArrayRegion(env, array,start,len,buf);	    SvCUR_set(ST(3), len * sizeof(jshort));	    *SvEND(ST(3)) = '\0';	    RESTOREENV;	}voidGetIntArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	jintArray		array	jsize			start	jsize			len	STRLEN			tmplen = len * sizeof(jboolean) + 1;	char *			tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);	jint *			buf = (jint*)sv_grow(ST(3),len * sizeof(jint)+1);    CODE:	{	    (*env)->GetIntArrayRegion(env, array,start,len,buf);	    SvCUR_set(ST(3), len * sizeof(jint));	    *SvEND(ST(3)) = '\0';	    RESTOREENV;	}voidGetLongArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	jlongArray		array	jsize			start	jsize			len	STRLEN			tmplen = len * sizeof(jboolean) + 1;	char *			tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);	jlong *			buf = (jlong*)sv_grow(ST(3),len * sizeof(jlong)+1);    CODE:	{	    (*env)->GetLongArrayRegion(env, array,start,len,buf);	    SvCUR_set(ST(3), len * sizeof(jlong));	    *SvEND(ST(3)) = '\0';	    RESTOREENV;	}voidGetFloatArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	jfloatArray		array	jsize			start	jsize			len	STRLEN			tmplen = len * sizeof(jboolean) + 1;	char *			tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);	jfloat *		buf = (jfloat*)sv_grow(ST(3),len * sizeof(jfloat)+1);    CODE:	{	    (*env)->GetFloatArrayRegion(env, array,start,len,buf);	    SvCUR_set(ST(3), len * sizeof(jfloat));	    *SvEND(ST(3)) = '\0';	    RESTOREENV;	}voidGetDoubleArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	jdoubleArray		array	jsize			start	jsize			len	STRLEN			tmplen = len * sizeof(jboolean) + 1;	char *			tmpbuf = (char*)sv_pvn_force(ST(3), &tmplen);	jdouble *		buf = (jdouble*)sv_grow(ST(3),len * sizeof(jdouble)+1);    CODE:	{	    (*env)->GetDoubleArrayRegion(env, array,start,len,buf);	    SvCUR_set(ST(3), len * sizeof(jdouble));	    *SvEND(ST(3)) = '\0';	    RESTOREENV;	}voidSetBooleanArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	STRLEN			tmplen = NO_INIT;	jbooleanArray		array	jsize			start	jsize			len	jsize			buf_len_ = NO_INIT;	jboolean *		buf    CODE:	{	    if (buf_len_ < len)		croak("string is too short");	    else if (buf_len_ > len && PL_dowarn)		warn("string is too long");	    (*env)->SetBooleanArrayRegion(env, array,start,len,buf);	    RESTOREENV;	}voidSetByteArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	STRLEN			tmplen = NO_INIT;	jbyteArray		array	jsize			start	jsize			len	jsize			buf_len_ = NO_INIT;	jbyte *			buf    CODE:	{	    if (buf_len_ < len)		croak("string is too short");	    else if (buf_len_ > len && PL_dowarn)		warn("string is too long");	    (*env)->SetByteArrayRegion(env, array,start,len,buf);	    RESTOREENV;	}voidSetCharArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	STRLEN			tmplen = NO_INIT;	jcharArray		array	jsize			start	jsize			len	jsize			buf_len_ = NO_INIT;	jchar *			buf    CODE:	{	    if (buf_len_ < len)		croak("string is too short");	    else if (buf_len_ > len && PL_dowarn)		warn("string is too long");	    (*env)->SetCharArrayRegion(env, array,start,len,buf);	    RESTOREENV;	}voidSetShortArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	STRLEN			tmplen = NO_INIT;	jshortArray		array	jsize			start	jsize			len	jsize			buf_len_ = NO_INIT;	jshort *		buf    CODE:	{	    if (buf_len_ < len)		croak("string is too short");	    else if (buf_len_ > len && PL_dowarn)		warn("string is too long");	    (*env)->SetShortArrayRegion(env, array,start,len,buf);	    RESTOREENV;	}voidSetIntArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	STRLEN			tmplen = NO_INIT;	jintArray		array	jsize			start	jsize			len	jsize			buf_len_ = NO_INIT;	jint *			buf    CODE:	{	    if (buf_len_ < len)		croak("string is too short");	    else if (buf_len_ > len && PL_dowarn)		warn("string is too long");	    (*env)->SetIntArrayRegion(env, array,start,len,buf);	    RESTOREENV;	}voidSetLongArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	STRLEN			tmplen = NO_INIT;	jlongArray		array	jsize			start	jsize			len	jsize			buf_len_ = NO_INIT;	jlong *			buf    CODE:	{	    if (buf_len_ < len)		croak("string is too short");	    else if (buf_len_ > len && PL_dowarn)		warn("string is too long");	    (*env)->SetLongArrayRegion(env, array,start,len,buf);	    RESTOREENV;	}voidSetFloatArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	STRLEN			tmplen = NO_INIT;	jfloatArray		array	jsize			start	jsize			len	jsize			buf_len_ = NO_INIT;	jfloat *		buf    CODE:	{	    if (buf_len_ < len)		croak("string is too short");	    else if (buf_len_ > len && PL_dowarn)		warn("string is too long");	    (*env)->SetFloatArrayRegion(env, array,start,len,buf);	    RESTOREENV;	}voidSetDoubleArrayRegion(array,start,len,buf)	JNIEnv *		env = FETCHENV;	STRLEN			tmplen = NO_INIT;	jdoubleArray		array	jsize			start	jsize			len	jsize			buf_len_ = NO_INIT;	jdouble *		buf    CODE:	{	    if (buf_len_ < len)		croak("string is too short");	    else if (buf_len_ > len && PL_dowarn)		warn("string is too long");	    (*env)->SetDoubleArrayRegion(env, array,start,len,buf);	    RESTOREENV;	}SysRetRegisterNatives(clazz,methods,nMethods)	JNIEnv *		env = FETCHENV;	jclass			clazz	JNINativeMethod *	methods	jint			nMethods    CODE:	{	    RETVAL = (*env)->RegisterNatives(env, clazz,methods,nMethods);	}SysRetUnregisterNatives(clazz)	JNIEnv *		env = FETCHENV;	jclass			clazz    CODE:	{	    RETVAL = (*env)->UnregisterNatives(env, clazz);	}    OUTPUT:	RETVAL     SysRetMonitorEnter(obj)	JNIEnv *		env = FETCHENV;	jobject			obj    CODE:	{	    RETVAL = (*env)->MonitorEnter(env, obj);	    RESTOREENV;	}    OUTPUT:	RETVALSysRetMonitorExit(obj)	JNIEnv *		env = FETCHENV;	jobject			obj    CODE:	{	    RETVAL = (*env)->MonitorExit(env, obj);	    RESTOREENV;	}    OUTPUT:	RETVALJavaVM *GetJavaVM(...)	JNIEnv *		env = FETCHENV;    CODE:	{#ifdef JPL_DEBUG	    jpldebug = 1;#else	    jpldebug = 0;#endif	    if (env) {	/* We're embedded. */		if ((*env)->GetJavaVM(env, &RETVAL) < 0)		    RETVAL = 0;	    }	    else {	/* We're embedding. */#ifdef KAFFE                JavaVMInitArgs vm_args;#else                JDK1_1InitArgs vm_args;#endif		char *lib;		if (jpldebug) {		    fprintf(stderr, "We're embedding Java in Perl.\n");		}		if (items--) {  		    ++mark;		    lib = SvPV(*mark, PL_na);		}		else		    lib = 0;		if (jpldebug) {		    fprintf(stderr, "lib is %s.\n", lib);		}#ifdef WIN32        if (LoadLibrary("jvm.dll")) {            if (!LoadLibrary("javai.dll")) {                warn("Can't load javai.dll");            }        } else {            if (lib && !LoadLibrary(lib))                croak("Can't load javai.dll");         }#else		if (jpldebug) {		    fprintf(stderr, "Opening Java shared library.\n");                }#ifdef KAFFE		if (!dlopen("libkaffevm.so", RTLD_LAZY|RTLD_GLOBAL)) {#else		if (!dlopen("libjava.so", RTLD_LAZY|RTLD_GLOBAL)) {#endif		    if (lib && !dlopen(lib, RTLD_LAZY|RTLD_GLOBAL))			croak("Can't load Java shared library.");		}#endif               /* Kaffe seems to get very upset if vm_args.version isn't set */#ifdef KAFFE		vm_args.version = JNI_VERSION_1_1;#endif		JNI_GetDefaultJavaVMInitArgs(&vm_args);		vm_args.exit = &call_my_exit;		if (jpldebug) {            fprintf(stderr, "items = %d\n", items);            fprintf(stderr, "mark = %s\n", SvPV(*mark, PL_na));        }		while (items > 1) {		  char *s;		    ++mark;		    s = SvPV(*mark,PL_na);		    ++mark;		    if (jpldebug) {                fprintf(stderr, "*s = %s\n", s);                fprintf(stderr, "val = %s\n", SvPV(*mark, PL_na));            }		    items -= 2;		    if (strEQ(s, "checkSource"))			vm_args.checkSource = (jint)SvIV(*mark);		    else if (strEQ(s, "nativeStackSize"))			vm_args.nativeStackSize = (jint)SvIV(*mark);		    else if (strEQ(s, "javaStackSize"))			vm_args.javaStackSize = (jint)SvIV(*mark);		    else if (strEQ(s, "minHeapSize"))			vm_args.minHeapSize = (jint)SvIV(*mark);		    else if (strEQ(s, "maxHeapSize"))			vm_args.maxHeapSize = (jint)SvIV(*mark);		    else if (strEQ(s, "verifyMode"))			vm_args.verifyMode = (jint)SvIV(*mark);		    else if (strEQ(s, "classpath"))			vm_args.classpath = savepv(SvPV(*mark,PL_na));		    else if (strEQ(s, "enableClassGC"))			vm_args.enableClassGC = (jint)SvIV(*mark);		    else if (strEQ(s, "enableVerboseGC"))			vm_args.enableVerboseGC = (jint)SvIV(*mark);		    else if (strEQ(s, "disableAsyncGC"))			vm_args.disableAsyncGC = (jint)SvIV(*mark);#ifdef KAFFE		    else if (strEQ(s, "libraryhome"))			vm_args.libraryhome = savepv(SvPV(*mark,PL_na));		    else if (strEQ(s, "classhome"))			vm_args.classhome = savepv(SvPV(*mark,PL_na));		    else if (strEQ(s, "enableVerboseJIT"))			vm_args.enableVerboseJIT = (jint)SvIV(*mark); 		    else if (strEQ(s, "enableVerboseClassloading"))			vm_args.enableVerboseClassloading = (jint)SvIV(*mark); 		    else if (strEQ(s, "enableVerboseCall"))			vm_args.enableVerboseCall = (jint)SvIV(*mark); 		    else if (strEQ(s, "allocHeapSize"))			vm_args.allocHeapSize = (jint)SvIV(*mark); #else		    else if (strEQ(s, "verbose"))			vm_args.verbose = (jint)SvIV(*mark); 		    else if (strEQ(s, "debugging"))			vm_args.debugging = (jboolean)SvIV(*mark);		    else if (strEQ(s, "debugPo

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -