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;

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

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

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

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

import java.util.concurrent.Callable;

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

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

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

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

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

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

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

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

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

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

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

import java.util.concurrent.Callable;

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

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

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

import java.util.concurrent.Callable;

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

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

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

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

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

import java.util.concurrent.Callable;

import static java.lang.String.format;

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

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

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

import java.util.concurrent.Callable;

abstract class LazyTextArray<T> extends LazyArray<T> implements ValueGroup.VTextArray
{
LazyTextArray( Callable<? extends T> producer )
LazyTextArray( Values.ValueLoader<? extends T> 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;

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

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

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

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

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

final class NoValue extends ValueImpl
final class NoValue extends Value
{
@SuppressWarnings( "WeakerAccess" )
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;

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 );
boolean equals( short[] x );
boolean equals( int[] x );
boolean equals( long[] x );
@Override
public abstract int hashCode();

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

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

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

boolean equals( char[] x );
boolean equals( String[] x );
public abstract boolean equals( int[] 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.