Changeset View
Changeset View
Standalone View
Standalone View
src/radix.h
Show First 20 Lines • Show All 140 Lines • ▼ Show 20 Lines | private: | ||||
private: | private: | ||||
union { | union { | ||||
RadixNode *node; | RadixNode *node; | ||||
T *leaf; | T *leaf; | ||||
uintptr_t raw; | uintptr_t raw; | ||||
}; | }; | ||||
static const uintptr_t DISCRIMINANT = 0x01; | static const uintptr_t DISCRIMINANT = 0x01; | ||||
bool getDiscriminent() const { return (raw & DISCRIMINANT) != 0; } | bool getDiscriminant() const { return (raw & DISCRIMINANT) != 0; } | ||||
public: | public: | ||||
explicit RadixElement() noexcept : raw(DISCRIMINANT) {} | explicit RadixElement() noexcept : raw(DISCRIMINANT) {} | ||||
explicit RadixElement(RadixNode *nodeIn) noexcept : node(nodeIn) {} | explicit RadixElement(RadixNode *nodeIn) noexcept : node(nodeIn) {} | ||||
explicit RadixElement(T *leafIn) noexcept : leaf(leafIn) { | explicit RadixElement(T *leafIn) noexcept : leaf(leafIn) { | ||||
raw |= DISCRIMINANT; | raw |= DISCRIMINANT; | ||||
} | } | ||||
/** | /** | ||||
* Node features. | * Node features. | ||||
*/ | */ | ||||
bool isNode() const { return !getDiscriminent(); } | bool isNode() const { return !getDiscriminant(); } | ||||
RadixNode *getNode() { | RadixNode *getNode() { | ||||
assert(isNode()); | assert(isNode()); | ||||
return node; | return node; | ||||
} | } | ||||
const RadixNode *getNode() const { | const RadixNode *getNode() const { | ||||
assert(isNode()); | assert(isNode()); | ||||
return node; | return node; | ||||
} | } | ||||
/** | /** | ||||
* Leaf features. | * Leaf features. | ||||
*/ | */ | ||||
bool isLeaf() const { return getDiscriminent(); } | bool isLeaf() const { return getDiscriminant(); } | ||||
T *getLeaf() { | T *getLeaf() { | ||||
assert(isLeaf()); | assert(isLeaf()); | ||||
return reinterpret_cast<T *>(raw & ~DISCRIMINANT); | return reinterpret_cast<T *>(raw & ~DISCRIMINANT); | ||||
} | } | ||||
const T *getLeaf() const { | const T *getLeaf() const { | ||||
assert(isLeaf()); | assert(isLeaf()); | ||||
Show All 30 Lines |