summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2013-02-04 15:37:52 -0800
committerElliott Hughes <enh@google.com>2013-02-04 17:28:21 -0800
commit3aac4ddc4d17c07fa8b4908069d23d5401a77993 (patch)
tree4b8e70836ce522d4fc0d7ca03f53a7327e3fb153 /include
parent3ad678058ea02fe44d720442c2ee0501dc483974 (diff)
downloadlibcore-3aac4ddc4d17c07fa8b4908069d23d5401a77993.zip
libcore-3aac4ddc4d17c07fa8b4908069d23d5401a77993.tar.gz
libcore-3aac4ddc4d17c07fa8b4908069d23d5401a77993.tar.bz2
Add icu4c-backed transliteration.
Change-Id: I4194810646a2a0661331aaf941fb5f99ce7758b1
Diffstat (limited to 'include')
-rw-r--r--include/ScopedJavaUnicodeString.h58
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