//static jstring NativeCollation_getRules(JNIEnv* env, jclass, jint address) { JNIEXPORT jstring JNICALL Java_com_ibm_icu4jni_text_NativeCollation_getRules(JNIEnv* env, jclass, jint address) { int32_t length = 0; const UChar* rules = ucol_getRules(toCollator(address), &length); return env->NewString((const jchar *) rules, length); }
static jlong NativeCollation_safeClone(JNIEnv* env, jclass, jlong address) { UErrorCode status = U_ZERO_ERROR; jint bufferSize = U_COL_SAFECLONE_BUFFERSIZE; UCollator* c = ucol_safeClone(toCollator(address), NULL, &bufferSize, &status); maybeThrowIcuException(env, "ucol_safeClone", status); return static_cast<jlong>(reinterpret_cast<uintptr_t>(c)); }
//static jbyteArray NativeCollation_getSortKey(JNIEnv* env, jclass, jint address, jstring source0) { JNIEXPORT jbyteArray JNICALL Java_com_ibm_icu4jni_text_NativeCollation_getSortKey(JNIEnv* env, jclass, jint address, jstring source0) { ScopedJavaUnicodeString source(env, source0); const UCollator* collator = toCollator(address); uint8_t byteArray[UCOL_MAX_BUFFER * 2]; UniquePtr<uint8_t[]> largerByteArray; uint8_t* usedByteArray = byteArray; const UChar* chars = source.unicodeString().getBuffer(); size_t charCount = source.unicodeString().length(); size_t byteArraySize = ucol_getSortKey(collator, chars, charCount, usedByteArray, sizeof(byteArray) - 1); if (byteArraySize > sizeof(byteArray) - 1) { // didn't fit, try again with a larger buffer. largerByteArray.reset(new uint8_t[byteArraySize + 1]); usedByteArray = largerByteArray.get(); byteArraySize = ucol_getSortKey(collator, chars, charCount, usedByteArray, byteArraySize); } if (byteArraySize == 0) { return NULL; } jbyteArray result = env->NewByteArray(byteArraySize); env->SetByteArrayRegion(result, 0, byteArraySize, reinterpret_cast<jbyte*> (usedByteArray)); return result; }
static jint NativeCollation_compare(JNIEnv* env, jclass, jint address, jstring lhs0, jstring rhs0) { ScopedJavaUnicodeString lhs(env, lhs0); ScopedJavaUnicodeString rhs(env, rhs0); return ucol_strcoll(toCollator(address), lhs.unicodeString().getBuffer(), lhs.unicodeString().length(), rhs.unicodeString().getBuffer(), rhs.unicodeString().length()); }
static jint NativeCollation_safeClone(JNIEnv* env, jclass, jint address) { UErrorCode status = U_ZERO_ERROR; jint bufferSize = U_COL_SAFECLONE_BUFFERSIZE; UCollator* c = ucol_safeClone(toCollator(address), NULL, &bufferSize, &status); icu4jni_error(env, status); return static_cast<jint>(reinterpret_cast<uintptr_t>(c)); }
//static void NativeCollation_setAttribute(JNIEnv* env, jclass, jint address, jint type, jint value) { JNIEXPORT void JNICALL Java_com_ibm_icu4jni_text_NativeCollation_setAttribute(JNIEnv* env, jclass, jint address, jint type, jint value) { UErrorCode status = U_ZERO_ERROR; ucol_setAttribute(toCollator(address), (UColAttribute) type, (UColAttributeValue) value, &status); icu4jni_error(env, status); }
static jint NativeCollation_getCollationElementIterator(JNIEnv* env, jclass, jint address, jstring source0) { ScopedJavaUnicodeString source(env, source0); UErrorCode status = U_ZERO_ERROR; UCollationElements* result = ucol_openElements(toCollator(address), source.unicodeString().getBuffer(), source.unicodeString().length(), &status); icu4jni_error(env, status); return static_cast<jint>(reinterpret_cast<uintptr_t>(result)); }
//static void NativeCollation_setNormalization(JNIEnv* env, jclass, jint address, jint mode) { JNIEXPORT void JNICALL Java_com_ibm_icu4jni_text_NativeCollation_setNormalization(JNIEnv* env, jclass, jint address, jint mode) { UErrorCode status = U_ZERO_ERROR; ucol_setAttribute(toCollator(address), UCOL_NORMALIZATION_MODE, UColAttributeValue(mode), &status); icu4jni_error(env, status); }
//static jint NativeCollation_getNormalization(JNIEnv* env, jclass, jint address) { JNIEXPORT jint JNICALL Java_com_ibm_icu4jni_text_NativeCollation_getNormalization(JNIEnv* env, jclass, jint address) { UErrorCode status = U_ZERO_ERROR; jint result = ucol_getAttribute(toCollator(address), UCOL_NORMALIZATION_MODE, &status); icu4jni_error(env, status); return result; }
//static jint NativeCollation_getAttribute(JNIEnv* env, jclass, jint address, jint type) { JNIEXPORT jint JNICALL Java_com_ibm_icu4jni_text_NativeCollation_getAttribute(JNIEnv* env, jclass, jint address, jint type) { UErrorCode status = U_ZERO_ERROR; jint result = ucol_getAttribute(toCollator(address), (UColAttribute) type, &status); icu4jni_error(env, status); return result; }
//static jint NativeCollation_compare(JNIEnv* env, jclass, jint address, jstring lhs0, jstring rhs0) { JNIEXPORT jint JNICALL Java_com_ibm_icu4jni_text_NativeCollation_compare(JNIEnv* env, jclass, jint address, jstring lhs0, jstring rhs0) { ScopedJavaUnicodeString lhs(env, lhs0); ScopedJavaUnicodeString rhs(env, rhs0); return ucol_strcoll(toCollator(address), lhs.unicodeString().getBuffer(), lhs.unicodeString().length(), rhs.unicodeString().getBuffer(), rhs.unicodeString().length()); }
static jlong NativeCollation_getCollationElementIterator(JNIEnv* env, jclass, jlong address, jstring javaSource) { ScopedStringChars source(env, javaSource); if (source.get() == NULL) { return -1; } UErrorCode status = U_ZERO_ERROR; UCollationElements* result = ucol_openElements(toCollator(address), source.get(), source.size(), &status); maybeThrowIcuException(env, "ucol_openElements", status); return static_cast<jlong>(reinterpret_cast<uintptr_t>(result)); }
static jint NativeCollation_compare(JNIEnv* env, jclass, jlong address, jstring javaLhs, jstring javaRhs) { ScopedStringChars lhs(env, javaLhs); if (lhs.get() == NULL) { return 0; } ScopedStringChars rhs(env, javaRhs); if (rhs.get() == NULL) { return 0; } return ucol_strcoll(toCollator(address), lhs.get(), lhs.size(), rhs.get(), rhs.size()); }
static jbyteArray NativeCollation_getSortKey(JNIEnv* env, jclass, jlong address, jstring javaSource) { ScopedStringChars source(env, javaSource); if (source.get() == NULL) { return NULL; } const UCollator* collator = toCollator(address); uint8_t byteArray[UCOL_MAX_BUFFER * 2]; UniquePtr<uint8_t[]> largerByteArray; uint8_t* usedByteArray = byteArray; size_t byteArraySize = ucol_getSortKey(collator, source.get(), source.size(), usedByteArray, sizeof(byteArray) - 1); if (byteArraySize > sizeof(byteArray) - 1) { // didn't fit, try again with a larger buffer. largerByteArray.reset(new uint8_t[byteArraySize + 1]); usedByteArray = largerByteArray.get(); byteArraySize = ucol_getSortKey(collator, source.get(), source.size(), usedByteArray, byteArraySize); } if (byteArraySize == 0) { return NULL; } jbyteArray result = env->NewByteArray(byteArraySize); env->SetByteArrayRegion(result, 0, byteArraySize, reinterpret_cast<jbyte*>(usedByteArray)); return result; }
static jstring NativeCollation_getRules(JNIEnv* env, jclass, jlong address) { int32_t length = 0; const UChar* rules = ucol_getRules(toCollator(address), &length); return env->NewString(rules, length); }
// by jshwang //static void NativeCollation_closeCollator(JNIEnv*, jclass, jint address) { JNIEXPORT void JNICALL Java_com_ibm_icu4jni_text_NativeCollation_closeCollator(JNIEnv*, jclass, jint address) { ucol_close(toCollator(address)); }
static void NativeCollation_setAttribute(JNIEnv* env, jclass, jlong address, jint type, jint value) { UErrorCode status = U_ZERO_ERROR; ucol_setAttribute(toCollator(address), (UColAttribute)type, (UColAttributeValue)value, &status); maybeThrowIcuException(env, "ucol_setAttribute", status); }
static void NativeCollation_closeCollator(JNIEnv*, jclass, jlong address) { ucol_close(toCollator(address)); }
static jint NativeCollation_getAttribute(JNIEnv* env, jclass, jlong address, jint type) { UErrorCode status = U_ZERO_ERROR; jint result = ucol_getAttribute(toCollator(address), (UColAttribute) type, &status); maybeThrowIcuException(env, "ucol_getAttribute", status); return result; }
static void NativeCollation_setAttribute(JNIEnv* env, jclass, jint address, jint type, jint value) { UErrorCode status = U_ZERO_ERROR; ucol_setAttribute(toCollator(address), (UColAttribute)type, (UColAttributeValue)value, &status); icu4jni_error(env, status); }