358 }
359
360 unsigned int java_lang_String::hash_string(oop java_string) {
361 int length = java_lang_String::length(java_string);
362 // Zero length string doesn't hash necessarily hash to zero.
363 if (length == 0) {
364 return StringTable::hash_string(NULL, 0);
365 }
366
367 typeArrayOop value = java_lang_String::value(java_string);
368 int offset = java_lang_String::offset(java_string);
369 return StringTable::hash_string(value->char_at_addr(offset), length);
370 }
371
372 Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) {
373 oop obj = java_string();
374 typeArrayOop value = java_lang_String::value(obj);
375 int offset = java_lang_String::offset(obj);
376 int length = java_lang_String::length(obj);
377 jchar* base = (length == 0) ? NULL : value->char_at_addr(offset);
378 Symbol* sym = SymbolTable::lookup_unicode(base, length, THREAD);
379 return sym;
380 }
381
382 Symbol* java_lang_String::as_symbol_or_null(oop java_string) {
383 typeArrayOop value = java_lang_String::value(java_string);
384 int offset = java_lang_String::offset(java_string);
385 int length = java_lang_String::length(java_string);
386 jchar* base = (length == 0) ? NULL : value->char_at_addr(offset);
387 return SymbolTable::probe_unicode(base, length);
388 }
389
390
391 int java_lang_String::utf8_length(oop java_string) {
392 typeArrayOop value = java_lang_String::value(java_string);
393 int offset = java_lang_String::offset(java_string);
394 int length = java_lang_String::length(java_string);
395 jchar* position = (length == 0) ? NULL : value->char_at_addr(offset);
396 return UNICODE::utf8_length(position, length);
397 }
398
|
358 }
359
360 unsigned int java_lang_String::hash_string(oop java_string) {
361 int length = java_lang_String::length(java_string);
362 // Zero length string doesn't hash necessarily hash to zero.
363 if (length == 0) {
364 return StringTable::hash_string(NULL, 0);
365 }
366
367 typeArrayOop value = java_lang_String::value(java_string);
368 int offset = java_lang_String::offset(java_string);
369 return StringTable::hash_string(value->char_at_addr(offset), length);
370 }
371
372 Symbol* java_lang_String::as_symbol(Handle java_string, TRAPS) {
373 oop obj = java_string();
374 typeArrayOop value = java_lang_String::value(obj);
375 int offset = java_lang_String::offset(obj);
376 int length = java_lang_String::length(obj);
377 jchar* base = (length == 0) ? NULL : value->char_at_addr(offset);
378 Symbol* sym = SymbolTable::lookup_and_add_unicode(base, length, THREAD);
379 return sym;
380 }
381
382 Symbol* java_lang_String::as_symbol_or_null(oop java_string) {
383 typeArrayOop value = java_lang_String::value(java_string);
384 int offset = java_lang_String::offset(java_string);
385 int length = java_lang_String::length(java_string);
386 jchar* base = (length == 0) ? NULL : value->char_at_addr(offset);
387 return SymbolTable::probe_unicode(base, length);
388 }
389
390
391 int java_lang_String::utf8_length(oop java_string) {
392 typeArrayOop value = java_lang_String::value(java_string);
393 int offset = java_lang_String::offset(java_string);
394 int length = java_lang_String::length(java_string);
395 jchar* position = (length == 0) ? NULL : value->char_at_addr(offset);
396 return UNICODE::utf8_length(position, length);
397 }
398
|