src/share/vm/utilities/utf8.hpp

Thu, 20 Nov 2008 16:56:09 -0800

author
ysr
date
Thu, 20 Nov 2008 16:56:09 -0800
changeset 888
c96030fff130
parent 435
a61af66fc99e
child 1907
c18cbe5936b8
permissions
-rw-r--r--

6684579: SoftReference processing can be made more efficient
Summary: For current soft-ref clearing policies, we can decide at marking time if a soft-reference will definitely not be cleared, postponing the decision of whether it will definitely be cleared to the final reference processing phase. This can be especially beneficial in the case of concurrent collectors where the marking is usually concurrent but reference processing is usually not.
Reviewed-by: jmasa

duke@435 1 /*
duke@435 2 * Copyright 1997-2003 Sun Microsystems, Inc. All Rights Reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
duke@435 19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
duke@435 20 * CA 95054 USA or visit www.sun.com if you need additional information or
duke@435 21 * have any questions.
duke@435 22 *
duke@435 23 */
duke@435 24
duke@435 25 // Low-level interface for UTF8 strings
duke@435 26
duke@435 27 class UTF8 : AllStatic {
duke@435 28 public:
duke@435 29 // returns the unicode length of a 0-terminated uft8 string
duke@435 30 static int unicode_length(const char* uft8_str);
duke@435 31
duke@435 32 // returns the unicode length of a non-0-terminated uft8 string
duke@435 33 static int unicode_length(const char* uft8_str, int len);
duke@435 34
duke@435 35 // converts a uft8 string to a unicode string
duke@435 36 static void convert_to_unicode(const char* utf8_str, jchar* unicode_buffer, int unicode_length);
duke@435 37
duke@435 38 // decodes the current utf8 character, stores the result in value,
duke@435 39 // and returns the end of the current uft8 chararacter.
duke@435 40 static char* next(const char* str, jchar* value);
duke@435 41
duke@435 42 // decodes the current utf8 character, gets the supplementary character instead of
duke@435 43 // the surrogate pair when seeing a supplementary character in string,
duke@435 44 // stores the result in value, and returns the end of the current uft8 chararacter.
duke@435 45 static char* next_character(const char* str, jint* value);
duke@435 46
duke@435 47 // Utility methods
duke@435 48 static jbyte* strrchr(jbyte* base, int length, jbyte c);
duke@435 49 static bool equal(jbyte* base1, int length1, jbyte* base2, int length2);
duke@435 50 static bool is_supplementary_character(const unsigned char* str);
duke@435 51 static jint get_supplementary_character(const unsigned char* str);
duke@435 52 };
duke@435 53
duke@435 54
duke@435 55 // Low-level interface for UNICODE strings
duke@435 56
duke@435 57 // A unicode string represents a string in the UTF-16 format in which supplementary
duke@435 58 // characters are represented by surrogate pairs. Index values refer to char code
duke@435 59 // units, so a supplementary character uses two positions in a unicode string.
duke@435 60
duke@435 61 class UNICODE : AllStatic {
duke@435 62 public:
duke@435 63 // returns the utf8 size of a unicode character
duke@435 64 static int utf8_size(jchar c);
duke@435 65
duke@435 66 // returns the utf8 length of a unicode string
duke@435 67 static int utf8_length(jchar* base, int length);
duke@435 68
duke@435 69 // converts a unicode string to utf8 string
duke@435 70 static void convert_to_utf8(const jchar* base, int length, char* utf8_buffer);
duke@435 71
duke@435 72 // converts a unicode string to a utf8 string; result is allocated
duke@435 73 // in resource area unless a buffer is provided.
duke@435 74 static char* as_utf8(jchar* base, int length);
duke@435 75 static char* as_utf8(jchar* base, int length, char* buf, int buflen);
duke@435 76 };

mercurial