diff options
author | Elliott Hughes <enh@google.com> | 2013-02-04 15:37:52 -0800 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2013-02-04 17:28:21 -0800 |
commit | 3aac4ddc4d17c07fa8b4908069d23d5401a77993 (patch) | |
tree | 4b8e70836ce522d4fc0d7ca03f53a7327e3fb153 /include/ScopedJavaUnicodeString.h | |
parent | 3ad678058ea02fe44d720442c2ee0501dc483974 (diff) | |
download | libcore-3aac4ddc4d17c07fa8b4908069d23d5401a77993.zip libcore-3aac4ddc4d17c07fa8b4908069d23d5401a77993.tar.gz libcore-3aac4ddc4d17c07fa8b4908069d23d5401a77993.tar.bz2 |
Add icu4c-backed transliteration.
Change-Id: I4194810646a2a0661331aaf941fb5f99ce7758b1
Diffstat (limited to 'include/ScopedJavaUnicodeString.h')
-rw-r--r-- | include/ScopedJavaUnicodeString.h | 58 |
1 files changed, 34 insertions, 24 deletions
diff --git a/include/ScopedJavaUnicodeString.h b/include/ScopedJavaUnicodeString.h index b108a6b..f6ed7ad 100644 --- a/include/ScopedJavaUnicodeString.h +++ b/include/ScopedJavaUnicodeString.h @@ -1,12 +1,12 @@ /* * Copyright (C) 2010 The Android Open Source Project - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -24,34 +24,44 @@ // jstring. We give ICU a direct pointer to the characters on the Java heap. // It's clever enough to copy-on-write if necessary. class ScopedJavaUnicodeString { -public: - ScopedJavaUnicodeString(JNIEnv* env, jstring s) : mEnv(env), mString(s) { - mChars = env->GetStringChars(mString, NULL); - const int32_t charCount = env->GetStringLength(mString); - mUnicodeString.setTo(false, mChars, charCount); + public: + ScopedJavaUnicodeString(JNIEnv* env, jstring s) : mEnv(env), mString(s) { + if (s == NULL) { + jniThrowNullPointerException(mEnv, NULL); + } else { + mChars = env->GetStringChars(mString, NULL); + const int32_t charCount = env->GetStringLength(mString); + mUnicodeString.setTo(false, mChars, charCount); } + } - ~ScopedJavaUnicodeString() { - mEnv->ReleaseStringChars(mString, mChars); + ~ScopedJavaUnicodeString() { + if (mString != NULL) { + mEnv->ReleaseStringChars(mString, mChars); } + } - const UnicodeString& unicodeString() const { - return mUnicodeString; - } + bool valid() const { + return (mString != NULL); + } - UnicodeString& unicodeString() { - return mUnicodeString; - } + const UnicodeString& unicodeString() const { + return mUnicodeString; + } + + UnicodeString& unicodeString() { + return mUnicodeString; + } -private: - JNIEnv* mEnv; - jstring mString; - const UChar* mChars; - UnicodeString mUnicodeString; + private: + JNIEnv* mEnv; + jstring mString; + const UChar* mChars; + UnicodeString mUnicodeString; - // Disallow copy and assignment. - ScopedJavaUnicodeString(const ScopedJavaUnicodeString&); - void operator=(const ScopedJavaUnicodeString&); + // Disallow copy and assignment. + ScopedJavaUnicodeString(const ScopedJavaUnicodeString&); + void operator=(const ScopedJavaUnicodeString&); }; #endif // SCOPED_JAVA_UNICODE_STRING_H_included |