632 int java_lang_String::utf8_length(oop java_string, typeArrayOop value) {
633 assert(value_equals(value, java_lang_String::value(java_string)),
634 "value must be same as java_lang_String::value(java_string)");
635 int length = java_lang_String::length(java_string, value);
636 if (length == 0) {
637 return 0;
638 }
639 if (!java_lang_String::is_latin1(java_string)) {
640 return UNICODE::utf8_length(value->char_at_addr(0), length);
641 } else {
642 return UNICODE::utf8_length(value->byte_at_addr(0), length);
643 }
644 }
645
646 int java_lang_String::utf8_length(oop java_string) {
647 typeArrayOop value = java_lang_String::value(java_string);
648 return utf8_length(java_string, value);
649 }
650
651 char* java_lang_String::as_utf8_string(oop java_string) {
652 typeArrayOop value = java_lang_String::value(java_string);
653 int length = java_lang_String::length(java_string, value);
654 bool is_latin1 = java_lang_String::is_latin1(java_string);
655 if (!is_latin1) {
656 jchar* position = (length == 0) ? NULL : value->char_at_addr(0);
657 return UNICODE::as_utf8(position, length);
658 } else {
659 jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0);
660 return UNICODE::as_utf8(position, length);
661 }
662 }
663
664 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) {
665 assert(value_equals(value, java_lang_String::value(java_string)),
666 "value must be same as java_lang_String::value(java_string)");
667 int length = java_lang_String::length(java_string, value);
668 bool is_latin1 = java_lang_String::is_latin1(java_string);
669 if (!is_latin1) {
670 jchar* position = (length == 0) ? NULL : value->char_at_addr(0);
671 return UNICODE::as_utf8(position, length, buf, buflen);
672 } else {
673 jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0);
674 return UNICODE::as_utf8(position, length, buf, buflen);
675 }
676 }
677
678 char* java_lang_String::as_utf8_string(oop java_string, char* buf, int buflen) {
679 typeArrayOop value = java_lang_String::value(java_string);
680 return as_utf8_string(java_string, value, buf, buflen);
|
632 int java_lang_String::utf8_length(oop java_string, typeArrayOop value) {
633 assert(value_equals(value, java_lang_String::value(java_string)),
634 "value must be same as java_lang_String::value(java_string)");
635 int length = java_lang_String::length(java_string, value);
636 if (length == 0) {
637 return 0;
638 }
639 if (!java_lang_String::is_latin1(java_string)) {
640 return UNICODE::utf8_length(value->char_at_addr(0), length);
641 } else {
642 return UNICODE::utf8_length(value->byte_at_addr(0), length);
643 }
644 }
645
646 int java_lang_String::utf8_length(oop java_string) {
647 typeArrayOop value = java_lang_String::value(java_string);
648 return utf8_length(java_string, value);
649 }
650
651 char* java_lang_String::as_utf8_string(oop java_string) {
652 int length = 0;
653 return as_utf8_string(java_string, length);
654 }
655
656 char* java_lang_String::as_utf8_string(oop java_string, int& length) {
657 typeArrayOop value = java_lang_String::value(java_string);
658 length = java_lang_String::length(java_string, value);
659 bool is_latin1 = java_lang_String::is_latin1(java_string);
660 if (!is_latin1) {
661 jchar* position = (length == 0) ? NULL : value->char_at_addr(0);
662 return UNICODE::as_utf8(position, length);
663 } else {
664 jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0);
665 return UNICODE::as_utf8(position, length);
666 }
667 }
668
669 // Uses a provided buffer if it's sufficiently large, otherwise allocates
670 // a resource array to fit
671 char* java_lang_String::as_utf8_string_full(oop java_string, char* buf, int buflen, int& utf8_len) {
672 typeArrayOop value = java_lang_String::value(java_string);
673 int len = java_lang_String::length(java_string, value);
674 bool is_latin1 = java_lang_String::is_latin1(java_string);
675 if (!is_latin1) {
676 jchar *position = (len == 0) ? NULL : value->char_at_addr(0);
677 utf8_len = UNICODE::utf8_length(position, len);
678 if (utf8_len >= buflen) {
679 buf = NEW_RESOURCE_ARRAY(char, utf8_len + 1);
680 }
681 return UNICODE::as_utf8(position, len, buf, utf8_len + 1);
682 } else {
683 jbyte *position = (len == 0) ? NULL : value->byte_at_addr(0);
684 utf8_len = UNICODE::utf8_length(position, len);
685 if (utf8_len >= buflen) {
686 buf = NEW_RESOURCE_ARRAY(char, utf8_len + 1);
687 }
688 return UNICODE::as_utf8(position, len, buf, utf8_len + 1);
689 }
690 }
691
692 char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) {
693 assert(value_equals(value, java_lang_String::value(java_string)),
694 "value must be same as java_lang_String::value(java_string)");
695 int length = java_lang_String::length(java_string, value);
696 bool is_latin1 = java_lang_String::is_latin1(java_string);
697 if (!is_latin1) {
698 jchar* position = (length == 0) ? NULL : value->char_at_addr(0);
699 return UNICODE::as_utf8(position, length, buf, buflen);
700 } else {
701 jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0);
702 return UNICODE::as_utf8(position, length, buf, buflen);
703 }
704 }
705
706 char* java_lang_String::as_utf8_string(oop java_string, char* buf, int buflen) {
707 typeArrayOop value = java_lang_String::value(java_string);
708 return as_utf8_string(java_string, value, buf, buflen);
|