You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by ka...@apache.org on 2013/04/21 19:58:25 UTC
svn commit: r1470325 [3/3] - in /labs/mavibot/trunk: ./
mavibot/src/main/java/org/apache/mavibot/btree/
mavibot/src/main/java/org/apache/mavibot/btree/comparator/
mavibot/src/main/java/org/apache/mavibot/btree/serializer/
mavibot/src/main/java/org/apac...
Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ByteSerializer.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ByteSerializer.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ByteSerializer.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ByteSerializer.java Sun Apr 21 17:58:23 2013
@@ -22,7 +22,6 @@ package org.apache.mavibot.btree.seriali
import java.io.IOException;
import java.nio.ByteBuffer;
-import java.util.Comparator;
import org.apache.mavibot.btree.comparator.ByteComparator;
@@ -32,18 +31,14 @@ import org.apache.mavibot.btree.comparat
*
* @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
*/
-public class ByteSerializer implements ElementSerializer<Byte>
+public class ByteSerializer extends AbstractElementSerializer<Byte>
{
- /** The associated comparator */
- private final Comparator<Byte> comparator;
-
-
/**
* Create a new instance of ByteSerializer
*/
public ByteSerializer()
{
- comparator = new ByteComparator();
+ super( new ByteComparator() );
}
@@ -53,90 +48,85 @@ public class ByteSerializer implements E
public byte[] serialize( Byte element )
{
byte[] bytes = new byte[1];
- bytes[0] = element.byteValue();
- return bytes;
+ return serialize( bytes, 0, element );
}
/**
- * A static method used to deserialize a Byte from a byte array.
- * @param in The byte array containing the Byte
- * @return A Byte
+ * Serialize a byte
+ *
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized byte
*/
- public static Byte deserialize( byte[] in )
+ public static byte[] serialize( byte value )
{
- if ( ( in == null ) || ( in.length < 1 ) )
- {
- throw new RuntimeException( "Cannot extract a Byte from a buffer with not enough bytes" );
- }
+ byte[] bytes = new byte[1];
- return in[0];
+ return serialize( bytes, 0, value );
}
/**
- * {@inheritDoc}
+ * Serialize a byte
+ *
+ * @param buffer the Buffer that will contain the serialized value
+ * @param start the position in the buffer we will store the serialized byte
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized byte
*/
- public Byte deserialize( ByteBuffer buffer ) throws IOException
+ public static byte[] serialize( byte[] buffer, int start, byte value )
{
- return buffer.get();
+ buffer[start] = value;
+
+ return buffer;
}
/**
- * {@inheritDoc}
+ * A static method used to deserialize a Byte from a byte array.
+ * @param in The byte array containing the Byte
+ * @return A Byte
*/
- public Byte deserialize( BufferHandler bufferHandler ) throws IOException
+ public static Byte deserialize( byte[] in )
{
- byte[] in = bufferHandler.read( 1 );
-
- return deserialize( in );
+ return deserialize( in, 0 );
}
/**
- * {@inheritDoc}
+ * A static method used to deserialize a Byte from a byte array.
+ * @param in The byte array containing the Byte
+ * @param start the position in the byte[] we will deserialize the byte from
+ * @return A Byte
*/
- @Override
- public int compare( Byte type1, Byte type2 )
+ public static Byte deserialize( byte[] in, int start )
{
- if ( type1 == type2 )
+ if ( ( in == null ) || ( in.length < 1 + start ) )
{
- return 0;
+ throw new RuntimeException( "Cannot extract a Byte from a buffer with not enough bytes" );
}
- if ( type1 == null )
- {
- if ( type2 == null )
- {
- return 0;
- }
- else
- {
- return -1;
- }
- }
- else
- {
- if ( type2 == null )
- {
- return 1;
- }
- else
- {
- return type1.compareTo( type2 );
- }
- }
+ return in[start];
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public Byte deserialize( ByteBuffer buffer ) throws IOException
+ {
+ return buffer.get();
}
/**
* {@inheritDoc}
*/
- @Override
- public Comparator<Byte> getComparator()
+ public Byte deserialize( BufferHandler bufferHandler ) throws IOException
{
- return comparator;
+ byte[] in = bufferHandler.read( 1 );
+
+ return deserialize( in );
}
}
Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/CharSerializer.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/CharSerializer.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/CharSerializer.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/CharSerializer.java Sun Apr 21 17:58:23 2013
@@ -22,7 +22,6 @@ package org.apache.mavibot.btree.seriali
import java.io.IOException;
import java.nio.ByteBuffer;
-import java.util.Comparator;
import org.apache.mavibot.btree.comparator.CharComparator;
@@ -32,18 +31,14 @@ import org.apache.mavibot.btree.comparat
*
* @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
*/
-public class CharSerializer implements ElementSerializer<Character>
+public class CharSerializer extends AbstractElementSerializer<Character>
{
- /** The associated comparator */
- private final Comparator<Character> comparator;
-
-
/**
* Create a new instance of CharSerializer
*/
public CharSerializer()
{
- comparator = new CharComparator();
+ super( new CharComparator() );
}
@@ -53,94 +48,87 @@ public class CharSerializer implements E
public byte[] serialize( Character element )
{
byte[] bytes = new byte[2];
- char value = element.charValue();
-
- bytes[0] = ( byte ) ( value >>> 8 );
- bytes[1] = ( byte ) ( value );
- return bytes;
+ return serialize( bytes, 0, element );
}
/**
- * A static method used to deserialize a Character from a byte array.
- * @param in The byte array containing the Character
- * @return A Character
+ * Serialize a char
+ *
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized char
*/
- public static Character deserialize( byte[] in )
+ public static byte[] serialize( char value )
{
- if ( ( in == null ) || ( in.length < 2 ) )
- {
- throw new RuntimeException( "Cannot extract a Character from a buffer with not enough bytes" );
- }
+ byte[] bytes = new byte[2];
- return Character.valueOf( ( char ) ( ( in[0] << 8 ) +
- ( in[1] & 0xFF ) ) );
+ return serialize( bytes, 0, value );
}
/**
- * {@inheritDoc}
+ * Serialize a char
+ *
+ * @param buffer the Buffer that will contain the serialized value
+ * @param start the position in the buffer we will store the serialized char
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized char
*/
- public Character deserialize( ByteBuffer buffer ) throws IOException
+ public static byte[] serialize( byte[] buffer, int start, char value )
{
- return buffer.getChar();
+ buffer[start] = ( byte ) ( value >>> 8 );
+ buffer[start + 1] = ( byte ) ( value );
+
+ return buffer;
}
/**
- * {@inheritDoc}
+ * A static method used to deserialize a Character from a byte array.
+ * @param in The byte array containing the Character
+ * @return A Character
*/
- public Character deserialize( BufferHandler bufferHandler ) throws IOException
+ public static Character deserialize( byte[] in )
{
- byte[] in = bufferHandler.read( 2 );
-
- return deserialize( in );
+ return deserialize( in, 0 );
}
/**
- * {@inheritDoc}
+ * A static method used to deserialize a Character from a byte array.
+ * @param in The byte array containing the Character
+ * @param start the position in the byte[] we will deserialize the char from
+ * @return A Character
*/
- @Override
- public int compare( Character type1, Character type2 )
+ public static Character deserialize( byte[] in, int start )
{
- if ( type1 == type2 )
+ if ( ( in == null ) || ( in.length < 2 + start ) )
{
- return 0;
+ throw new RuntimeException( "Cannot extract a Character from a buffer with not enough bytes" );
}
- if ( type1 == null )
- {
- if ( type2 == null )
- {
- return 0;
- }
- else
- {
- return -1;
- }
- }
- else
- {
- if ( type2 == null )
- {
- return 1;
- }
- else
- {
- return type1.compareTo( type2 );
- }
- }
+ return Character.valueOf( ( char ) ( ( in[start] << 8 ) +
+ ( in[start + 1] & 0xFF ) ) );
}
/**
* {@inheritDoc}
*/
- @Override
- public Comparator<Character> getComparator()
+ public Character deserialize( ByteBuffer buffer ) throws IOException
{
- return comparator;
+ return buffer.getChar();
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public Character deserialize( BufferHandler bufferHandler ) throws IOException
+ {
+ byte[] in = bufferHandler.read( 2 );
+
+ return deserialize( in );
}
}
Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ElementSerializer.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ElementSerializer.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ElementSerializer.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ElementSerializer.java Sun Apr 21 17:58:23 2013
@@ -26,7 +26,7 @@ import java.util.Comparator;
/**
- * This interface is used by implementations of serializer, deserializr and comparator.
+ * This interface is used by implementations of serializer, deserializer and comparator.
*
* @param <T> The type for the element to serialize and compare
*
@@ -44,7 +44,7 @@ public interface ElementSerializer<T>
/**
- * Deserialize an element from a byte[]
+ * Deserialize an element from a BufferHandler
*
* @param bufferHandler The incoming bufferHandler
* @return The deserialized element
@@ -54,9 +54,9 @@ public interface ElementSerializer<T>
/**
- * Deserialize an element from a byte[]
+ * Deserialize an element from a ByteBuffer
*
- * @param buffer The incoming bufferHandler
+ * @param buffer The incoming ByteBuffer
* @return The deserialized element
* @throws IOException If the deserialization failed
*/
Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/IntSerializer.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/IntSerializer.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/IntSerializer.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/IntSerializer.java Sun Apr 21 17:58:23 2013
@@ -22,7 +22,6 @@ package org.apache.mavibot.btree.seriali
import java.io.IOException;
import java.nio.ByteBuffer;
-import java.util.Comparator;
import org.apache.mavibot.btree.comparator.IntComparator;
@@ -32,62 +31,45 @@ import org.apache.mavibot.btree.comparat
*
* @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
*/
-public class IntSerializer implements ElementSerializer<Integer>
+public class IntSerializer extends AbstractElementSerializer<Integer>
{
- /** The associated comparator */
- private final Comparator<Integer> comparator;
-
-
/**
* Create a new instance of IntSerializer
*/
public IntSerializer()
{
- comparator = new IntComparator();
+ super( new IntComparator() );
}
/**
- * {@inheritDoc}
+ * A static method used to deserialize an Integer from a byte array.
+ * @param in The byte array containing the Integer
+ * @return An Integer
*/
- public byte[] serialize( Integer element )
+ public static Integer deserialize( byte[] in )
{
- return serialize( element.intValue() );
+ return deserialize( in, 0 );
}
/**
* A static method used to deserialize an Integer from a byte array.
* @param in The byte array containing the Integer
+ * @param start the position in the byte[] we will deserialize the int from
* @return An Integer
*/
- public static Integer deserialize( byte[] in )
+ public static Integer deserialize( byte[] in, int start )
{
- if ( ( in == null ) || ( in.length < 4 ) )
+ if ( ( in == null ) || ( in.length < 4 + start ) )
{
throw new RuntimeException( "Cannot extract a Integer from a buffer with not enough bytes" );
}
- return ( in[0] << 24 ) +
- ( ( in[1] & 0xFF ) << 16 ) +
- ( ( in[2] & 0xFF ) << 8 ) +
- ( in[3] & 0xFF );
- }
-
-
- /**
- * {@inheritDoc}
- */
- public static byte[] serialize( int value )
- {
- byte[] bytes = new byte[4];
-
- bytes[0] = ( byte ) ( value >>> 24 );
- bytes[1] = ( byte ) ( value >>> 16 );
- bytes[2] = ( byte ) ( value >>> 8 );
- bytes[3] = ( byte ) ( value );
-
- return bytes;
+ return ( in[start] << 24 ) +
+ ( ( in[start + 1] & 0xFF ) << 16 ) +
+ ( ( in[start + 2] & 0xFF ) << 8 ) +
+ ( in[start + 3] & 0xFF );
}
@@ -114,45 +96,41 @@ public class IntSerializer implements El
/**
* {@inheritDoc}
*/
- @Override
- public int compare( Integer type1, Integer type2 )
+ public byte[] serialize( Integer element )
{
- if ( type1 == type2 )
- {
- return 0;
- }
+ return serialize( element.intValue() );
+ }
- if ( type1 == null )
- {
- if ( type2 == null )
- {
- return 0;
- }
- else
- {
- return -1;
- }
- }
- else
- {
- if ( type2 == null )
- {
- return 1;
- }
- else
- {
- return type1.compareTo( type2 );
- }
- }
+
+ /**
+ * Serialize an int
+ *
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized int
+ */
+ public static byte[] serialize( int value )
+ {
+ byte[] bytes = new byte[4];
+
+ return serialize( bytes, 0, value );
}
/**
- * {@inheritDoc}
+ * Serialize an int
+ *
+ * @param buffer the Buffer that will contain the serialized value
+ * @param start the position in the buffer we will store the serialized int
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized int
*/
- @Override
- public Comparator<Integer> getComparator()
+ public static byte[] serialize( byte[] buffer, int start, int value )
{
- return comparator;
+ buffer[start] = ( byte ) ( value >>> 24 );
+ buffer[start + 1] = ( byte ) ( value >>> 16 );
+ buffer[start + 2] = ( byte ) ( value >>> 8 );
+ buffer[start + 3] = ( byte ) ( value );
+
+ return buffer;
}
}
Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/LongSerializer.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/LongSerializer.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/LongSerializer.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/LongSerializer.java Sun Apr 21 17:58:23 2013
@@ -22,7 +22,6 @@ package org.apache.mavibot.btree.seriali
import java.io.IOException;
import java.nio.ByteBuffer;
-import java.util.Comparator;
import org.apache.mavibot.btree.comparator.LongComparator;
@@ -32,18 +31,14 @@ import org.apache.mavibot.btree.comparat
*
* @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
*/
-public class LongSerializer implements ElementSerializer<Long>
+public class LongSerializer extends AbstractElementSerializer<Long>
{
- /** The associated comparator */
- private final Comparator<Long> comparator;
-
-
/**
* Create a new instance of LongSerializer
*/
public LongSerializer()
{
- comparator = new LongComparator();
+ super( new LongComparator() );
}
@@ -57,47 +52,75 @@ public class LongSerializer implements E
/**
- * A static method used to derialize a long into a byte array.
- * @param in The byte array containing the long
- * @return A long
+ * Serialize an long
+ *
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized long
*/
public static byte[] serialize( long value )
{
byte[] bytes = new byte[8];
- bytes[0] = ( byte ) ( value >>> 56 );
- bytes[1] = ( byte ) ( value >>> 48 );
- bytes[2] = ( byte ) ( value >>> 40 );
- bytes[3] = ( byte ) ( value >>> 32 );
- bytes[4] = ( byte ) ( value >>> 24 );
- bytes[5] = ( byte ) ( value >>> 16 );
- bytes[6] = ( byte ) ( value >>> 8 );
- bytes[7] = ( byte ) ( value );
+ return serialize( bytes, 0, value );
+ }
- return bytes;
+
+ /**
+ * Serialize an long
+ *
+ * @param buffer the Buffer that will contain the serialized value
+ * @param start the position in the buffer we will store the serialized long
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized long
+ */
+ public static byte[] serialize( byte[] buffer, int start, long value )
+ {
+ buffer[start] = ( byte ) ( value >>> 56 );
+ buffer[start + 1] = ( byte ) ( value >>> 48 );
+ buffer[start + 2] = ( byte ) ( value >>> 40 );
+ buffer[start + 3] = ( byte ) ( value >>> 32 );
+ buffer[start + 4] = ( byte ) ( value >>> 24 );
+ buffer[start + 5] = ( byte ) ( value >>> 16 );
+ buffer[start + 6] = ( byte ) ( value >>> 8 );
+ buffer[start + 7] = ( byte ) ( value );
+
+ return buffer;
}
/**
* A static method used to deserialize a Long from a byte array.
* @param in The byte array containing the Long
+ * @param start the position in the byte[] we will deserialize the long from
* @return A Long
*/
public static Long deserialize( byte[] in )
{
- if ( ( in == null ) || ( in.length < 8 ) )
+ return deserialize( in, 0 );
+ }
+
+
+ /**
+ * A static method used to deserialize an Integer from a byte array.
+ * @param in The byte array containing the Integer
+ * @param start the position in the byte[] we will deserialize the long from
+ * @return An Integer
+ */
+ public static Long deserialize( byte[] in, int start )
+ {
+ if ( ( in == null ) || ( in.length < 8 + start ) )
{
throw new RuntimeException( "Cannot extract a Long from a buffer with not enough bytes" );
}
- long result = ( ( long ) in[0] << 56 ) +
- ( ( in[1] & 0xFFL ) << 48 ) +
- ( ( in[2] & 0xFFL ) << 40 ) +
- ( ( in[3] & 0xFFL ) << 32 ) +
- ( ( in[4] & 0xFFL ) << 24 ) +
- ( ( in[5] & 0xFFL ) << 16 ) +
- ( ( in[6] & 0xFFL ) << 8 ) +
- ( in[7] & 0xFFL );
+ long result = ( ( long ) in[start] << 56 ) +
+ ( ( in[start + 1] & 0xFFL ) << 48 ) +
+ ( ( in[start + 2] & 0xFFL ) << 40 ) +
+ ( ( in[start + 3] & 0xFFL ) << 32 ) +
+ ( ( in[start + 4] & 0xFFL ) << 24 ) +
+ ( ( in[start + 5] & 0xFFL ) << 16 ) +
+ ( ( in[start + 6] & 0xFFL ) << 8 ) +
+ ( in[start + 7] & 0xFFL );
return result;
}
@@ -121,50 +144,4 @@ public class LongSerializer implements E
{
return buffer.getLong();
}
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int compare( Long type1, Long type2 )
- {
- if ( type1 == type2 )
- {
- return 0;
- }
-
- if ( type1 == null )
- {
- if ( type2 == null )
- {
- return 0;
- }
- else
- {
- return -1;
- }
- }
- else
- {
- if ( type2 == null )
- {
- return 1;
- }
- else
- {
- return type1.compareTo( type2 );
- }
- }
- }
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Comparator<Long> getComparator()
- {
- return comparator;
- }
}
Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ShortSerializer.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ShortSerializer.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ShortSerializer.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/ShortSerializer.java Sun Apr 21 17:58:23 2013
@@ -22,7 +22,6 @@ package org.apache.mavibot.btree.seriali
import java.io.IOException;
import java.nio.ByteBuffer;
-import java.util.Comparator;
import org.apache.mavibot.btree.comparator.ShortComparator;
@@ -32,18 +31,14 @@ import org.apache.mavibot.btree.comparat
*
* @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
*/
-public class ShortSerializer implements ElementSerializer<Short>
+public class ShortSerializer extends AbstractElementSerializer<Short>
{
- /** The associated comparator */
- private final Comparator<Short> comparator;
-
-
/**
* Create a new instance of ShortSerializer
*/
public ShortSerializer()
{
- comparator = new ShortComparator();
+ super( new ShortComparator() );
}
@@ -53,93 +48,86 @@ public class ShortSerializer implements
public byte[] serialize( Short element )
{
byte[] bytes = new byte[2];
- short value = element.shortValue();
-
- bytes[0] = ( byte ) ( value >>> 8 );
- bytes[1] = ( byte ) ( value );
- return bytes;
+ return serialize( bytes, 0, element );
}
/**
- * A static method used to deserialize a Short from a byte array.
- * @param in The byte array containing the Short
- * @return A Short
+ * Serialize a short
+ *
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized short
*/
- public static Short deserialize( byte[] in )
+ public static byte[] serialize( short value )
{
- if ( ( in == null ) || ( in.length < 2 ) )
- {
- throw new RuntimeException( "Cannot extract a Short from a buffer with not enough bytes" );
- }
+ byte[] bytes = new byte[2];
- return ( short ) ( ( in[0] << 8 ) + ( in[1] & 0xFF ) );
+ return serialize( bytes, 0, value );
}
/**
- * {@inheritDoc}
+ * Serialize a short
+ *
+ * @param buffer the Buffer that will contain the serialized value
+ * @param start the position in the buffer we will store the serialized short
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized short
*/
- public Short deserialize( ByteBuffer buffer ) throws IOException
+ public static byte[] serialize( byte[] buffer, int start, short value )
{
- return buffer.getShort();
+ buffer[start] = ( byte ) ( value >>> 8 );
+ buffer[start + 1] = ( byte ) ( value );
+
+ return buffer;
}
/**
- * {@inheritDoc}
+ * A static method used to deserialize a Short from a byte array.
+ * @param in The byte array containing the Short
+ * @return A Short
*/
- public Short deserialize( BufferHandler bufferHandler ) throws IOException
+ public static Short deserialize( byte[] in )
{
- byte[] in = bufferHandler.read( 2 );
-
- return deserialize( in );
+ return deserialize( in, 0 );
}
/**
- * {@inheritDoc}
+ * A static method used to deserialize a Short from a byte array.
+ * @param in The byte array containing the Short
+ * @param start the position in the byte[] we will deserialize the short from
+ * @return A Short
*/
- @Override
- public int compare( Short type1, Short type2 )
+ public static Short deserialize( byte[] in, int start )
{
- if ( type1 == type2 )
+ if ( ( in == null ) || ( in.length < 2 + start ) )
{
- return 0;
+ throw new RuntimeException( "Cannot extract a Short from a buffer with not enough bytes" );
}
- if ( type1 == null )
- {
- if ( type2 == null )
- {
- return 0;
- }
- else
- {
- return -1;
- }
- }
- else
- {
- if ( type2 == null )
- {
- return 1;
- }
- else
- {
- return type1.compareTo( type2 );
- }
- }
+ return ( short ) ( ( in[start] << 8 ) + ( in[start + 1] & 0xFF ) );
}
/**
* {@inheritDoc}
*/
- @Override
- public Comparator<Short> getComparator()
+ public Short deserialize( ByteBuffer buffer ) throws IOException
{
- return comparator;
+ return buffer.getShort();
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public Short deserialize( BufferHandler bufferHandler ) throws IOException
+ {
+ byte[] in = bufferHandler.read( 2 );
+
+ return deserialize( in );
}
}
Modified: labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/StringSerializer.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/StringSerializer.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/StringSerializer.java (original)
+++ labs/mavibot/trunk/mavibot/src/main/java/org/apache/mavibot/btree/serializer/StringSerializer.java Sun Apr 21 17:58:23 2013
@@ -23,7 +23,6 @@ package org.apache.mavibot.btree.seriali
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
-import java.util.Comparator;
import org.apache.mavibot.btree.comparator.StringComparator;
import org.apache.mavibot.btree.util.Strings;
@@ -34,18 +33,108 @@ import org.apache.mavibot.btree.util.Str
*
* @author <a href="mailto:labs@labs.apache.org">Mavibot labs Project</a>
*/
-public class StringSerializer implements ElementSerializer<String>
+public class StringSerializer extends AbstractElementSerializer<String>
{
- /** The associated comparator */
- private final Comparator<String> comparator;
-
-
/**
* Create a new instance of StringSerializer
*/
public StringSerializer()
{
- comparator = new StringComparator();
+ super( new StringComparator() );
+ }
+
+
+ /**
+ * A static method used to deserialize a String from a byte array.
+ * @param in The byte array containing the String
+ * @return A String
+ */
+ public static String deserialize( byte[] in )
+ {
+ return deserialize( in, 0 );
+ }
+
+
+ /**
+ * A static method used to deserialize a String from a byte array.
+ * @param in The byte array containing the String
+ * @return A String
+ */
+ public static String deserialize( byte[] in, int start )
+ {
+ int length = IntSerializer.deserialize( in, start );
+
+ if ( length == 0xFFFFFFFF )
+ {
+ return null;
+ }
+
+ if ( in.length < length + 4 + start )
+ {
+ throw new RuntimeException( "Cannot extract a String from a buffer with not enough bytes" );
+ }
+
+ return Strings.utf8ToString( in, start + 4, length );
+ }
+
+
+ /**
+ * Serialize a String. We store the length on 4 bytes, then the String
+ *
+ * @param buffer the Buffer that will contain the serialized value
+ * @param start the position in the buffer we will store the serialized String
+ * @param value the value to serialize
+ * @return The byte[] containing the serialized String
+ */
+ public static byte[] serialize( byte[] buffer, int start, String element )
+ {
+ int len = -1;
+
+ if ( element != null )
+ {
+ len = element.length();
+ }
+
+ switch ( len )
+ {
+ case 0:
+ buffer[start] = 0x00;
+ buffer[start + 1] = 0x00;
+ buffer[start + 2] = 0x00;
+ buffer[start + 3] = 0x00;
+
+ break;
+
+ case -1:
+ buffer[start] = ( byte ) 0xFF;
+ buffer[start + 1] = ( byte ) 0xFF;
+ buffer[start + 2] = ( byte ) 0xFF;
+ buffer[start + 3] = ( byte ) 0xFF;
+
+ break;
+
+ default:
+ try
+ {
+ byte[] strBytes = element.getBytes( "UTF-8" );
+
+ buffer = new byte[strBytes.length + 4];
+
+ System.arraycopy( strBytes, 0, buffer, 4, strBytes.length );
+
+ buffer[start] = ( byte ) ( strBytes.length >>> 24 );
+ buffer[start + 1] = ( byte ) ( strBytes.length >>> 16 );
+ buffer[start + 2] = ( byte ) ( strBytes.length >>> 8 );
+ buffer[start + 3] = ( byte ) ( strBytes.length );
+ }
+ catch ( UnsupportedEncodingException uee )
+ {
+ // if this happens something is really strange
+ throw new RuntimeException( uee );
+ }
+ }
+
+ return buffer;
}
@@ -192,14 +281,4 @@ public class StringSerializer implements
}
}
}
-
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Comparator<String> getComparator()
- {
- return comparator;
- }
}
Modified: labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeConfigurationTest.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeConfigurationTest.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeConfigurationTest.java (original)
+++ labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeConfigurationTest.java Sun Apr 21 17:58:23 2013
@@ -114,6 +114,7 @@ public class BTreeConfigurationTest
public void testConfigurationBasic() throws IOException, KeyNotFoundException
{
BTreeConfiguration<Integer, String> config = new BTreeConfiguration<Integer, String>();
+ config.setName( "basic" );
config.setPageSize( 32 );
config.setSerializers( new IntSerializer(), new StringSerializer() );
@@ -159,7 +160,7 @@ public class BTreeConfigurationTest
config.setSerializers( new IntSerializer(), new StringSerializer() );
config.setFilePath( parent );
- config.setFileName( "mavibot" );
+ config.setName( "mavibot" );
// Create the BTree
BTree<Integer, String> btree = new BTree<Integer, String>( config );
Modified: labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeFlushTest.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeFlushTest.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeFlushTest.java (original)
+++ labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/BTreeFlushTest.java Sun Apr 21 17:58:23 2013
@@ -215,17 +215,17 @@ public class BTreeFlushTest
// Create the file, it will be deleted on exit
File tempFile = File.createTempFile( "testFlush", null );
String path = tempFile.getParent();
- String fileName = "mavibot";
tempFile.delete();
- File journal = new File( path, fileName + BTree.JOURNAL_SUFFIX );
- File data = new File( path, fileName + BTree.DATA_SUFFIX );
+ BTree<Integer, String> btree = new BTree<Integer, String>( "test", path, new IntSerializer(), new StringSerializer() );
+ btree.setName( "flush" );
+ btree.setPageSize( 8 );
+
+ File journal = btree.getJournal();
+ File data = btree.getFile();
+
try
{
- BTree<Integer, String> btree = new BTree<Integer, String>( "test", path, fileName, new IntSerializer(),
- new StringSerializer() );
- btree.setPageSize( 8 );
-
// Inject the values
for ( int value : sortedValues )
{
@@ -244,8 +244,7 @@ public class BTreeFlushTest
assertEquals( 0, journal.length() );
// Load the data into a new tree
- BTree<Integer, String> btreeLoaded = new BTree<Integer, String>( "test", path, fileName,
- new IntSerializer(),
+ BTree<Integer, String> btreeLoaded = new BTree<Integer, String>( "test", path, new IntSerializer(),
new StringSerializer() );
btree.setPageSize( 8 );
@@ -288,7 +287,6 @@ public class BTreeFlushTest
BTree<Long, String> btree = new BTree<Long, String>(
"test",
dataFile.getParent(),
- dataFile.getName(),
new LongSerializer(),
new StringSerializer() );
btree.setPageSize( 32 );
Modified: labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java (original)
+++ labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/InMemoryBTreeTest.java Sun Apr 21 17:58:23 2013
@@ -625,7 +625,7 @@ public class InMemoryBTreeTest
// Browse starting at position 10
int pos = 10;
- Cursor<Integer, String> cursor = btree.browse( sortedValues[pos] );
+ Cursor<Integer, String> cursor = btree.browseFrom( sortedValues[pos] );
while ( cursor.hasNext() )
{
@@ -641,7 +641,7 @@ public class InMemoryBTreeTest
cursor.close();
// Now, start on a non existing key (7)
- cursor = btree.browse( 7 );
+ cursor = btree.browseFrom( 7 );
// We should start reading values superior to 7, so value 8 at position 6 in the array
pos = 6;
@@ -709,7 +709,7 @@ public class InMemoryBTreeTest
// Browse starting at position 10
int pos = 10;
- Cursor<Integer, String> cursor = btree.browse( sortedValues[pos] );
+ Cursor<Integer, String> cursor = btree.browseFrom( sortedValues[pos] );
while ( cursor.hasPrev() )
{
@@ -726,7 +726,7 @@ public class InMemoryBTreeTest
cursor.close();
// Now, start on a non existing key (7)
- cursor = btree.browse( 7 );
+ cursor = btree.browseFrom( 7 );
// We should start reading values superior to 7, so value 8 at position 6 in the array
pos = 6;
@@ -793,7 +793,7 @@ public class InMemoryBTreeTest
}
// Start to browse in the middle
- Cursor<Integer, String> cursor = btree.browse( 8 );
+ Cursor<Integer, String> cursor = btree.browseFrom( 8 );
assertTrue( cursor.hasNext() );
@@ -812,6 +812,8 @@ public class InMemoryBTreeTest
// get 12 (now, we must have gone through at least 2 pages)
assertEquals( 12, cursor.next().getKey().intValue() );
+ assertTrue( cursor.hasPrev() );
+
// Lets go backward. We should get the same value, as the next() call have incremented the counter
assertEquals( 12, cursor.prev().getKey().intValue() );
@@ -904,11 +906,11 @@ public class InMemoryBTreeTest
for ( int i = 1; i < 21; i++ )
{
- assertTrue( btree.exist( 5 ) );
+ assertTrue( btree.hasKey( 5 ) );
}
- assertFalse( btree.exist( 0 ) );
- assertFalse( btree.exist( 21 ) );
+ assertFalse( btree.hasKey( 0 ) );
+ assertFalse( btree.hasKey( 21 ) );
}
@@ -1002,6 +1004,34 @@ public class InMemoryBTreeTest
}
+ /**
+ * Test the browse method with a non existing key
+ * @throws Exception
+ */
+ @Test
+ public void testBrowseNonExistingKey() throws Exception
+ {
+ // Create a BTree with pages containing 8 elements
+ BTree<Integer, String> btree = new BTree<Integer, String>( "test", new IntSerializer(), new StringSerializer() );
+ btree.setPageSize( 8 );
+ for ( int i = 0; i < 11; i++ )
+ {
+ btree.insert( i, String.valueOf( i ) );
+ }
+
+ for ( int i = 0; i < 11; i++ )
+ {
+ assertNotNull( btree.get( i ) );
+ }
+
+ assertTrue( btree.hasKey( 8 ) );
+ assertFalse( btree.hasKey( 11 ) );
+
+ Cursor<Integer, String> cursor = btree.browseFrom( 11 );
+ assertFalse( cursor.hasNext() );
+ }
+
+
private Page<Integer, String> createLeaf( BTree<Integer, String> btree, long revision,
Tuple<Integer, String>... tuples )
{
@@ -1679,7 +1709,7 @@ public class InMemoryBTreeTest
// Adding an element with a null value
btree.insert( 100, null );
- assertTrue( btree.exist( 100 ) );
+ assertTrue( btree.hasKey( 100 ) );
try
{
@@ -1804,4 +1834,103 @@ public class InMemoryBTreeTest
// expected
}
}
+
+ /**
+ * Test a browse forward and backward
+ */
+ @Test
+ public void testBrowseForwardBackwardExtremes() throws Exception
+ {
+ // Create a BTree with pages containing 4 elements
+ BTree<Integer, String> btree = new BTree<Integer, String>( "test", new IntSerializer(), new StringSerializer() );
+ btree.setPageSize( 4 );
+
+ for ( int i = 8; i < 13; i++ )
+ {
+ String strValue = "V" + i;
+ btree.insert( i, strValue );
+ }
+
+ // Start to browse in the middle
+ Cursor<Integer, String> cursor = btree.browseFrom( 8 );
+
+ assertTrue( cursor.hasNext() );
+
+ // Get 8
+ assertEquals( 8, cursor.next().getKey().intValue() );
+
+ // get 9
+ assertEquals( 9, cursor.next().getKey().intValue() );
+
+ // get 10
+ assertEquals( 10, cursor.next().getKey().intValue() );
+
+ // get 11
+ assertEquals( 11, cursor.next().getKey().intValue() );
+
+ // get 12 (now, we must have gone through at least 2 pages)
+ assertEquals( 12, cursor.next().getKey().intValue() );
+
+ assertFalse( cursor.hasNext() );
+ assertTrue( cursor.hasPrev() );
+
+ // Lets go backward. We should get the same value, as the next() call have incremented the counter
+ assertEquals( 12, cursor.prev().getKey().intValue() );
+
+ // Get 11
+ assertEquals( 11, cursor.prev().getKey().intValue() );
+
+ // Get 10
+ assertEquals( 10, cursor.prev().getKey().intValue() );
+
+ // Get 9
+ assertEquals( 9, cursor.prev().getKey().intValue() );
+
+ // Get 8
+ assertEquals( 8, cursor.prev().getKey().intValue() );
+
+ assertFalse(cursor.hasPrev());
+ assertTrue(cursor.hasNext());
+
+ cursor.close();
+ btree.close();
+ }
+
+ @Test
+ public void testNextAfterPrev() throws Exception
+ {
+ IntSerializer serializer = new IntSerializer();
+
+ BTreeConfiguration<Integer, Integer> config = new BTreeConfiguration<Integer, Integer>();
+ config.setName( "master" );
+ config.setPageSize( 4 );
+ config.setSerializers( serializer, serializer );
+ BTree<Integer, Integer> btree = new BTree<Integer, Integer>( config );
+
+ int i = 7;
+ for ( int k=0; k < i; k++ )
+ {
+ btree.insert( k, k );
+ }
+
+ // 3 is the last element of the first leaf
+ Cursor<Integer, Integer> cursor = btree.browseFrom(4);
+
+ assertTrue( cursor.hasNext() );
+ Tuple<Integer, Integer> tuple = cursor.next();
+ assertEquals( Integer.valueOf( 4 ), tuple.getKey() );
+ assertEquals( Integer.valueOf( 4 ), tuple.getValue() );
+
+ assertTrue( cursor.hasPrev() );
+ tuple = cursor.prev();
+ assertEquals( Integer.valueOf( 4 ), tuple.getKey() );
+ assertEquals( Integer.valueOf( 4 ), tuple.getValue() );
+
+ assertTrue( cursor.hasNext() );
+ tuple = cursor.next();
+ assertEquals( Integer.valueOf( 4 ), tuple.getKey() );
+ assertEquals( Integer.valueOf( 4 ), tuple.getValue() );
+ cursor.close();
+ }
+
}
Modified: labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java
URL: http://svn.apache.org/viewvc/labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java?rev=1470325&r1=1470324&r2=1470325&view=diff
==============================================================================
--- labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java (original)
+++ labs/mavibot/trunk/mavibot/src/test/java/org/apache/mavibot/btree/LeafTest.java Sun Apr 21 17:58:23 2013
@@ -83,7 +83,7 @@ public class LeafTest
{
Leaf<Long, String> leaf = new Leaf<Long, String>( btree );
- DeleteResult<Long, String> result = leaf.delete( 1L, 1L, null, -1 );
+ DeleteResult<Long, String> result = leaf.delete( 1L, 1L, null, null, -1 );
assertEquals( NotPresentResult.NOT_PRESENT, result );
}
@@ -102,7 +102,7 @@ public class LeafTest
leaf = insert( leaf, 3L, "v3" );
leaf = insert( leaf, 4L, "v4" );
- DeleteResult<Long, String> result = leaf.delete( 2L, 5L, null, -1 );
+ DeleteResult<Long, String> result = leaf.delete( 2L, 5L, null, null, -1 );
assertEquals( NotPresentResult.NOT_PRESENT, result );
}
@@ -121,7 +121,7 @@ public class LeafTest
leaf = insert( leaf, 3L, "v3" );
leaf = insert( leaf, 4L, "v4" );
- DeleteResult<Long, String> result = leaf.delete( 4L, 3L, null, -1 );
+ DeleteResult<Long, String> result = leaf.delete( 4L, 3L, null, null, -1 );
assertTrue( result instanceof RemoveResult );
@@ -168,7 +168,7 @@ public class LeafTest
leaf = insert( leaf, 3L, "v3" );
leaf = insert( leaf, 4L, "v4" );
- DeleteResult<Long, String> result = leaf.delete( 4L, 1L, null, -1 );
+ DeleteResult<Long, String> result = leaf.delete( 4L, 1L, null, null, -1 );
assertTrue( result instanceof RemoveResult );
@@ -248,7 +248,7 @@ public class LeafTest
parent.keys[1] = 10L;
// Now, delete the element from the target page
- DeleteResult<Long, String> result = target.delete( 2L, 7L, parent, 1 );
+ DeleteResult<Long, String> result = target.delete( 2L, 7L, null, parent, 1 );
assertTrue( result instanceof BorrowedFromLeftResult );
@@ -321,7 +321,7 @@ public class LeafTest
parent.keys[1] = 10L;
// Now, delete the element from the target page
- DeleteResult<Long, String> result = target.delete( 2L, 7L, parent, 1 );
+ DeleteResult<Long, String> result = target.delete( 2L, 7L, null, parent, 1 );
assertTrue( result instanceof BorrowedFromRightResult );
@@ -394,7 +394,7 @@ public class LeafTest
parent.keys[1] = 9L;
// Now, delete the element from the target page
- DeleteResult<Long, String> result = target.delete( 2L, 7L, parent, 1 );
+ DeleteResult<Long, String> result = target.delete( 2L, 7L, null, parent, 1 );
assertTrue( result instanceof MergedWithSiblingResult );
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org