diff --git a/community/values/src/main/java/org/neo4j/values/DirectBooleanArray.java b/community/values/src/main/java/org/neo4j/values/DirectBooleanArray.java index b1f7287271ab4..dbda8b463468d 100644 --- a/community/values/src/main/java/org/neo4j/values/DirectBooleanArray.java +++ b/community/values/src/main/java/org/neo4j/values/DirectBooleanArray.java @@ -54,7 +54,7 @@ public boolean equals( Object other ) @Override public boolean equals( Value other ) { - return equals( this.value, other ); + return other.equals( this.value ); } @Override @@ -114,17 +114,7 @@ boolean equals( String[] x ) @Override public int hashCode() { - return hash( value ); - } - - static boolean equals( boolean[] value, Value other ) - { - return other instanceof DirectBooleanArray && Arrays.equals( value, ((DirectBooleanArray) other).value ); - } - - static int hash( boolean[] value ) - { - return Arrays.hashCode( value ); + return NumberValues.hash( value ); } @Override @@ -141,14 +131,6 @@ public String toString() public int compareTo( ValueGroup.VBooleanArray other ) { - int i = 0; - int x = value.length - other.length(); - - while ( x == 0 && i < value.length ) - { - x = Boolean.compare( value[i], other.booleanValue( i ) ); - i++; - } - return x; + return NumberValues.compareBooleanArrays( this, other ); } } diff --git a/community/values/src/main/java/org/neo4j/values/DirectCharArray.java b/community/values/src/main/java/org/neo4j/values/DirectCharArray.java index 43faa9de7cd77..b5f785b8bc29e 100644 --- a/community/values/src/main/java/org/neo4j/values/DirectCharArray.java +++ b/community/values/src/main/java/org/neo4j/values/DirectCharArray.java @@ -23,7 +23,7 @@ import static java.lang.String.format; -final class DirectCharArray extends DirectArray +final class DirectCharArray extends DirectArray implements ValueGroup.VTextArray { final char[] value; @@ -33,12 +33,6 @@ final class DirectCharArray extends DirectArray this.value = value; } - @Override - int length() - { - return value.length; - } - @Override public boolean equals( Object other ) { @@ -118,15 +112,28 @@ public int hashCode() return TextValues.hash( value ); } + @Override + public int compareTo( ValueGroup.VTextArray other ) + { + return TextValues.compareTextArrays( this, other ); + } + + @Override + public int length() + { + return value.length; + } + + @Override + public String stringValue( int offset ) + { + return Character.toString( value[offset] ); + } + @Override void writeTo( ValueWriter writer ) { - writer.beginArray( value.length, ValueWriter.ArrayType.CHAR ); - for ( char x : value ) - { - writer.writeString( x ); - } - writer.endArray(); + PrimitiveArrayWriting.writeTo( writer, value ); } @Override diff --git a/community/values/src/main/java/org/neo4j/values/DirectStringArray.java b/community/values/src/main/java/org/neo4j/values/DirectStringArray.java index 5fb724a36a8c6..90c2beb0bedc8 100644 --- a/community/values/src/main/java/org/neo4j/values/DirectStringArray.java +++ b/community/values/src/main/java/org/neo4j/values/DirectStringArray.java @@ -23,7 +23,7 @@ import static java.lang.String.format; -final class DirectStringArray extends DirectArray +final class DirectStringArray extends DirectArray implements ValueGroup.VTextArray { final String[] value; @@ -34,11 +34,17 @@ final class DirectStringArray extends DirectArray } @Override - int length() + public int length() { return value.length; } + @Override + public String stringValue( int offset ) + { + return value[offset]; + } + @Override public boolean equals( Object other ) { @@ -123,16 +129,8 @@ public String toString() return format( "StringArray(%s)", Arrays.toString( value ) ); } - public int compareTo( DirectStringArray other ) + public int compareTo( ValueGroup.VTextArray other ) { - int i = 0; - int x = value.length - other.value.length; - - while ( x == 0 && i < value.length ) - { - x = value[i].compareTo( other.value[i] ); - i++; - } - return x; + return TextValues.compareTextArrays( this, other ); } } diff --git a/community/values/src/main/java/org/neo4j/values/NumberValues.java b/community/values/src/main/java/org/neo4j/values/NumberValues.java index 67664d4a3fa43..f0135cf769b76 100644 --- a/community/values/src/main/java/org/neo4j/values/NumberValues.java +++ b/community/values/src/main/java/org/neo4j/values/NumberValues.java @@ -20,6 +20,7 @@ package org.neo4j.values; import java.math.BigDecimal; +import java.util.Arrays; @SuppressWarnings( "WeakerAccess" ) public class NumberValues @@ -112,6 +113,11 @@ public static int hash( double[] values ) return result; } + public static int hash( boolean[] value ) + { + return Arrays.hashCode( value ); + } + public static boolean numbersEqual( double fpn, long in ) { if ( in < 0 ) @@ -282,4 +288,18 @@ public static int compareFloatArrays( ValueGroup.VFloatingPointArray a, ValueGro } return x; } + + public static int compareBooleanArrays( ValueGroup.VBooleanArray a, ValueGroup.VBooleanArray b ) + { + int i = 0; + int length = a.length(); + int x = length - b.length(); + + while ( x == 0 && i < length ) + { + x = Boolean.compare( a.booleanValue( i ), b.booleanValue( i ) ); + i++; + } + return x; + } } diff --git a/community/values/src/main/java/org/neo4j/values/TextValues.java b/community/values/src/main/java/org/neo4j/values/TextValues.java index 9f3ee10425dbd..70a95fc3ef1d4 100644 --- a/community/values/src/main/java/org/neo4j/values/TextValues.java +++ b/community/values/src/main/java/org/neo4j/values/TextValues.java @@ -42,6 +42,20 @@ public static int compareCharToString( char c, String s ) return x; } + public static int compareTextArrays( ValueGroup.VTextArray a, ValueGroup.VTextArray b ) + { + int i = 0; + int length = a.length(); + int x = length - b.length(); + + while ( x == 0 && i < length ) + { + x = a.stringValue( i ).compareTo( b.stringValue( i ) ); + i++; + } + return x; + } + public static int hash( char[] value ) { return Arrays.hashCode( value );