bool G1StringDedupTable::equals(typeArrayOop value1, typeArrayOop value2) { return (value1 == value2 || (value1->length() == value2->length() && (!memcmp(value1->base(T_BYTE), value2->base(T_BYTE), value1->length() * sizeof(jbyte))))); }
unsigned int G1StringDedupTable::hash_code(typeArrayOop value) { unsigned int hash; int length = value->length(); const jchar* data = (jchar*)value->base(T_CHAR); if (use_java_hash()) { hash = java_lang_String::hash_code(data, length); } else { hash = AltHashing::murmur3_32(_table->_hash_seed, data, length); } return hash; }
// Create a new array, copying the src array but adding a hole at // the specified location static typeArrayOop insert_hole_at( size_t where, int hole_sz, typeArrayOop src) { Thread* THREAD = Thread::current(); Handle src_hnd(THREAD, src); typeArrayOop dst = oopFactory::new_permanent_byteArray(src->length() + hole_sz, CHECK_NULL); src = (typeArrayOop)src_hnd(); address src_addr = (address)src->byte_at_addr(0); address dst_addr = (address)dst->byte_at_addr(0); memcpy(dst_addr, src_addr, where); memcpy(dst_addr + where + hole_sz, src_addr + where, src->length() - where); return dst; }
unsigned int G1StringDedupTable::hash_code(typeArrayOop value, bool latin1) { unsigned int hash; int length = value->length(); if (latin1) { const jbyte* data = (jbyte*)value->base(T_BYTE); if (use_java_hash()) { hash = java_lang_String::hash_code(data, length); } else { hash = AltHashing::murmur3_32(_table->_hash_seed, data, length); } } else { length /= sizeof(jchar) / sizeof(jbyte); // Convert number of bytes to number of chars const jchar* data = (jchar*)value->base(T_CHAR); if (use_java_hash()) { hash = java_lang_String::hash_code(data, length); } else { hash = AltHashing::murmur3_32(_table->_hash_seed, data, length); } } return hash; }
static void print_long_array(typeArrayOop ta, int print_len, outputStream* st) { for (int index = 0; index < print_len; index++) { jlong v = ta->long_at(index); st->print_cr(" - %3d: 0x%x 0x%x", index, high(v), low(v)); } }
static void print_int_array(typeArrayOop ta, int print_len, outputStream* st) { for (int index = 0; index < print_len; index++) { jint v = ta->int_at(index); st->print_cr(" - %3d: 0x%x %d", index, v, v); } }
static void print_byte_array(typeArrayOop ta, int print_len, outputStream* st) { for (int index = 0; index < print_len; index++) { jbyte c = ta->byte_at(index); st->print_cr(" - %3d: %x %c", index, c, isprint(c) ? c : ' '); } }
static void print_double_array(typeArrayOop ta, int print_len, outputStream* st) { for (int index = 0; index < print_len; index++) { st->print_cr(" - %3d: %g", index, ta->double_at(index)); } }
static void print_boolean_array(typeArrayOop ta, int print_len, outputStream* st) { for (int index = 0; index < print_len; index++) { st->print_cr(" - %3d: %s", index, (ta->bool_at(index) == 0) ? "false" : "true"); } }