2 * Copyright (C) 2008 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * UTF-8 and Unicode string manipulation functions, plus convenience
19 * functions for working with java/lang/String.
21 #ifndef _DALVIK_STRING
22 #define _DALVIK_STRING
25 * (This is private to UtfString.c, but we cheat a bit and also use it
26 * for InlineNative.c. Not really worth creating a separate header.)
28 * We can avoid poking around in gDvm by hard-coding the expected values of
29 * the String field offsets. This will be annoying if String is in flux
30 * or the VM field layout is changing, so we use defines here to make it
31 * easy to switch back to the gDvm version.
33 * The values are checked for correctness during startup.
35 //#define USE_GLOBAL_STRING_DEFS
36 #ifdef USE_GLOBAL_STRING_DEFS
37 # define STRING_FIELDOFF_VALUE gDvm.offJavaLangString_value
38 # define STRING_FIELDOFF_OFFSET gDvm.offJavaLangString_offset
39 # define STRING_FIELDOFF_COUNT gDvm.offJavaLangString_count
40 # define STRING_FIELDOFF_HASHCODE gDvm.offJavaLangString_hashCode
42 # define STRING_FIELDOFF_VALUE 8
43 # define STRING_FIELDOFF_HASHCODE 12
44 # define STRING_FIELDOFF_OFFSET 16
45 # define STRING_FIELDOFF_COUNT 20
49 * Hash function for modified UTF-8 strings.
51 u4 dvmComputeUtf8Hash(const char* str);
54 * Hash function for string objects.
56 u4 dvmComputeStringHash(const StringObject* strObj);
59 * Create a java/lang/String from a C string.
61 * The caller must call dvmReleaseTrackedAlloc() on the return value.
63 * Returns NULL and throws an exception on failure.
65 StringObject* dvmCreateStringFromCstr(const char* utf8Str);
68 * Create a java/lang/String from a C string, given its UTF-16 length
69 * (number of UTF-16 code points).
71 * The caller must call dvmReleaseTrackedAlloc() on the return value.
73 * Returns NULL and throws an exception on failure.
75 StringObject* dvmCreateStringFromCstrAndLength(const char* utf8Str,
79 * Compute the number of characters in a "modified UTF-8" string. This will
80 * match the result from strlen() so long as there are no multi-byte chars.
82 int dvmUtf8Len(const char* utf8Str);
85 * Convert a UTF-8 string to UTF-16. "utf16Str" must have enough room
88 void dvmConvertUtf8ToUtf16(u2* utf16Str, const char* utf8Str);
91 * Create a java/lang/String from a Unicode string.
93 * The caller must call dvmReleaseTrackedAlloc() on the return value.
95 StringObject* dvmCreateStringFromUnicode(const u2* unichars, int len);
98 * Create a UTF-8 C string from a java/lang/String. Caller must free
101 * Returns NULL if "jstr" is NULL.
103 char* dvmCreateCstrFromString(StringObject* jstr);
106 * Create a UTF-8 C string from a region of a java/lang/String. (Used by
107 * the JNI GetStringUTFRegion call.)
109 void dvmCreateCstrFromStringRegion(StringObject* jstr, int start, int len,
113 * Compute the length in bytes of the modified UTF-8 representation of a
116 int dvmStringUtf8ByteLen(StringObject* jstr);
119 * Get the length in Unicode characters of a string.
121 int dvmStringLen(StringObject* jstr);
124 * Get the char[] object from the String.
126 ArrayObject* dvmStringCharArray(StringObject* jstr);
129 * Get a pointer to the Unicode data.
131 const u2* dvmStringChars(StringObject* jstr);
134 * Compare two string objects. (This is a dvmHashTableLookup() callback.)
136 int dvmHashcmpStrings(const void* vstrObj1, const void* vstrObj2);
138 #endif /*_DALVIK_STRING*/