org.exist.numbering
Class DLNBase

java.lang.Object
  extended by org.exist.numbering.DLNBase
Direct Known Subclasses:
DLN

public class DLNBase
extends Object

Base class representing a node id in the form of a dynamic level number (DLN). See DLN. DLNBase handles the efficient binary encoding of node ids. Level values are stored consecutively, using a fixed prefix free encoding. The number of units to be used for encoding a single level value is dynamically adjusted. We start with one unit and use its n - 1 lower bits. If the number exceeds the lower bits, we add another unit and set the highest bit to 1. This process is repeated for larger numbers. As a result, the first 1 bits of a level id indicate the number of fixed-size units used for encoding a level id. We thus don't need separator bits between the units themselves.

Author:
wolf

Field Summary
static int[] BIT_MASK
           
static int BITS_PER_UNIT
          The default number of bits used per fixed size unit.
 
Constructor Summary
DLNBase()
           
DLNBase(byte prefixLen, DLNBase previous, short bitCnt, VariableByteInput is)
           
DLNBase(DLNBase dln)
           
DLNBase(int units, byte[] data, int startOffset)
           
DLNBase(short bitCnt, VariableByteInput is)
           
 
Method Summary
 void addLevelId(int levelId, boolean isSubLevel)
          Adds a new level to the node id, using levelId as initial value.
 int compareBits(DLNBase other, int bitCount)
           
 String debug()
           
 void decrementLevelId()
           
 boolean equals(DLNBase other)
           
static int getLengthInBytes(int units, byte[] data, int startOffset)
           
 int getLevelCount(int startOffset)
          Returns the number of level in this id, which corresponds to the depth at which the node occurs within the node tree.
 int getLevelId(int startBit)
          Returns the id starting at offset.
 int[] getLevelIds()
          Return all level ids converted to int.
 int getSubLevelCount(int startOffset)
          Returns the number of sub-levels in the id starting at startOffset.
 void incrementLevelId()
          Increments the last level id by one.
 boolean isLevelSeparator(int index)
           
 int lastLevelOffset()
          Find the last level in the id and return its offset.
 void serialize(byte[] data, int offset)
           
 void setLevelId(int offset, int levelId)
          Set the level id which starts at offset to the given id value.
 int size()
          Returns the size of this id by counting the bytes used to encode it.
 boolean startsWith(DLNBase other)
          Checks if the current DLN starts with the same bit sequence as other.
 String toBitString()
           
static String toBitString(byte b)
          Returns a string showing the bit representation of the given byte.
 String toString()
           
 int units()
          Returns the number of units currently used to encode the id.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

BITS_PER_UNIT

public static final int BITS_PER_UNIT
The default number of bits used per fixed size unit.

See Also:
Constant Field Values

BIT_MASK

public static final int[] BIT_MASK
Constructor Detail

DLNBase

public DLNBase()

DLNBase

public DLNBase(DLNBase dln)

DLNBase

public DLNBase(int units,
               byte[] data,
               int startOffset)

DLNBase

public DLNBase(short bitCnt,
               VariableByteInput is)
        throws IOException
Throws:
IOException

DLNBase

public DLNBase(byte prefixLen,
               DLNBase previous,
               short bitCnt,
               VariableByteInput is)
        throws IOException
Throws:
IOException
Method Detail

setLevelId

public void setLevelId(int offset,
                       int levelId)
Set the level id which starts at offset to the given id value.

Parameters:
offset -
levelId -

addLevelId

public void addLevelId(int levelId,
                       boolean isSubLevel)
Adds a new level to the node id, using levelId as initial value.

Parameters:
levelId - initial value

incrementLevelId

public void incrementLevelId()
Increments the last level id by one.


decrementLevelId

public void decrementLevelId()

getLevelId

public int getLevelId(int startBit)
Returns the id starting at offset.

Parameters:
startBit -
Returns:
the level id

units

public int units()
Returns the number of units currently used to encode the id. The size of a single unit is given by BITS_PER_UNIT.

Returns:
the number of units

size

public int size()
Returns the size of this id by counting the bytes used to encode it.

Returns:
the size in bytes

isLevelSeparator

public boolean isLevelSeparator(int index)

getLevelCount

public int getLevelCount(int startOffset)
Returns the number of level in this id, which corresponds to the depth at which the node occurs within the node tree.

Returns:
the number of levels in this id

getSubLevelCount

public int getSubLevelCount(int startOffset)
Returns the number of sub-levels in the id starting at startOffset. This is required to determine where a node can be inserted.

Parameters:
startOffset -
Returns:
number of sub-levels

getLevelIds

public int[] getLevelIds()
Return all level ids converted to int.

Returns:
all level ids in this node id.

lastLevelOffset

public int lastLevelOffset()
Find the last level in the id and return its offset.

Returns:
start-offset of the last level id.

serialize

public void serialize(byte[] data,
                      int offset)

getLengthInBytes

public static int getLengthInBytes(int units,
                                   byte[] data,
                                   int startOffset)

equals

public boolean equals(DLNBase other)

compareBits

public int compareBits(DLNBase other,
                       int bitCount)

startsWith

public boolean startsWith(DLNBase other)
Checks if the current DLN starts with the same bit sequence as other. This is used to test ancestor-descendant relationships.

Parameters:
other -

debug

public String debug()

toString

public String toString()
Overrides:
toString in class Object

toBitString

public String toBitString()

toBitString

public static final String toBitString(byte b)
Returns a string showing the bit representation of the given byte.

Parameters:
b - the byte to display
Returns:
string representation


Copyright (C) Wolfgang Meier. All rights reserved.