Home | History | Annotate | Download | only in vm
      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
     22 #define _DALVIK_STRING
     23 
     24 /*
     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.)
     27  *
     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.
     32  *
     33  * The values are checked for correctness during startup.
     34  */
     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
     41 #else
     42 # define STRING_FIELDOFF_VALUE      8
     43 # define STRING_FIELDOFF_HASHCODE   12
     44 # define STRING_FIELDOFF_OFFSET     16
     45 # define STRING_FIELDOFF_COUNT      20
     46 #endif
     47 
     48 /*
     49  * Hash function for modified UTF-8 strings.
     50  */
     51 u4 dvmComputeUtf8Hash(const char* str);
     52 
     53 /*
     54  * Hash function for string objects.
     55  */
     56 u4 dvmComputeStringHash(const StringObject* strObj);
     57 
     58 /*
     59  * Create a java/lang/String from a C string.
     60  *
     61  * The caller must call dvmReleaseTrackedAlloc() on the return value.
     62  *
     63  * Returns NULL and throws an exception on failure.
     64  */
     65 StringObject* dvmCreateStringFromCstr(const char* utf8Str);
     66 
     67 /*
     68  * Create a java/lang/String from a C string, given its UTF-16 length
     69  * (number of UTF-16 code points).
     70  *
     71  * The caller must call dvmReleaseTrackedAlloc() on the return value.
     72  *
     73  * Returns NULL and throws an exception on failure.
     74  */
     75 StringObject* dvmCreateStringFromCstrAndLength(const char* utf8Str,
     76     u4 utf16Length);
     77 
     78 /*
     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.
     81  */
     82 int dvmUtf8Len(const char* utf8Str);
     83 
     84 /*
     85  * Convert a UTF-8 string to UTF-16.  "utf16Str" must have enough room
     86  * to hold the output.
     87  */
     88 void dvmConvertUtf8ToUtf16(u2* utf16Str, const char* utf8Str);
     89 
     90 /*
     91  * Create a java/lang/String from a Unicode string.
     92  *
     93  * The caller must call dvmReleaseTrackedAlloc() on the return value.
     94  */
     95 StringObject* dvmCreateStringFromUnicode(const u2* unichars, int len);
     96 
     97 /*
     98  * Create a UTF-8 C string from a java/lang/String.  Caller must free
     99  * the result.
    100  *
    101  * Returns NULL if "jstr" is NULL.
    102  */
    103 char* dvmCreateCstrFromString(StringObject* jstr);
    104 
    105 /*
    106  * Create a UTF-8 C string from a region of a java/lang/String.  (Used by
    107  * the JNI GetStringUTFRegion call.)
    108  */
    109 void dvmCreateCstrFromStringRegion(StringObject* jstr, int start, int len,
    110     char* buf);
    111 
    112 /*
    113  * Compute the length in bytes of the modified UTF-8 representation of a
    114  * string.
    115  */
    116 int dvmStringUtf8ByteLen(StringObject* jstr);
    117 
    118 /*
    119  * Get the length in Unicode characters of a string.
    120  */
    121 int dvmStringLen(StringObject* jstr);
    122 
    123 /*
    124  * Get the char[] object from the String.
    125  */
    126 ArrayObject* dvmStringCharArray(StringObject* jstr);
    127 
    128 /*
    129  * Get a pointer to the Unicode data.
    130  */
    131 const u2* dvmStringChars(StringObject* jstr);
    132 
    133 /*
    134  * Compare two string objects.  (This is a dvmHashTableLookup() callback.)
    135  */
    136 int dvmHashcmpStrings(const void* vstrObj1, const void* vstrObj2);
    137 
    138 #endif /*_DALVIK_STRING*/
    139