@Override protected Register.DoubleLongRegister defaultValue() { target.write( 0, 0 ); return target; } }
@Override public void copyTo( Register.DoubleLong.Out target ) { target.write( first, second ); }
public static Register.DoubleLongRegister newDoubleLongRegister() { return newDoubleLongRegister( -1L, -1L ); }
public double indexUniqueValuesPercentage( SchemaDescriptor descriptor ) throws IndexNotFoundKernelException { final long indexId = indexMapRef.getOnlineIndexId( descriptor ); final DoubleLongRegister output = Registers.newDoubleLongRegister(); storeView.indexSample( indexId, output ); long unique = output.readFirst(); long size = output.readSecond(); if ( size == 0 ) { return 1.0d; } else { return ((double) unique) / ((double) size); } }
@Override public long countsForNode( int labelId ) { return counts.nodeCount( labelId, newDoubleLongRegister() ).readSecond(); }
private void assertEqualRegisters( String message, DoubleLongRegister expected, DoubleLongRegister actual ) { assertEquals( message + " (first part of register)", expected.readFirst(), actual.readFirst() ); assertEquals( message + " (second part of register)", expected.readSecond(), actual.readSecond() ); }
private static long readUpdates( IndexReference index, SchemaRead schemaRead, Register.DoubleLongRegister register ) throws IndexNotFoundKernelException { schemaRead.indexUpdatesAndSize( index, register ); return register.readFirst(); } }
@Override public long indexSize( SchemaDescriptor descriptor ) throws IndexNotFoundKernelException { Register.DoubleLongRegister result = indexService.indexUpdatesAndSize( descriptor ); return result.readSecond(); }
@Override public void incrementRelationshipCount( long startLabelId, int typeId, long endLabelId, long delta ) { if ( delta != 0 ) { counts( relationshipKey( startLabelId, typeId, endLabelId ) ).increment( 0L, delta ); } }
@Override public void visitIndexStatistics( long indexId, long updates, long size ) { Register.DoubleLongRegister output = tracker.indexUpdatesAndSize( indexId, newDoubleLongRegister() ); assertEquals( "Should be able to read visited state.", output.readFirst(), updates ); assertEquals( "Should be able to read visited state.", output.readSecond(), size ); }
@Override public long countsForRelationship( int startLabelId, int typeId, int endLabelId ) { if ( !(startLabelId == StatementConstants.ANY_LABEL || endLabelId == StatementConstants.ANY_LABEL) ) { throw new UnsupportedOperationException( "not implemented" ); } return counts.relationshipCount( startLabelId, typeId, endLabelId, newDoubleLongRegister() ).readSecond(); }
private void assertDoubleLongEquals( long expectedUniqueValue, long expectedSampledSize, DoubleLongRegister register ) { assertEquals( expectedUniqueValue, register.readFirst() ); assertEquals( expectedSampledSize, register.readSecond() ); }
private Predicate<Long> createSamplingPredicate() { return new Predicate<Long>() { private final DoubleLongRegister output = newDoubleLongRegister(); @Override public boolean test( Long indexId ) { storeView.indexUpdatesAndSize( indexId, output ); long updates = output.readFirst(); long size = output.readSecond(); long threshold = Math.round( config.updateRatio() * size ); return updates > threshold; } }; }
@Override public Register.DoubleLongRegister answer( InvocationOnMock invocationOnMock ) throws Throwable { Register.DoubleLongRegister r = invocationOnMock.getArgument( 1 ); r.write( updates[i], 0 ); i = (i + 1) % updates.length; return r; } } );
@Override public void visitIndexSample( long indexId, long unique, long size ) { Register.DoubleLongRegister output = tracker.indexSample( indexId, newDoubleLongRegister() ); assertEquals( "Should be able to read visited state.", output.readFirst(), unique ); assertEquals( "Should be able to read visited state.", output.readSecond(), size ); } } );
private long get( CountsTracker store, CountsKey key ) { Register.DoubleLongRegister value = Registers.newDoubleLongRegister(); store.get( key, value ); return value.readSecond(); }
private DoubleLongRegister counts( CountsKey key ) { return counts.computeIfAbsent( key, k -> Registers.newDoubleLongRegister( DEFAULT_FIRST_VALUE, DEFAULT_SECOND_VALUE ) ); }
@Override protected Register.DoubleLongRegister parseValue( ReadableBuffer value ) { target.write( value.getLong( 0 ), value.getLong( 8 ) ); return target; }
@Override public void visitRelationshipCount( int startLabelId, int typeId, int endLabelId, long count ) { long expected = tracker.relationshipCount( startLabelId, typeId, endLabelId, newDoubleLongRegister() ).readSecond(); assertEquals( "Should be able to read visited state.", expected, count ); }
@Override public void visitNodeCount( int labelId, long count ) { long expected = tracker.nodeCount( labelId, newDoubleLongRegister() ).readSecond(); assertEquals( "Should be able to read visited state.", expected, count ); }