diff options
author | Neil Fuller <nfuller@google.com> | 2018-07-10 15:58:56 +0100 |
---|---|---|
committer | Neil Fuller <nfuller@google.com> | 2018-08-13 18:51:57 +0000 |
commit | b6738ff25204317f3cd3ba19f09d9132ff9370ab (patch) | |
tree | 615797a441098aea9adcd02636f4821853b9eecd /luni/src/main/native/ScopedJavaUnicodeString.h | |
parent | 99c0166e30d83e6e3a3349301de3eec2c56676cc (diff) |
Move libcore/include to point of use
Move the ScopedIcuLocale.h and ScopedJavaUnicodeString.h
to the places they are used. Remove the pretence that libcore/
is in the business of providing native utility code and this
should make that more obvious.
Test: Build
Bug: 111055375
Change-Id: I5113a2a5275cf4e1dcc52782bc957986af35f9c3
Diffstat (limited to 'luni/src/main/native/ScopedJavaUnicodeString.h')
-rw-r--r-- | luni/src/main/native/ScopedJavaUnicodeString.h | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/luni/src/main/native/ScopedJavaUnicodeString.h b/luni/src/main/native/ScopedJavaUnicodeString.h new file mode 100644 index 0000000000..a30aa7e600 --- /dev/null +++ b/luni/src/main/native/ScopedJavaUnicodeString.h @@ -0,0 +1,67 @@ +/* + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef SCOPED_JAVA_UNICODE_STRING_H_included +#define SCOPED_JAVA_UNICODE_STRING_H_included + +#include <nativehelper/JNIHelp.h> +#include "unicode/unistr.h" + +// A smart pointer that provides access to an ICU UnicodeString given a JNI +// 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) { + 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() { + if (mString != NULL) { + mEnv->ReleaseStringChars(mString, mChars); + } + } + + bool valid() const { + return (mString != NULL); + } + + const icu::UnicodeString& unicodeString() const { + return mUnicodeString; + } + + icu::UnicodeString& unicodeString() { + return mUnicodeString; + } + + private: + JNIEnv* mEnv; + jstring mString; + const jchar* mChars; + icu::UnicodeString mUnicodeString; + + // Disallow copy and assignment. + ScopedJavaUnicodeString(const ScopedJavaUnicodeString&); + void operator=(const ScopedJavaUnicodeString&); +}; + +#endif // SCOPED_JAVA_UNICODE_STRING_H_included |