Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/gclocker/libgcl001.cpp
41161 views
/*1* Copyright (c) 2007, 2020, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223#include <jni.h>24#include <stdlib.h>25#include "jnihelper.h"2627/*28basic routine: provide critical sections and calculations29enter array CS30enter first string CS31leave first string CS32enter second string CS33leave array CS34leave second string CS35*/36#define BODY(type) \37int hash = 0; \38jsize i, arraySize, stringSize; \39jchar *nativeStr = NULL; \40type *nativeArray = NULL; \41\42arraySize = env->GetArrayLength(array); CE \43stringSize = env->GetStringLength(str); CE \44\45nativeArray = (type *)env->GetPrimitiveArrayCritical(array, NULL); CE \46qsort(nativeArray, arraySize, sizeof(type), *type##comp); \47\48nativeStr = (jchar *)env->GetStringCritical(str, NULL); CE \49\50for (i = 0; i < stringSize; ++i) \51hash += (int)nativeStr[i]; \52env->ReleaseStringCritical(str, nativeStr); CE \53\54nativeStr = (jchar *)env->GetStringCritical(str, NULL); CE \55\56env->ReleasePrimitiveArrayCritical(array, nativeArray, 0); CE \57\58for (i = 0; i < stringSize; ++i) \59hash += (int)nativeStr[i]; \60env->ReleaseStringCritical(str, nativeStr); CE \61\62return hash;6364// compare most java primitive value types65#define COMP(type) \66int type##comp(const void *s1, const void *s2) \67{ \68type st1 = *((type *)s1); \69type st2 = *((type *)s2); \70if (st1 < st2) \71return -1; \72else if (st1 > st2) \73return 1; \74else \75return 0; \76}7778COMP(jint)79COMP(jboolean)80COMP(jchar)81COMP(jshort)82COMP(jbyte)83COMP(jdouble)84COMP(jfloat)85COMP(jlong)8687extern "C" {8889/*90* Class: JNIWorker91* Method: NativeCall92* Signature: ([ZLjava/lang/String;)I93*/94JNIEXPORT jint JNICALL Java_nsk_stress_jni_gclocker_JNIWorker_NativeCall___3ZLjava_lang_String_295(JNIEnv * env, jobject obj, jbooleanArray array, jstring str)96{97BODY(jboolean)98}99100/*101* Class: JNIWorker102* Method: NativeCall103* Signature: ([BLjava/lang/String;)I104*/105JNIEXPORT jint JNICALL Java_nsk_stress_jni_gclocker_JNIWorker_NativeCall___3BLjava_lang_String_2106(JNIEnv * env, jobject obj, jbyteArray array, jstring str)107{108BODY(jbyte)109}110111/*112* Class: JNIWorker113* Method: NativeCall114* Signature: ([CLjava/lang/String;)I115*/116JNIEXPORT jint JNICALL Java_nsk_stress_jni_gclocker_JNIWorker_NativeCall___3CLjava_lang_String_2117(JNIEnv *env, jobject obj, jcharArray array, jstring str)118{119BODY(jchar)120}121122/*123* Class: JNIWorker124* Method: NativeCall125* Signature: ([SLjava/lang/String;)I126*/127JNIEXPORT jint JNICALL Java_nsk_stress_jni_gclocker_JNIWorker_NativeCall___3SLjava_lang_String_2128(JNIEnv *env, jobject obj, jshortArray array, jstring str)129{130BODY(jshort)131}132133/*134* Class: JNIWorker135* Method: NativeCall136* Signature: ([ILjava/lang/String;)I137*/138JNIEXPORT jint JNICALL Java_nsk_stress_jni_gclocker_JNIWorker_NativeCall___3ILjava_lang_String_2139(JNIEnv *env, jobject obj, jintArray array, jstring str)140{141BODY(jint)142}143144/*145* Class: JNIWorker146* Method: NativeCall147* Signature: ([JLjava/lang/String;)I148*/149150JNIEXPORT jint JNICALL Java_nsk_stress_jni_gclocker_JNIWorker_NativeCall___3JLjava_lang_String_2151(JNIEnv *env, jobject obj, jlongArray array, jstring str)152{153BODY(jlong)154}155156/*157* Class: JNIWorker158* Method: NativeCall159* Signature: ([FLjava/lang/String;)I160*/161JNIEXPORT jint JNICALL Java_nsk_stress_jni_gclocker_JNIWorker_NativeCall___3FLjava_lang_String_2162(JNIEnv *env, jobject obj, jfloatArray array, jstring str)163{164BODY(jfloat)165}166167/*168* Class: JNIWorker169* Method: NativeCall170* Signature: ([DLjava/lang/String;)I171*/172JNIEXPORT jint JNICALL Java_nsk_stress_jni_gclocker_JNIWorker_NativeCall___3DLjava_lang_String_2173(JNIEnv *env, jobject obj, jdoubleArray array, jstring str)174{175BODY(jdouble)176}177178}179180181