#include <BTreeKeyedNodeAccessor.h>
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 |
It requires the class used to instantiate NodeAccessor to implement a getEntryForReadInline method.
Definition at line 39 of file BTreeKeyedNodeAccessor.h.
| virtual void BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::accessTupleInline | ( | BTreeNode const & | node, | |
| uint | iEntry | |||
| ) | [inline, virtual] |
Definition at line 44 of file BTreeKeyedNodeAccessor.h.
References BTreeNode::nEntries.
Referenced by BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::accessTuple(), BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::binarySearch(), and BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::compareFirstKey().
00045 { 00046 assert(iEntry < node.nEntries); 00047 NodeAccessor::tupleAccessor.setCurrentTupleBuf( 00048 NodeAccessor::getEntryForReadInline(node,iEntry)); 00049 }
| virtual void BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::accessTuple | ( | BTreeNode const & | node, | |
| uint | iEntry | |||
| ) | [inline, virtual] |
Definition at line 51 of file BTreeKeyedNodeAccessor.h.
References BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::accessTupleInline().
00052 { 00053 return accessTupleInline(node,iEntry); 00054 }
| virtual void BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::unmarshalKey | ( | TupleData & | keyData | ) | [inline, virtual] |
Definition at line 56 of file BTreeKeyedNodeAccessor.h.
References BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::pKeyAccessor.
00057 { 00058 pKeyAccessor->unmarshal(keyData); 00059 }
| virtual uint BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::binarySearch | ( | BTreeNode const & | node, | |
| TupleDescriptor const & | keyDescriptor, | |||
| TupleData const & | searchKey, | |||
| DuplicateSeek | dupSeek, | |||
| bool | leastUpper, | |||
| TupleData & | scratchKey, | |||
| bool & | found | |||
| ) | [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 // one entry: +infinity 00110 accessTupleInline(node,base); 00111 } 00112 return base; 00113 }
| virtual int BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::compareFirstKey | ( | BTreeNode const & | node, | |
| TupleDescriptor const & | keyDescriptor, | |||
| TupleData const & | searchKey, | |||
| TupleData & | scratchKey | |||
| ) | [inline, virtual] |
Definition at line 115 of file BTreeKeyedNodeAccessor.h.
References BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::accessTupleInline(), TupleDescriptor::compareTuples(), and BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::pKeyAccessor.
00120 { 00121 int nKeys = NodeAccessor::getKeyCount(node); 00122 if (nKeys == 0) { 00123 return -1; 00124 } 00125 accessTupleInline(node, 0); 00126 pKeyAccessor->unmarshal(scratchKey); 00127 int compareResult = keyDescriptor.compareTuples(searchKey, scratchKey); 00128 return compareResult; 00129 }
| virtual PConstBuffer BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::getEntryForRead | ( | BTreeNode const & | node, | |
| uint | iEntry | |||
| ) | [inline, virtual] |
| KeyAccessor* BTreeKeyedNodeAccessor< NodeAccessor, KeyAccessor >::pKeyAccessor |
1.5.1