Skip to content

Commit

Permalink
Merged Value and ValueImpl again
Browse files Browse the repository at this point in the history
Also made custom ValueLoader interface to feed LazyValue.
  • Loading branch information
fickludd committed May 31, 2017
1 parent 7e59742 commit aace858
Show file tree
Hide file tree
Showing 23 changed files with 82 additions and 121 deletions.
Expand Up @@ -19,7 +19,7 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


abstract class DirectArray extends ValueImpl abstract class DirectArray extends Value
{ {
abstract int length(); abstract int length();


Expand Down
Expand Up @@ -90,7 +90,7 @@ public void writeTo( ValueWriter writer )
@Override @Override
public Object asPublic() public Object asPublic()
{ {
return value; return value.clone();
} }


@Override @Override
Expand Down
Expand Up @@ -19,7 +19,7 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


abstract class DirectScalar extends ValueImpl abstract class DirectScalar extends Value
{ {
@Override @Override
public boolean equals( byte[] x ) public boolean equals( byte[] x )
Expand Down
Expand Up @@ -19,11 +19,9 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


import java.util.concurrent.Callable;

abstract class LazyArray<T> extends LazyValue<T> abstract class LazyArray<T> extends LazyValue<T>
{ {
LazyArray( Callable<? extends T> producer ) LazyArray( Values.ValueLoader<? extends T> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyBooleanArray extends LazyArray<boolean[]> implements ValueGroup.VBooleanArray final class LazyBooleanArray extends LazyArray<boolean[]> implements ValueGroup.VBooleanArray
{ {
LazyBooleanArray( Callable<boolean[]> producer ) LazyBooleanArray( Values.ValueLoader<boolean[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyByteArray extends LazyIntegralArray<byte[]> final class LazyByteArray extends LazyIntegralArray<byte[]>
{ {
LazyByteArray( Callable<byte[]> producer ) LazyByteArray( Values.ValueLoader<byte[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyCharArray extends LazyTextArray<char[]> final class LazyCharArray extends LazyTextArray<char[]>
{ {
LazyCharArray( Callable<char[]> producer ) LazyCharArray( Values.ValueLoader<char[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyDoubleArray extends LazyFloatingPointArray<double[]> final class LazyDoubleArray extends LazyFloatingPointArray<double[]>
{ {
LazyDoubleArray( Callable<double[]> producer ) LazyDoubleArray( Values.ValueLoader<double[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyFloatArray extends LazyFloatingPointArray<float[]> final class LazyFloatArray extends LazyFloatingPointArray<float[]>
{ {
LazyFloatArray( Callable<float[]> producer ) LazyFloatArray( Values.ValueLoader<float[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -19,11 +19,9 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


import java.util.concurrent.Callable;

abstract class LazyFloatingPointArray<T> extends LazyArray<T> implements ValueGroup.VFloatingPointArray abstract class LazyFloatingPointArray<T> extends LazyArray<T> implements ValueGroup.VFloatingPointArray
{ {
LazyFloatingPointArray( Callable<? extends T> producer ) LazyFloatingPointArray( Values.ValueLoader<? extends T> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyIntArray extends LazyIntegralArray<int[]> final class LazyIntArray extends LazyIntegralArray<int[]>
{ {
LazyIntArray( Callable<int[]> producer ) LazyIntArray( Values.ValueLoader<int[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -19,11 +19,9 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


import java.util.concurrent.Callable;

abstract class LazyIntegralArray<T> extends LazyArray<T> implements ValueGroup.VIntegerArray abstract class LazyIntegralArray<T> extends LazyArray<T> implements ValueGroup.VIntegerArray
{ {
LazyIntegralArray( Callable<? extends T> producer ) LazyIntegralArray( Values.ValueLoader<? extends T> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyLongArray extends LazyIntegralArray<long[]> final class LazyLongArray extends LazyIntegralArray<long[]>
{ {
LazyLongArray( Callable<long[]> producer ) LazyLongArray( Values.ValueLoader<long[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyShortArray extends LazyIntegralArray<short[]> final class LazyShortArray extends LazyIntegralArray<short[]>
{ {
LazyShortArray( Callable<short[]> producer ) LazyShortArray( Values.ValueLoader<short[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -19,13 +19,11 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


import java.util.concurrent.Callable;

import static java.lang.String.format; import static java.lang.String.format;


final class LazyString extends LazyValue<String> implements ValueGroup.VText final class LazyString extends LazyValue<String> implements ValueGroup.VText
{ {
LazyString( Callable<String> producer ) LazyString( Values.ValueLoader<String> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -20,11 +20,10 @@
package org.neo4j.values; package org.neo4j.values;


import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.Callable;


final class LazyStringArray extends LazyTextArray<String[]> final class LazyStringArray extends LazyTextArray<String[]>
{ {
LazyStringArray( Callable<String[]> producer ) LazyStringArray( Values.ValueLoader<String[]> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
Expand Up @@ -19,11 +19,9 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


import java.util.concurrent.Callable;

abstract class LazyTextArray<T> extends LazyArray<T> implements ValueGroup.VTextArray abstract class LazyTextArray<T> extends LazyArray<T> implements ValueGroup.VTextArray
{ {
LazyTextArray( Callable<? extends T> producer ) LazyTextArray( Values.ValueLoader<? extends T> producer )
{ {
super( producer ); super( producer );
} }
Expand Down
27 changes: 11 additions & 16 deletions community/values/src/main/java/org/neo4j/values/LazyValue.java
Expand Up @@ -21,11 +21,13 @@


import java.util.concurrent.Callable; import java.util.concurrent.Callable;


abstract class LazyValue<T> extends ValueImpl import org.neo4j.values.Values.ValueLoader;

abstract class LazyValue<T> extends Value
{ {
private volatile Object value; private volatile Object value;


LazyValue( Callable<? extends T> producer ) LazyValue( ValueLoader<? extends T> producer )
{ {
this.value = producer; this.value = producer;
} }
Expand All @@ -35,32 +37,25 @@ abstract class LazyValue<T> extends ValueImpl
*/ */
final T getOrLoad() final T getOrLoad()
{ {
Object value = this.value; Object maybeValue = this.value;
if ( value instanceof Callable<?> ) if ( maybeValue instanceof ValueLoader<?> )
{ {
synchronized ( this ) synchronized ( this )
{ {
value = this.value; maybeValue = this.value;
if ( value instanceof Callable<?> ) if ( maybeValue instanceof ValueLoader<?> )
{ {
this.value = value = produceValue(); this.value = produceValue();
} }
} }
} }
//noinspection unchecked //noinspection unchecked
return (T) value; return (T) this.value;
} }


private Object produceValue() private Object produceValue()
{ {
try return ((ValueLoader<?>) value).load();
{
return ((Callable<?>) value).call();
}
catch ( Exception e )
{
throw new RuntimeException( e );
}
} }


boolean valueIsLoaded() boolean valueIsLoaded()
Expand Down
Expand Up @@ -19,7 +19,7 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


final class NoValue extends ValueImpl final class NoValue extends Value
{ {
@SuppressWarnings( "WeakerAccess" ) @SuppressWarnings( "WeakerAccess" )
public static NoValue NO_VALUE = new NoValue(); public static NoValue NO_VALUE = new NoValue();
Expand Down
45 changes: 29 additions & 16 deletions community/values/src/main/java/org/neo4j/values/Value.java
Expand Up @@ -19,28 +19,41 @@
*/ */
package org.neo4j.values; package org.neo4j.values;


public interface Value extends ValueGroup.WithId public abstract class Value implements ValueGroup.WithId
{ {
boolean equals( Value other ); @Override
public abstract boolean equals( Object other );


boolean equals( byte[] x ); @Override
boolean equals( short[] x ); public abstract int hashCode();
boolean equals( int[] x );
boolean equals( long[] x );


boolean equals( float[] x ); public abstract boolean equals( Value other );
boolean equals( double[] x );


boolean equals( boolean x ); public abstract boolean equals( byte[] x );
boolean equals( boolean[] x );


boolean equals( char x ); public abstract boolean equals( short[] x );
boolean equals( String x );


boolean equals( char[] x ); public abstract boolean equals( int[] x );
boolean equals( String[] x );


void writeTo( ValueWriter writer ); public abstract boolean equals( long[] x );


Object asPublic(); public abstract boolean equals( float[] x );

public abstract boolean equals( double[] x );

public abstract boolean equals( boolean x );

public abstract boolean equals( boolean[] x );

public abstract boolean equals( char x );

public abstract boolean equals( String x );

public abstract boolean equals( char[] x );

public abstract boolean equals( String[] x );

public abstract void writeTo( ValueWriter writer );

public abstract Object asPublic();
} }
35 changes: 0 additions & 35 deletions community/values/src/main/java/org/neo4j/values/ValueImpl.java

This file was deleted.

0 comments on commit aace858

Please sign in to comment.