Improve performance of string comparison.
This commit is contained in:
@@ -261,22 +261,28 @@ public class LuaString extends LuaValue {
|
|||||||
// object comparison, used in key comparison
|
// object comparison, used in key comparison
|
||||||
public boolean equals( Object o ) {
|
public boolean equals( Object o ) {
|
||||||
if ( o instanceof LuaString ) {
|
if ( o instanceof LuaString ) {
|
||||||
LuaString s = (LuaString) o;
|
return eq_b( (LuaString) o );
|
||||||
if ( s.m_length != m_length )
|
|
||||||
return false;
|
|
||||||
if ( s.hashCode() != hashCode() )
|
|
||||||
return false;
|
|
||||||
for ( int i=0; i<m_length; i++ )
|
|
||||||
if ( s.m_bytes[s.m_offset+i] != m_bytes[m_offset+i] )
|
|
||||||
return false;
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean eq_b( LuaString s ) {
|
||||||
|
if ( s == this )
|
||||||
|
return true;
|
||||||
|
if ( s.m_length != m_length )
|
||||||
|
return false;
|
||||||
|
if ( s.m_bytes == m_bytes && s.m_offset == m_offset )
|
||||||
|
return true;
|
||||||
|
if ( s.hashCode() != hashCode() )
|
||||||
|
return false;
|
||||||
|
for ( int i=0; i<m_length; i++ )
|
||||||
|
if ( s.m_bytes[s.m_offset+i] != m_bytes[m_offset+i] )
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean eq_b( LuaValue val ) {
|
public boolean eq_b( LuaValue val ) {
|
||||||
return equals( val );
|
return val.eq_b( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean equals( LuaString a, int i, LuaString b, int j, int n ) {
|
public static boolean equals( LuaString a, int i, LuaString b, int j, int n ) {
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ public class LuaValue extends Varargs {
|
|||||||
// arithmetic equality
|
// arithmetic equality
|
||||||
public LuaValue eq( LuaValue val ) { return valueOf(eq_b(val)); }
|
public LuaValue eq( LuaValue val ) { return valueOf(eq_b(val)); }
|
||||||
public boolean eq_b( LuaValue val ) { return this == val; }
|
public boolean eq_b( LuaValue val ) { return this == val; }
|
||||||
|
public boolean eq_b( LuaString val ) { return this == val; }
|
||||||
public boolean eq_b( double val ) { return false; }
|
public boolean eq_b( double val ) { return false; }
|
||||||
public boolean eq_b( int val ) { return false; }
|
public boolean eq_b( int val ) { return false; }
|
||||||
public LuaValue neq( LuaValue val ) { return valueOf(!eq_b(val)); }
|
public LuaValue neq( LuaValue val ) { return valueOf(!eq_b(val)); }
|
||||||
|
|||||||
Reference in New Issue
Block a user