#include #include #include "org_argeo_api_uuid_NativeUuidFactory.h" /* Header for class org_argeo_api_uuid_NativeUuidFactory */ #ifdef __cplusplus extern "C" { #endif /* * Class: org_argeo_api_uuid_NativeUuidFactory * Method: timeUUID * Signature: ()Ljava/util/UUID; */ JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_NativeUuidFactory_timeUUID( JNIEnv *env, jobject) { uuid_t out; jlong msb = 0; jlong lsb = 0; uuid_generate_time(out); for (int i = 0; i < 8; i++) msb = (msb << 8) | (out[i] & 0xff); for (int i = 8; i < 16; i++) lsb = (lsb << 8) | (out[i] & 0xff); jclass uuidClass = (*env)->FindClass(env, "java/util/UUID"); jmethodID uuidConstructor = (*env)->GetMethodID(env, uuidClass, "", "(JJ)V"); jobject jUUID = (*env)->AllocObject(env, uuidClass); (*env)->CallVoidMethod(env, jUUID, uuidConstructor, msb, lsb); return jUUID; } /* * Class: org_argeo_api_uuid_NativeUuidFactory * Method: nameUUIDv5 * Signature: (Ljava/util/UUID;[B)Ljava/util/UUID; */ JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_NativeUuidFactory_nameUUIDv5( JNIEnv *env, jobject, jobject, jbyteArray name) { size_t length = (*env)->GetArrayLength(env, name); jbyte *bytes = (*env)->GetByteArrayElements(env, name, 0); return NULL; } /* * Class: org_argeo_api_uuid_NativeUuidFactory * Method: nameUUIDv3 * Signature: (Ljava/util/UUID;[B)Ljava/util/UUID; */ JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_NativeUuidFactory_nameUUIDv3( JNIEnv *env, jobject, jobject, jbyteArray) { return NULL; } /* * Class: org_argeo_api_uuid_NativeUuidFactory * Method: randomUUIDStrong * Signature: ()Ljava/util/UUID; */ JNIEXPORT jobject JNICALL Java_org_argeo_api_uuid_NativeUuidFactory_randomUUIDStrong( JNIEnv *env, jobject) { uuid_t out; uuid_generate_random(out); return NULL; } // void fromBytes(JNIEnv *env, jobject jUUID, jmethodID uuidConstructor, uuid_t out){ // jlong msb = 0; // jlong lsb = 0; // // for (int i = 0; i < 8; i++) // msb = (msb << 8) | (out[i] & 0xff); // for (int i = 8; i < 16; i++) // lsb = (lsb << 8) | (out[i] & 0xff); // // (*env)->CallVoidMethod(env, jUUID, uuidConstructor, msb, lsb); // // } // void getMostSignificantBits(uuid_t out) { // jlong msb = 0; // for (int i = 0; i < 8; i++) // msb = (msb << 8) | (out[i] & 0xff); // return msb; // } // // jlong getLeastSignificantBits(uuid_t out) { // jlong lsb = 0; // for (int i = 8; i < 16; i++) // lsb = (lsb << 8) | (out[i] & 0xff); // return lsb; // } // // jobject fromBits(JNIEnv *env, jlong msb, jlong lsb) { // jclass uuidClass = (*env)->FindClass(env, "java/util/UUID"); // jmethodID uuidConstructor = (*env)->GetMethodID(env, uuidClass, // "", "(JJ)V"); // // jobject jUUID = (*env)->AllocObject(env, uuidClass); // (*env)->CallVoidMethod(env, jUUID, uuidConstructor, msb, lsb); // return jUUID; // } // uuid_t toBytes(JNIEnv *env, jobject jUUID) { // uuid_t result; // // jclass uuidClass = (*env)->FindClass(env, "java/util/UUID"); // jmethodID getMostSignificantBits = (*env)->GetMethodID(env, uuidClass, // "getMostSignificantBits", "J"); // jmethodID getLeastSignificantBits = (*env)->GetMethodID(env, uuidClass, // "getLeastSignificantBits", "J"); // // jlong msb = (*env)->CallLongMethod(env, jUUID, getMostSignificantBits); // jlong lsb = (*env)->CallLongMethod(env, jUUID, getMostSignificantBits); // // for (int i = 0; i < 8; i++) // result[i] = (unsigned char) ((msb >> ((7 - i) * 8)) & 0xff); // for (int i = 8; i < 16; i++) // result[i] = (unsigned char) ((lsb >> ((15 - i) * 8)) & 0xff); // return result; // } #ifdef __cplusplus } #endif