602 }
603 }
604
605 char* java_lang_String::as_utf8_string(oop java_string, int start, int len, char* buf, int buflen) {
606 typeArrayOop value = java_lang_String::value(java_string);
607 int length = java_lang_String::length(java_string);
608 assert(start + len <= length, "just checking");
609 bool is_latin1 = java_lang_String::is_latin1(java_string);
610 if (!is_latin1) {
611 jchar* position = value->char_at_addr(start);
612 return UNICODE::as_utf8(position, len, buf, buflen);
613 } else {
614 jbyte* position = value->byte_at_addr(start);
615 return UNICODE::as_utf8(position, len, buf, buflen);
616 }
617 }
618
619 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
620 assert(java_string->klass() == SystemDictionary::String_klass(),
621 "must be java_string");
622 typeArrayOop value = java_lang_String::value(java_string);
623 int length = java_lang_String::length(java_string);
624 if (length != len) {
625 return false;
626 }
627 bool is_latin1 = java_lang_String::is_latin1(java_string);
628 if (!is_latin1) {
629 for (int i = 0; i < len; i++) {
630 if (value->char_at(i) != chars[i]) {
631 return false;
632 }
633 }
634 } else {
635 for (int i = 0; i < len; i++) {
636 if ((((jchar) value->byte_at(i)) & 0xff) != chars[i]) {
637 return false;
638 }
639 }
640 }
641 return true;
642 }
643
644 bool java_lang_String::equals(oop str1, oop str2) {
645 assert(str1->klass() == SystemDictionary::String_klass(),
646 "must be java String");
647 assert(str2->klass() == SystemDictionary::String_klass(),
648 "must be java String");
649 typeArrayOop value1 = java_lang_String::value(str1);
650 int length1 = java_lang_String::length(str1);
651 bool is_latin1 = java_lang_String::is_latin1(str1);
652 typeArrayOop value2 = java_lang_String::value(str2);
653 int length2 = java_lang_String::length(str2);
654 bool is_latin2 = java_lang_String::is_latin1(str2);
655
656 if ((length1 != length2) || (is_latin1 != is_latin2)) {
657 // Strings of different size or with different
658 // coders are never equal.
659 return false;
660 }
661 int blength1 = value1->length();
662 for (int i = 0; i < value1->length(); i++) {
663 if (value1->byte_at(i) != value2->byte_at(i)) {
664 return false;
665 }
666 }
667 return true;
668 }
669
670 void java_lang_String::print(oop java_string, outputStream* st) {
671 assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
672 typeArrayOop value = java_lang_String::value(java_string);
673
674 if (value == NULL) {
675 // This can happen if, e.g., printing a String
676 // object before its initializer has been called
677 st->print("NULL");
678 return;
679 }
680
681 int length = java_lang_String::length(java_string);
682 bool is_latin1 = java_lang_String::is_latin1(java_string);
683
684 st->print("\"");
685 for (int index = 0; index < length; index++) {
686 st->print("%c", (!is_latin1) ? value->char_at(index) :
687 ((jchar) value->byte_at(index)) & 0xff );
688 }
689 st->print("\"");
690 }
691
692
|
602 }
603 }
604
605 char* java_lang_String::as_utf8_string(oop java_string, int start, int len, char* buf, int buflen) {
606 typeArrayOop value = java_lang_String::value(java_string);
607 int length = java_lang_String::length(java_string);
608 assert(start + len <= length, "just checking");
609 bool is_latin1 = java_lang_String::is_latin1(java_string);
610 if (!is_latin1) {
611 jchar* position = value->char_at_addr(start);
612 return UNICODE::as_utf8(position, len, buf, buflen);
613 } else {
614 jbyte* position = value->byte_at_addr(start);
615 return UNICODE::as_utf8(position, len, buf, buflen);
616 }
617 }
618
619 bool java_lang_String::equals(oop java_string, jchar* chars, int len) {
620 assert(java_string->klass() == SystemDictionary::String_klass(),
621 "must be java_string");
622 typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
623 int length = java_lang_String::length(java_string);
624 if (length != len) {
625 return false;
626 }
627 bool is_latin1 = java_lang_String::is_latin1(java_string);
628 if (!is_latin1) {
629 for (int i = 0; i < len; i++) {
630 if (value->char_at(i) != chars[i]) {
631 return false;
632 }
633 }
634 } else {
635 for (int i = 0; i < len; i++) {
636 if ((((jchar) value->byte_at(i)) & 0xff) != chars[i]) {
637 return false;
638 }
639 }
640 }
641 return true;
642 }
643
644 bool java_lang_String::equals(oop str1, oop str2) {
645 assert(str1->klass() == SystemDictionary::String_klass(),
646 "must be java String");
647 assert(str2->klass() == SystemDictionary::String_klass(),
648 "must be java String");
649 typeArrayOop value1 = java_lang_String::value_no_keepalive(str1);
650 int length1 = java_lang_String::length(value1);
651 bool is_latin1 = java_lang_String::is_latin1(str1);
652 typeArrayOop value2 = java_lang_String::value_no_keepalive(str2);
653 int length2 = java_lang_String::length(value2);
654 bool is_latin2 = java_lang_String::is_latin1(str2);
655
656 if ((length1 != length2) || (is_latin1 != is_latin2)) {
657 // Strings of different size or with different
658 // coders are never equal.
659 return false;
660 }
661 int blength1 = value1->length();
662 for (int i = 0; i < blength1; i++) {
663 if (value1->byte_at(i) != value2->byte_at(i)) {
664 return false;
665 }
666 }
667 return true;
668 }
669
670 void java_lang_String::print(oop java_string, outputStream* st) {
671 assert(java_string->klass() == SystemDictionary::String_klass(), "must be java_string");
672 typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
673
674 if (value == NULL) {
675 // This can happen if, e.g., printing a String
676 // object before its initializer has been called
677 st->print("NULL");
678 return;
679 }
680
681 int length = java_lang_String::length(java_string);
682 bool is_latin1 = java_lang_String::is_latin1(java_string);
683
684 st->print("\"");
685 for (int index = 0; index < length; index++) {
686 st->print("%c", (!is_latin1) ? value->char_at(index) :
687 ((jchar) value->byte_at(index)) & 0xff );
688 }
689 st->print("\"");
690 }
691
692
|