• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 
17 /*
18  * UTF-8 and Unicode string manipulation functions, plus convenience
19  * functions for working with java/lang/String.
20  */
21 #ifndef DALVIK_STRING_H_
22 #define DALVIK_STRING_H_
23 
24 #include <string>
25 #include <vector>
26 
27 /*
28  * (This is private to UtfString.c, but we cheat a bit and also use it
29  * for InlineNative.c.  Not really worth creating a separate header.)
30  *
31  * We can avoid poking around in gDvm by hard-coding the expected values of
32  * the String field offsets.  This will be annoying if String is in flux
33  * or the VM field layout is changing, so we use defines here to make it
34  * easy to switch back to the gDvm version.
35  *
36  * The values are checked for correctness during startup.
37  */
38 //#define USE_GLOBAL_STRING_DEFS
39 #ifdef USE_GLOBAL_STRING_DEFS
40 # define STRING_FIELDOFF_VALUE      gDvm.offJavaLangString_value
41 # define STRING_FIELDOFF_OFFSET     gDvm.offJavaLangString_offset
42 # define STRING_FIELDOFF_COUNT      gDvm.offJavaLangString_count
43 # define STRING_FIELDOFF_HASHCODE   gDvm.offJavaLangString_hashCode
44 #else
45 # define STRING_FIELDOFF_VALUE      8
46 # define STRING_FIELDOFF_HASHCODE   12
47 # define STRING_FIELDOFF_OFFSET     16
48 # define STRING_FIELDOFF_COUNT      20
49 #endif
50 
51 /*
52  * Hash function for modified UTF-8 strings.
53  */
54 u4 dvmComputeUtf8Hash(const char* str);
55 
56 /*
57  * Hash function for string objects. Ensures the hash code field is
58  * populated and returns its value.
59  */
60 u4 dvmComputeStringHash(StringObject* strObj);
61 
62 /*
63  * Create a java.lang.String[] from a vector of C++ strings.
64  *
65  * The caller must call dvmReleaseTrackedAlloc() on the returned array,
66  * but not on the individual elements.
67  *
68  * Returns NULL and throws an exception on failure.
69  */
70 ArrayObject* dvmCreateStringArray(const std::vector<std::string>& strings);
71 
72 /*
73  * Create a java/lang/String from a C string.
74  *
75  * The caller must call dvmReleaseTrackedAlloc() on the return value.
76  *
77  * Returns NULL and throws an exception on failure.
78  */
79 StringObject* dvmCreateStringFromCstr(const char* utf8Str);
80 
81 /*
82  * Create a java/lang/String from a C++ string.
83  *
84  * The caller must call dvmReleaseTrackedAlloc() on the return value.
85  *
86  * Returns NULL and throws an exception on failure.
87  */
88 StringObject* dvmCreateStringFromCstr(const std::string& utf8Str);
89 
90 /*
91  * Create a java/lang/String from a C string, given its UTF-16 length
92  * (number of UTF-16 code points).
93  *
94  * The caller must call dvmReleaseTrackedAlloc() on the return value.
95  *
96  * Returns NULL and throws an exception on failure.
97  */
98 StringObject* dvmCreateStringFromCstrAndLength(const char* utf8Str,
99     u4 utf16Length);
100 
101 /*
102  * Compute the number of characters in a "modified UTF-8" string.  This will
103  * match the result from strlen() so long as there are no multi-byte chars.
104  */
105 size_t dvmUtf8Len(const char* utf8Str);
106 
107 /*
108  * Convert a UTF-8 string to UTF-16.  "utf16Str" must have enough room
109  * to hold the output.
110  */
111 void dvmConvertUtf8ToUtf16(u2* utf16Str, const char* utf8Str);
112 
113 /*
114  * Create a java/lang/String from a Unicode string.
115  *
116  * The caller must call dvmReleaseTrackedAlloc() on the return value.
117  */
118 StringObject* dvmCreateStringFromUnicode(const u2* unichars, int len);
119 
120 /*
121  * Create a UTF-8 C string from a java/lang/String.  Caller must free
122  * the result.
123  *
124  * Returns NULL if "jstr" is NULL.
125  */
126 char* dvmCreateCstrFromString(const StringObject* jstr);
127 
128 /*
129  * Create a UTF-8 C string from a region of a java/lang/String.  (Used by
130  * the JNI GetStringUTFRegion call.)
131  */
132 void dvmGetStringUtfRegion(const StringObject* jstr,
133         int start, int len, char* buf);
134 
135 /*
136  * Compare two string objects.  (This is a dvmHashTableLookup() callback.)
137  */
138 int dvmHashcmpStrings(const void* vstrObj1, const void* vstrObj2);
139 
140 #endif  // DALVIK_STRING_H_
141