< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page
rev 48017 : [mq]: Access_strings


 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 


< prev index next >