Fennel: BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor > Class Template Reference (original) (raw)

BTreeKeyedNodeAccessor is a template for implementing some of the virtual methods in the BTreeNodeAccessor interface. More...

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

List of all members.

Public Member Functions
virtual void accessTupleInline (BTreeNode const &node, uint iEntry)
virtual void accessTuple (BTreeNode const &node, uint iEntry)
virtual void unmarshalKey (TupleData &keyData)
virtual uint binarySearch (BTreeNode const &node, TupleDescriptor const &keyDescriptor, TupleData const &searchKey, DuplicateSeek dupSeek, bool leastUpper, TupleData &scratchKey, bool &found)
virtual int compareFirstKey (BTreeNode const &node, TupleDescriptor const &keyDescriptor, TupleData const &searchKey, TupleData &scratchKey)
virtual PConstBuffer getEntryForRead (BTreeNode const &node, uint iEntry)
Public Attributes
KeyAccessor * pKeyAccessor

Detailed Description

template<class NodeAccessor, class KeyAccessor>

class BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >

BTreeKeyedNodeAccessor is a template for implementing some of the virtual methods in the BTreeNodeAccessor interface.

It requires the class used to instantiate NodeAccessor to implement a getEntryForReadInline method.

Definition at line 39 of file BTreeKeyedNodeAccessor.h.


Member Function Documentation

template<class NodeAccessor, class KeyAccessor>

virtual void BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::accessTupleInline ( BTreeNode const & node,
uint iEntry
) [inline, virtual]

template<class NodeAccessor, class KeyAccessor>

virtual void BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::accessTuple ( BTreeNode const & node,
uint iEntry
) [inline, virtual]

template<class NodeAccessor, class KeyAccessor>

virtual void BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::unmarshalKey ( TupleData & keyData ) [inline, virtual]

Definition at line 61 of file BTreeKeyedNodeAccessor.h.

References BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::accessTupleInline(), TupleDescriptor::compareTuples(), DUP_SEEK_ANY, DUP_SEEK_BEGIN, DUP_SEEK_END, BTreeNode::height, BTreeNode::nEntries, and BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::pKeyAccessor.

00069 { 00070 uint probe = 0; 00071 uint base = probe; 00072 found = false; 00073 int nKeys = NodeAccessor::getKeyCount(node); 00074 while (nKeys > 0) { 00075 uint split = nKeys >> 1; 00076 probe = base + split; 00077 accessTupleInline(node,probe); 00078 pKeyAccessor->unmarshal(scratchKey); 00079 int j = keyDescriptor.compareTuples( 00080 searchKey,scratchKey); 00081 if (j == 0) { 00082 found = true; 00083 switch (dupSeek) { 00084 case DUP_SEEK_ANY: 00085 return probe; 00086 case DUP_SEEK_BEGIN: 00087 j = -1; 00088 break; 00089 case DUP_SEEK_END: 00090 j = 1; 00091 break; 00092 default: 00093 permAssert(false); 00094 } 00095 } 00096 if (j < 0) { 00097 nKeys = split; 00098 } else { 00099 base = probe + 1; 00100 nKeys -= (split + 1); 00101 } 00102 } 00103 if (!found && !leastUpper && (base > 0)) { 00104 base--; 00105 } 00106 if (((base != probe) && (base < node.nEntries)) || 00107 ((node.nEntries == 1) && (node.height != 0))) 00108 { 00109
00110 accessTupleInline(node,base); 00111 } 00112 return base; 00113 }


Member Data Documentation

template<class NodeAccessor, class KeyAccessor>


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


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