576 return SymbolTable::probe(base, length); |
576 return SymbolTable::probe(base, length); |
577 } |
577 } |
578 } |
578 } |
579 |
579 |
580 int java_lang_String::utf8_length(oop java_string, typeArrayOop value) { |
580 int java_lang_String::utf8_length(oop java_string, typeArrayOop value) { |
581 assert(oopDesc::equals(value, java_lang_String::value(java_string)), |
581 assert(value_equals(value, java_lang_String::value(java_string)), |
582 "value must be same as java_lang_String::value(java_string)"); |
582 "value must be same as java_lang_String::value(java_string)"); |
583 int length = java_lang_String::length(java_string, value); |
583 int length = java_lang_String::length(java_string, value); |
584 if (length == 0) { |
584 if (length == 0) { |
585 return 0; |
585 return 0; |
586 } |
586 } |
608 return UNICODE::as_utf8(position, length); |
608 return UNICODE::as_utf8(position, length); |
609 } |
609 } |
610 } |
610 } |
611 |
611 |
612 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) { |
612 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) { |
613 assert(oopDesc::equals(value, java_lang_String::value(java_string)), |
613 assert(value_equals(value, java_lang_String::value(java_string)), |
614 "value must be same as java_lang_String::value(java_string)"); |
614 "value must be same as java_lang_String::value(java_string)"); |
615 int length = java_lang_String::length(java_string, value); |
615 int length = java_lang_String::length(java_string, value); |
616 bool is_latin1 = java_lang_String::is_latin1(java_string); |
616 bool is_latin1 = java_lang_String::is_latin1(java_string); |
617 if (!is_latin1) { |
617 if (!is_latin1) { |
618 jchar* position = (length == 0) ? NULL : value->char_at_addr(0); |
618 jchar* position = (length == 0) ? NULL : value->char_at_addr(0); |
640 return UNICODE::as_utf8(position, len); |
640 return UNICODE::as_utf8(position, len); |
641 } |
641 } |
642 } |
642 } |
643 |
643 |
644 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, int start, int len, char* buf, int buflen) { |
644 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, int start, int len, char* buf, int buflen) { |
645 assert(oopDesc::equals(value, java_lang_String::value(java_string)), |
645 assert(value_equals(value, java_lang_String::value(java_string)), |
646 "value must be same as java_lang_String::value(java_string)"); |
646 "value must be same as java_lang_String::value(java_string)"); |
647 assert(start + len <= java_lang_String::length(java_string), "just checking"); |
647 assert(start + len <= java_lang_String::length(java_string), "just checking"); |
648 bool is_latin1 = java_lang_String::is_latin1(java_string); |
648 bool is_latin1 = java_lang_String::is_latin1(java_string); |
649 if (!is_latin1) { |
649 if (!is_latin1) { |
650 jchar* position = value->char_at_addr(start); |
650 jchar* position = value->char_at_addr(start); |
684 assert(str1->klass() == SystemDictionary::String_klass(), |
684 assert(str1->klass() == SystemDictionary::String_klass(), |
685 "must be java String"); |
685 "must be java String"); |
686 assert(str2->klass() == SystemDictionary::String_klass(), |
686 assert(str2->klass() == SystemDictionary::String_klass(), |
687 "must be java String"); |
687 "must be java String"); |
688 typeArrayOop value1 = java_lang_String::value_no_keepalive(str1); |
688 typeArrayOop value1 = java_lang_String::value_no_keepalive(str1); |
689 int length1 = java_lang_String::length(str1, value1); |
|
690 bool is_latin1 = java_lang_String::is_latin1(str1); |
689 bool is_latin1 = java_lang_String::is_latin1(str1); |
691 typeArrayOop value2 = java_lang_String::value_no_keepalive(str2); |
690 typeArrayOop value2 = java_lang_String::value_no_keepalive(str2); |
692 int length2 = java_lang_String::length(str2, value2); |
|
693 bool is_latin2 = java_lang_String::is_latin1(str2); |
691 bool is_latin2 = java_lang_String::is_latin1(str2); |
694 |
692 |
695 if ((length1 != length2) || (is_latin1 != is_latin2)) { |
693 if (is_latin1 != is_latin2) { |
696 // Strings of different size or with different |
694 // Strings with different coders are never equal. |
697 // coders are never equal. |
|
698 return false; |
695 return false; |
699 } |
696 } |
700 int blength1 = value1->length(); |
697 return value_equals(value1, value2); |
701 for (int i = 0; i < blength1; i++) { |
|
702 if (value1->byte_at(i) != value2->byte_at(i)) { |
|
703 return false; |
|
704 } |
|
705 } |
|
706 return true; |
|
707 } |
698 } |
708 |
699 |
709 void java_lang_String::print(oop java_string, outputStream* st) { |
700 void java_lang_String::print(oop java_string, outputStream* st) { |
710 assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string"); |
701 assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string"); |
711 typeArrayOop value = java_lang_String::value_no_keepalive(java_string); |
702 typeArrayOop value = java_lang_String::value_no_keepalive(java_string); |