Fennel: LbmSegmentReader Class Reference (original) (raw)

LbmSegmentReader provides the interace necessary to read bit segments. More...

#include <[LbmSegmentReader.h](LbmSegmentReader%5F8h-source.html)>

Inheritance diagram for LbmSegmentReader:

List of all members.

Public Member Functions
void init (SharedExecStreamBufAccessor &pInAccessorInit, TupleData &bitmapSegTupleInit)
Initializes reader to start reading bit segments from a specified input stream.
void init (SharedExecStreamBufAccessor &pInAccessorInit, TupleData &bitmapSegTupleInit, bool setBitmapInit, boost::dynamic_bitset<> *pBitmapInit)
Initializes reader to start reading bit segments from a specified input stream, optionally keeping track of the bits read.
void init (SharedLbmTupleReader &pTupleReaderInit, TupleData &bitmapSegTupleInit)
Initializes reader to start reading bit segments from a specified tuple reader.
void init (SharedLbmTupleReader &pTupleReaderInit, TupleData &bitmapSegTupleInit, bool setBitmapInit, boost::dynamic_bitset<> *pBitmapInit)
Initializes reader to start reading bit segments from a specified tuple reader, optionally keeping track of the bits read.
ExecStreamResult advanceToRid (LcsRid rid)
Advances within a segment to at least the specified rid, reading in new segments (as needed) to satisfy the request.
ExecStreamResult advanceToByte (LbmByteNumber byteNum)
Advances within a bit segment to at least the specified byte number, reading in new segments (as needed) to satisfy the request.
void readCurrentByteSegment (LcsRid &startRid, PBuffer &byteSeg, uint &len)
Reads the current byte segment, based on current position.
bool getTupleChange ()
Reports whether a new tuple was read.
void resetChangeListener ()
Resets the tuple change attribute to false.
LcsRid getMaxRidSet ()
Retrieves the maximum rid that has been read by this reader since it was initialized, provided the reader has been set to keep track of rids read.
uint getZeroLengthByteCount (uint8_t segDescByte)
Get the number of bytes to store the length of zero bytes.
LcsRid getStartRID ()
**Returns:**startRID of this bitmap segment
Static Public Member Functions
static LcsRid roundToByteBoundary (LcsRid rid)
Rounds a rid value down to the nearest byte boundary.
static bool setSegLength (uint8_t &segDescByte, uint segLen)
Sets the length descriptor for a new segment with zero trailing zeros.
static bool adjustSegLength (uint8_t &segDescByte, uint segLen)
Set segment length in an existing descriptor with the new segment length.
static uint getSegLength (uint8_t segDescByte)
Get the segment length encoded in SegmentDescriptor.
Static Public Attributes
static const uint LbmOneByteSize = 8
One byte in the bitmap encodes 8 RIDs.
static const uint LbmOneByteSizeBitShift = 3
static const LcsRidPrimitive LbmOneByteSizeBitMask
Protected Member Functions
ExecStreamResult readBitmapSegTuple ()
Reads a bitmap segment tuple from the input stream and extracts the starting rid, the descriptor, and bitmap fields.
void advanceSegment ()
Advances byte segment offset and segment descriptor pointers to the next segment in a bitmap segment.
uint computeSpaceForZeroBytes (uint nZeroBytes)
Computes the number of bytes required to store a specified number of zero bytes.
uint computeSegLength (PBuffer segDesc)
Computes the length of the remaining segments in the current bitmap segment, starting at the one specified by the input segment descriptor.
uint computeSegDescLength (PBuffer segDesc)
Computes the length of the remaining segment descriptors in the current bitmap segment, starting at the one specified by the input segment descriptor.
uint countSegments ()
Returns the number of segments in an entry.
Static Protected Member Functions
static uint byteArray2Value (PBuffer array, uint arraySize)
Get value stored in a byte array.
static uint value2ByteArray (uint value, PBuffer array, uint arraySize)
Store value in a byte array.
static void readSegDescAndAdvance (PBuffer &pSegDesc, uint &bmSegLen, uint &zeroBytes)
Decodes the lengths stored in the descriptor for a segment, based on where the segment descriptor is currently pointing, and advances the segment descriptor to the next descriptor.
Protected Attributes
SharedLbmTupleReader pTupleReader
Input tuple reader.
uint byteSegLen
Length of the current byte segment.
LbmByteNumber byteSegOffset
Byte offset representing current position in segment.
TupleData * pBitmapSegTuple
Pointer to tuple data containing input bitmap segment.
uint iSrid
Index of the bitmap columns.
uint iSegmentDesc
uint iSegments
uint zeroBytes
Number of trailing zero bytes in the current segment.
uint8_t singleton
Used to construct singleton bitmap.
bool tupleChange
Detects when a new tuple is read.
LcsRid startRID
Starting rid in the bitmap segment (if singleton, startRID == RID column in entryTuple).
PBuffer pSegDescStart
Increment forward from pSegDescStart.
PBuffer pSegDescEnd
PBuffer pSegStart
Decrement backward from pSegStart.
PBuffer pSegEnd
Static Protected Attributes
static const uint LbmHalfByteSize = 4
Use half of a byte to encode the segment length, or the zero bytes length.
static const uint8_t LbmSegLengthMask = 0xf0
The upper 4 bits of Segment Descriptor byte is used to store the length of the corresponding segment.
static const uint8_t LbmZeroLengthMask = 0x0f
The lower 4 bits of Segment Descriptor byte is used to store the length of the "gap" following the corresponding segment(till the next segment or the next LbmEntry).
static const uint LbmZeroLengthCompact = 12
If the length of zero bytes(a byte composed of 8 bits of 0s) is less than 12, the length can be stored within the segment descriptor.
static const uint LbmZeroLengthExtended
Additional bytes(maximumn is 3 bytes) in which the length is stored.
static const uint LbmMaxSegSize = 16
Maximum size(in bytes) for a bitmap segment.
Private Member Functions
ExecStreamResult readSegment ()
Reads a bitmap segment from the input stream.
void initCommon ()
Common initialization method, called by all other init methods.
Private Attributes
bool firstReadDone
True if initial read has been done.

Detailed Description

LbmSegmentReader provides the interace necessary to read bit segments.

Segments are positioned to a specified byte number (or rid that is converted to a byte). Only segments that contain set bit values are actually read, so the position specified is actually a lower bound. Once positioned, the current byte can be read.

Version:

Id

//open/dev/fennel/lucidera/bitmap/LbmSegmentReader.h#12

Definition at line 41 of file LbmSegmentReader.h.


Member Function Documentation

| void LbmSegmentReader::initCommon | ( | | ) | [private] | | --------------------------------- | - | | - | ----------- |

Initializes reader to start reading bit segments from a specified input stream, optionally keeping track of the bits read.

Parameters:

pInAccessorInit input stream accessor
bitmapSegTupleInit tuple data for reading segments
setBitmapInit if true, keep track of bits read
pBitmapInit pointer to the bitmap to be set if the setBitmapInit parameter is true

Reimplemented from LbmSegmentReaderBase.

Definition at line 35 of file LbmSegmentReader.cpp.

References LbmSegmentReaderBase::init(), and initCommon().

Initializes reader to start reading bit segments from a specified tuple reader.

Parameters:

pTupleReaderInit input tuple reader
bitmapSegTupleInit tuple data for reading segments

Reimplemented from LbmSegmentReaderBase.

Definition at line 49 of file LbmSegmentReader.cpp.

References init().

00052 { 00053 init(pTupleReaderInit, bitmapSegTuple, false, NULL); 00054 }

void LbmSegmentReader::init ( SharedLbmTupleReader & pTupleReaderInit,
TupleData & bitmapSegTupleInit,
bool setBitmapInit,
boost::dynamic_bitset<> * pBitmapInit
)

Initializes reader to start reading bit segments from a specified tuple reader, optionally keeping track of the bits read.

Parameters:

pTupleReaderInit input tuple reader
bitmapSegTupleInit tuple data for reading segments
setBitmapInit if true, keep track of bits read
pBitmapInit pointer to the bitmap to be set if the setBitmapInit parameter is true

Reimplemented from LbmSegmentReaderBase.

Definition at line 56 of file LbmSegmentReader.cpp.

References LbmSegmentReaderBase::init(), and initCommon().

Advances within a bit segment to at least the specified byte number, reading in new segments (as needed) to satisfy the request.

Reading byte number "x" is equivalent to retrieving rid >= "x * 8".

Parameters:

byteNum desired byte number

Returns:

EXECRC_YIELD if successfully read a bitmap segment

Definition at line 93 of file LbmSegmentReader.cpp.

References LbmSegmentReaderBase::advanceSegment(), LbmSegmentReaderBase::byteSegLen, LbmSegmentReaderBase::byteSegOffset, EXECRC_YIELD, firstReadDone, opaqueToInt(), LbmSegment::pSegDescEnd, LbmSegment::pSegDescStart, LbmSegment::pSegStart, and readSegment().

Referenced by advanceToRid(), and readSegment().

void LbmSegmentReader::readCurrentByteSegment ( LcsRid & startRid,
PBuffer & byteSeg,
uint & len
)

| ExecStreamResult LbmSegmentReaderBase::readBitmapSegTuple | ( | | ) | [protected, inherited] | | ---------------------------------------------------------------------------------------------------------------------- | - | | - | ------------------------ |

Reads a bitmap segment tuple from the input stream and extracts the starting rid, the descriptor, and bitmap fields.

Returns:

EXECRC_YIELD if read was successful

Definition at line 81 of file LbmSegmentReaderBase.cpp.

References LbmSegmentReaderBase::byteSegLen, LbmSegmentReaderBase::byteSegOffset, EXECRC_YIELD, LbmSegmentReaderBase::iSegmentDesc, LbmSegmentReaderBase::iSegments, LbmSegmentReaderBase::iSrid, LbmSegment::LbmOneByteSize, LbmSegmentReaderBase::maxRidSet, opaqueToInt(), LbmSegmentReaderBase::pBitmap, LbmSegmentReaderBase::pBitmapSegTuple, LbmSegment::pSegDescEnd, LbmSegment::pSegDescStart, LbmSegment::pSegStart, LbmSegmentReaderBase::pTupleReader, ridToByteNumber(), LbmSegmentReaderBase::setBitmap, LbmSegmentReaderBase::setBitsRead(), LbmSegmentReaderBase::singleton, LbmSegment::startRID, LbmSegmentReaderBase::tupleChange, and LbmSegmentReaderBase::zeroBytes.

Referenced by readSegment(), and LbmSeqSegmentReader::readSegmentAndAdvance().

| void LbmSegmentReaderBase::advanceSegment | ( | | ) | [protected, inherited] | | ----------------------------------------- | - | | - | ------------------------ |

| bool LbmSegmentReaderBase::getTupleChange | ( | | ) | [inherited] | | ----------------------------------------- | - | | - | ------------- |

| void LbmSegmentReaderBase::resetChangeListener | ( | | ) | [inherited] | | ---------------------------------------------- | - | | - | ------------- |

| LcsRid LbmSegmentReaderBase::getMaxRidSet | ( | | ) | [inherited] | | ----------------------------------------- | - | | - | ------------- |

Retrieves the maximum rid that has been read by this reader since it was initialized, provided the reader has been set to keep track of rids read.

Returns:

max rid read; 0 if the reader is not keeping track of rids read

Definition at line 187 of file LbmSegmentReaderBase.cpp.

References LbmSegmentReaderBase::maxRidSet.

uint LbmSegment::byteArray2Value ( PBuffer array,
uint arraySize
) [static, protected, inherited]
uint LbmSegment::value2ByteArray ( uint value,
PBuffer array,
uint arraySize
) [static, protected, inherited]

Store value in a byte array.

The least significant bytes in the value is stored at the first location in the array.

Parameters:

value
array a byte array
arraySize size of the array(number of bytes)

Returns:

number of bytes used to store the value; 0 if the value requires more than arraySize bytes to store.

Definition at line 38 of file LbmSegment.cpp.

References LbmSegment::LbmOneByteSize.

Referenced by LbmEntry::setZeroLength().

00039 { 00040 assert(value != 0); 00041 00042 uint size = 0; 00043 00044 while (value > 0 && size < arraySize) { 00045 array[size] = (uint8_t)(value & 0xff); 00046 value = value >> LbmOneByteSize; 00047 size ++; 00048 } 00049
00050 00051 00052 00053 if (value > 0) { 00054 size = 0; 00055 } 00056 00057 return size; 00058 }

uint LbmSegment::computeSpaceForZeroBytes ( uint nZeroBytes ) [protected, inherited]
void LbmSegment::readSegDescAndAdvance ( PBuffer & pSegDesc,
uint & bmSegLen,
uint & zeroBytes
) [static, protected, inherited]

Decodes the lengths stored in the descriptor for a segment, based on where the segment descriptor is currently pointing, and advances the segment descriptor to the next descriptor.

Parameters:

pSegDesc pointer to segment descriptor
bmSegLen returns length of bitmap segment
zeroBytes returns number of trailing zeros in this segment

segment

Definition at line 75 of file LbmSegment.cpp.

References LbmSegment::byteArray2Value(), LbmSegment::LbmHalfByteSize, LbmSegment::LbmZeroLengthCompact, and LbmSegment::LbmZeroLengthMask.

Referenced by LbmSegmentReaderBase::advanceSegment(), LbmSegment::computeSegDescLength(), LbmSegment::computeSegLength(), LbmEntry::containsRid(), LbmSegment::countSegments(), LbmEntry::dumpSeg(), LbmEntry::dumpSegRID(), LbmEntry::generateSegRIDs(), LbmEntry::spliceSingleton(), and LbmEntry::splitEntry().

uint LbmSegment::computeSegLength ( PBuffer segDesc ) [protected, inherited]
uint LbmSegment::computeSegDescLength ( PBuffer segDesc ) [protected, inherited]

| uint LbmSegment::countSegments | ( | | ) | [protected, inherited] | | ------------------------------------------------------------------------------------------- | - | | - | ------------------------ |

LcsRid LbmSegment::roundToByteBoundary ( LcsRid rid ) [inline, static, inherited]

Rounds a rid value down to the nearest byte boundary.

Parameters:

Returns:

rounded rid value

Definition at line 241 of file LbmSegment.h.

References LbmSegment::LbmOneByteSizeBitMask, and opaqueToInt().

Referenced by LbmRidReaderBase::advanceToRid(), LbmEntry::closeCurrentSegment(), LbmEntryTest::compareExpected(), LbmSplicerExecStream::findBetterEntry(), LbmSplicerExecStream::findBTreeEntry(), LbmEntry::mergeEntry(), LbmEntry::openNewSegment(), LbmSplicerExecStream::ridOverlaps(), LbmRidReaderBase::searchForNextRid(), LbmEntry::setRIDAdjacentSegByte(), LbmEntry::singleton2Bitmap(), LbmEntryTest::testldb35(), and LbmEntryTest::testZeroBytes().

bool LbmSegment::setSegLength ( uint8_t & segDescByte,
uint segLen
) [inline, static, inherited]
bool LbmSegment::adjustSegLength ( uint8_t & segDescByte,
uint segLen
) [inline, static, inherited]
uint LbmSegment::getSegLength ( uint8_t segDescByte ) [inline, static, inherited]
uint LbmSegment::getZeroLengthByteCount ( uint8_t segDescByte ) [inline, inherited]

| LcsRid LbmSegment::getStartRID | ( | | ) | [inline, inherited] | | ------------------------------ | - | | - | --------------------- |


Member Data Documentation

Starting rid in the bitmap segment (if singleton, startRID == RID column in entryTuple).

Definition at line 42 of file LbmSegment.h.

Referenced by LbmEntry::adjustEntry(), LbmEntry::containsRid(), LbmSeqSegmentReader::getSrid(), LbmSegment::getStartRID(), LbmEntry::growEntry(), LbmEntry::inRange(), LbmEntry::mergeEntry(), LbmEntry::mergeIntoSplitEntry(), LbmEntry::openLastSegment(), LbmEntry::produceEntryTuple(), LbmSegmentReaderBase::readBitmapSegTuple(), LbmEntry::setEntryTuple(), LbmEntry::singleton2Bitmap(), LbmEntry::spliceSingleton(), and LbmEntry::splitEntry().

Increment forward from pSegDescStart.

Definition at line 47 of file LbmSegment.h.

Referenced by LbmSegmentReaderBase::advanceSegment(), advanceToByte(), LbmEntry::containsRid(), LbmSegment::countSegments(), LbmEntry::getRowCount(), LbmSegmentReaderBase::init(), LbmEntry::isSingleBitmap(), LbmEntry::LbmEntry(), LbmEntry::mergeIntoSplitEntry(), LbmEntry::produceEntryTuple(), LbmSegmentReaderBase::readBitmapSegTuple(), readSegment(), LbmSeqSegmentReader::readSegmentAndAdvance(), LbmEntry::setEntryTuple(), LbmEntry::singleton2Bitmap(), LbmEntry::spliceSingleton(), LbmEntry::splitEntry(), and LbmEntry::toString().

Definition at line 48 of file LbmSegment.h.

Referenced by LbmEntry::addNewAdjacentSegment(), LbmEntry::addNewMiddleSegment(), LbmEntry::addSegDesc(), advanceToByte(), LbmEntry::closeCurrentSegment(), LbmSegment::computeSegDescLength(), LbmSegment::computeSegLength(), LbmEntry::containsRid(), LbmEntry::copyToMergeBuffer(), LbmSegment::countSegments(), LbmEntry::getRowCount(), LbmSegmentReaderBase::init(), LbmEntry::mergeEntry(), LbmEntry::mergeIntoSplitEntry(), LbmEntry::openLastSegment(), LbmEntry::openNewSegment(), LbmEntry::produceEntryTuple(), LbmSegmentReaderBase::readBitmapSegTuple(), LbmSeqSegmentReader::readSegmentAndAdvance(), LbmEntry::setEntryTuple(), LbmEntry::spliceSingleton(), LbmEntry::splitEntry(), and LbmEntry::toString().

Decrement backward from pSegStart.

Definition at line 53 of file LbmSegment.h.

Referenced by LbmEntry::adjustEntry(), LbmSegmentReaderBase::advanceSegment(), advanceToByte(), LbmEntry::containsRid(), LbmSegmentReaderBase::init(), LbmEntry::isSingleton(), LbmEntry::LbmEntry(), LbmEntry::mergeEntry(), LbmEntry::mergeIntoSplitEntry(), LbmEntry::openNewSegment(), LbmEntry::produceEntryTuple(), LbmSegmentReaderBase::readBitmapSegTuple(), readCurrentByteSegment(), LbmSeqSegmentReader::readSegmentAndAdvance(), LbmEntry::setEntryTuple(), LbmEntry::setRIDAdjacentSegByte(), LbmEntry::spliceSingleton(), LbmEntry::splitEntry(), and LbmEntry::toString().

Definition at line 54 of file LbmSegment.h.

Referenced by LbmEntry::addNewRid(), LbmEntry::adjustEntry(), LbmEntry::containsRid(), LbmEntry::copyToMergeBuffer(), LbmEntry::isSingleton(), LbmEntry::mergeEntry(), LbmEntry::mergeIntoSplitEntry(), LbmEntry::openLastSegment(), LbmEntry::openNewSegment(), LbmEntry::produceEntryTuple(), LbmEntry::setEntryTuple(), LbmEntry::setRIDAdjacentSegByte(), LbmEntry::splitEntry(), and LbmEntry::toString().

One byte in the bitmap encodes 8 RIDs.

Definition at line 235 of file LbmSegment.h.

Referenced by LbmEntry::addNewAdjacentSegment(), LbmEntry::addNewMiddleSegment(), LbmEntry::addNewRid(), LbmEntry::addNewSegment(), LbmSegmentWriter::addSegment(), LbmEntry::adjustEntry(), LbmRidReaderBase::advanceToRid(), LbmSegment::byteArray2Value(), LbmMinusExecStream::canSkipMinus(), LbmEntry::closeCurrentSegment(), LbmUnionExecStream::computeRidLimit(), LbmSegment::computeSpaceForZeroBytes(), LbmEntry::containsRid(), LbmEntry::dumpSegRID(), LbmMinusExecStream::execute(), LbmSplicerExecStream::findBetterEntry(), LbmEntryTest::generateBitmaps(), LbmEntryTest::generateCompressedBitmaps(), LbmEntry::generateSegRIDs(), LbmEntryTest::generateSingleBitmaps(), LbmEntry::getCompressedRowCount(), LbmEntry::getRowCount(), LbmIntersectExecStream::intersectSegments(), LbmMinusExecStream::minusSegments(), LbmEntry::openLastSegment(), LbmSegmentReaderBase::readBitmapSegTuple(), LbmSplicerExecStream::ridOverlaps(), LbmRidReaderBase::searchForNextRid(), LbmEntry::segmentContainsRid(), LbmSegmentReaderBase::setBitsRead(), LbmEntry::setEntryTuple(), LbmEntry::setRID(), LbmEntry::setRIDAdjacentSegByte(), LbmEntry::setRIDSegByte(), LbmEntry::spliceSingleton(), LbmEntry::splitEntry(), LbmEntryTest::testldb35(), LbmEntryTest::testler5920(), LbmEntryTest::testZeroBytes(), and LbmSegment::value2ByteArray().


The documentation for this class was generated from the following files:


Generated on Mon Jun 22 04:00:35 2009 for Fennel by doxygen 1.5.1