|
xrpld
|
#include <SHAMapInnerNode.h>


Public Member Functions | |
| SHAMapInnerNode (std::uint32_t cowid, std::uint8_t numAllocatedChildren=2) | |
| SHAMapInnerNode (SHAMapInnerNode const &)=delete | |
| SHAMapInnerNode & | operator= (SHAMapInnerNode const &)=delete |
| ~SHAMapInnerNode () override | |
| void | partialDestructor () override |
| SHAMapTreeNodePtr | clone (std::uint32_t cowid) const override |
| Make a copy of this node, setting the owner. | |
| SHAMapNodeType | getType () const override |
| Determines the type of node. | |
| bool | isLeaf () const override |
| Determines if this is a leaf node. | |
| bool | isInner () const override |
| Determines if this is an inner node. | |
| bool | isEmpty () const |
| bool | isEmptyBranch (unsigned int branch) const |
| unsigned int | getBranchCount () const |
| SHAMapHash const & | getChildHash (unsigned int branch) const |
| void | setChild (unsigned int branch, SHAMapTreeNodePtr child) |
| void | shareChild (unsigned int branch, SHAMapTreeNodePtr const &child) |
| SHAMapTreeNode * | getChildPointer (unsigned int branch) |
| SHAMapTreeNodePtr | getChild (unsigned int branch) |
| SHAMapTreeNodePtr | canonicalizeChild (unsigned int branch, SHAMapTreeNodePtr node) |
| bool | isFullBelow (std::uint32_t generation) const |
| void | setFullBelowGen (std::uint32_t gen) |
| void | updateHash () override |
| Recalculate the hash of this node. | |
| void | updateHashDeep () |
| Recalculate the hash of all children and this node. | |
| void | serializeForWire (Serializer &) const override |
| Serialize the node in a format appropriate for sending over the wire. | |
| void | serializeWithPrefix (Serializer &) const override |
| Serialize the node in a format appropriate for hashing. | |
| std::string | getString (SHAMapNodeID const &) const override |
| void | invariants (bool isRoot=false) const override |
| std::uint32_t | cowid () const |
| Returns the SHAMap that owns this node. | |
| void | unshare () |
| If this node is shared with another map, mark it as no longer shared. | |
| SHAMapHash const & | getHash () const |
| Return the hash of this node. | |
| void | addStrongRef () const noexcept |
| void | addWeakRef () const noexcept |
| ReleaseStrongRefAction | releaseStrongRef () const |
| ReleaseStrongRefAction | addWeakReleaseStrongRef () const |
| ReleaseWeakRefAction | releaseWeakRef () const |
| bool | checkoutStrongRefFromWeak () const noexcept |
| bool | expired () const noexcept |
| std::size_t | useCount () const noexcept |
Static Public Member Functions | |
| static SHAMapTreeNodePtr | makeFullInner (Slice data, SHAMapHash const &hash, bool hashValid) |
| static SHAMapTreeNodePtr | makeCompressedInner (Slice data) |
| static SHAMapTreeNodePtr | makeFromPrefix (Slice rawNode, SHAMapHash const &hash) |
| static SHAMapTreeNodePtr | makeFromWire (Slice rawNode) |
Public Attributes | |
| friend | Object |
Static Public Attributes | |
| static constexpr unsigned int | kBranchFactor = 16 |
| Each inner node has 16 children (the 'radix tree' part of the map). | |
Protected Attributes | |
| SHAMapHash | hash_ |
| std::uint32_t | cowid_ |
| Determines the owning SHAMap, if any. | |
Private Types | |
| using | CountType = std::uint16_t |
| using | FieldType = std::uint32_t |
Private Member Functions | |
| void | resizeChildArrays (std::uint8_t toAllocate) |
| Convert arrays stored in hashesAndChildren_ so they can store the requested number of children. | |
| std::optional< unsigned int > | getChildIndex (unsigned int i) const |
| Get the child's index inside the hashes or children array (stored in hashesAndChildren_. | |
| template<class F> | |
| void | iterChildren (F &&f) const |
| Call the f callback for all 16 (branchFactor) branches - even if the branch is empty. | |
| template<class F> | |
| void | iterNonEmptyChildIndexes (F &&f) const |
| Call the f callback for all non-empty branches. | |
Static Private Member Functions | |
| static SHAMapTreeNodePtr | makeTransaction (Slice data, SHAMapHash const &hash, bool hashValid) |
| static SHAMapTreeNodePtr | makeAccountState (Slice data, SHAMapHash const &hash, bool hashValid) |
| static SHAMapTreeNodePtr | makeTransactionWithMeta (Slice data, SHAMapHash const &hash, bool hashValid) |
| static auto & | getCounter () noexcept |
Private Attributes | |
| TaggedPointer | hashesAndChildren_ |
| Opaque type that contains the hashes array (array of type SHAMapHash) and the children array (array of type intr_ptr::SharedPtr<SHAMapInnerNode>). | |
| std::uint32_t | fullBelowGen_ = 0 |
| std::uint16_t | isBranch_ = 0 |
| std::atomic< std::uint16_t > | lock_ = 0 |
| A bitlock for the children of this node, with one bit per child. | |
| std::atomic< FieldType > | refCounts_ {kStrongDelta} |
| refCounts consists of four fields that are treated atomically: | |
Static Private Attributes | |
| static constexpr size_t | kStrongCountNumBits = sizeof(CountType) * 8 |
| static constexpr size_t | kWeakCountNumBits = kStrongCountNumBits - 2 |
| static constexpr size_t | kFieldTypeBits = sizeof(FieldType) * 8 |
| static constexpr FieldType | kOne = 1 |
| static constexpr FieldType | kStrongDelta = 1 |
| Amount to change the strong count when adding or releasing a reference. | |
| static constexpr FieldType | kWeakDelta = (kOne << kStrongCountNumBits) |
| Amount to change the weak count when adding or releasing a reference. | |
| static constexpr FieldType | kPartialDestroyStartedMask = (kOne << (kFieldTypeBits - 1)) |
| Flag that is set when the partialDestroy function has started running (or is about to start running). | |
| static constexpr FieldType | kPartialDestroyFinishedMask = (kOne << (kFieldTypeBits - 2)) |
| Flag that is set when the partialDestroy function has finished running. | |
| static constexpr FieldType | kTagMask = kPartialDestroyStartedMask | kPartialDestroyFinishedMask |
| Mask that will zero out all the count bits and leave the tag bits unchanged. | |
| static constexpr FieldType | kValueMask = ~kTagMask |
| Mask that will zero out the tag bits and leave the count bits unchanged. | |
| static constexpr FieldType | kStrongMask = ((kOne << kStrongCountNumBits) - 1) & kValueMask |
| Mask that will zero out everything except the strong count. | |
| static constexpr FieldType | kWeakMask |
| Mask that will zero out everything except the weak count. | |
Definition at line 18 of file SHAMapInnerNode.h.
|
privateinherited |
Definition at line 96 of file IntrusiveRefCounts.h.
|
privateinherited |
Definition at line 99 of file IntrusiveRefCounts.h.
|
explicit |
Definition at line 30 of file SHAMapInnerNode.cpp.
|
delete |
|
overridedefault |
|
private |
Convert arrays stored in hashesAndChildren_ so they can store the requested number of children.
| toAllocate | allocate space for at least this number of children (must be <= branchFactor) |
Definition at line 61 of file SHAMapInnerNode.cpp.
|
private |
Get the child's index inside the hashes or children array (stored in hashesAndChildren_.
These arrays may or may not be sparse). The optional will be empty is an empty branch is requested and the arrays are sparse.
| i | index of the requested child |
Definition at line 67 of file SHAMapInnerNode.cpp.
|
private |
Call the f callback for all 16 (branchFactor) branches - even if the branch is empty.
| f | a one parameter callback function. The parameter is the child's hash. |
Definition at line 48 of file SHAMapInnerNode.cpp.
|
private |
Call the f callback for all non-empty branches.
| f | a two parameter callback function. The first parameter is the branch number, the second parameter is the index into the array. For dense formats these are the same, for sparse they may be different. |
Definition at line 55 of file SHAMapInnerNode.cpp.
|
delete |
|
overridevirtual |
Reimplemented from xrpl::SHAMapTreeNode.
Definition at line 38 of file SHAMapInnerNode.cpp.
|
overridevirtual |
Make a copy of this node, setting the owner.
Implements xrpl::SHAMapTreeNode.
Definition at line 73 of file SHAMapInnerNode.cpp.
|
overridevirtual |
Determines the type of node.
Implements xrpl::SHAMapTreeNode.
Definition at line 107 of file SHAMapInnerNode.h.
|
overridevirtual |
Determines if this is a leaf node.
Implements xrpl::SHAMapTreeNode.
Definition at line 113 of file SHAMapInnerNode.h.
|
overridevirtual |
Determines if this is an inner node.
Implements xrpl::SHAMapTreeNode.
Definition at line 119 of file SHAMapInnerNode.h.
| bool xrpl::SHAMapInnerNode::isEmpty | ( | ) | const |
Definition at line 187 of file SHAMapInnerNode.h.
| bool xrpl::SHAMapInnerNode::isEmptyBranch | ( | unsigned int | branch | ) | const |
Definition at line 193 of file SHAMapInnerNode.h.
| unsigned int xrpl::SHAMapInnerNode::getBranchCount | ( | ) | const |
Definition at line 199 of file SHAMapInnerNode.h.
| SHAMapHash const & xrpl::SHAMapInnerNode::getChildHash | ( | unsigned int | branch | ) | const |
Definition at line 355 of file SHAMapInnerNode.cpp.
| void xrpl::SHAMapInnerNode::setChild | ( | unsigned int | branch, |
| SHAMapTreeNodePtr | child ) |
Definition at line 270 of file SHAMapInnerNode.cpp.
| void xrpl::SHAMapInnerNode::shareChild | ( | unsigned int | branch, |
| SHAMapTreeNodePtr const & | child ) |
Definition at line 311 of file SHAMapInnerNode.cpp.
| SHAMapTreeNode * xrpl::SHAMapInnerNode::getChildPointer | ( | unsigned int | branch | ) |
Definition at line 325 of file SHAMapInnerNode.cpp.
| SHAMapTreeNodePtr xrpl::SHAMapInnerNode::getChild | ( | unsigned int | branch | ) |
Definition at line 341 of file SHAMapInnerNode.cpp.
| SHAMapTreeNodePtr xrpl::SHAMapInnerNode::canonicalizeChild | ( | unsigned int | branch, |
| SHAMapTreeNodePtr | node ) |
Definition at line 365 of file SHAMapInnerNode.cpp.
| bool xrpl::SHAMapInnerNode::isFullBelow | ( | std::uint32_t | generation | ) | const |
Definition at line 205 of file SHAMapInnerNode.h.
| void xrpl::SHAMapInnerNode::setFullBelowGen | ( | std::uint32_t | gen | ) |
Definition at line 211 of file SHAMapInnerNode.h.
|
overridevirtual |
Recalculate the hash of this node.
Implements xrpl::SHAMapTreeNode.
Definition at line 194 of file SHAMapInnerNode.cpp.
| void xrpl::SHAMapInnerNode::updateHashDeep | ( | ) |
Recalculate the hash of all children and this node.
Definition at line 209 of file SHAMapInnerNode.cpp.
|
overridevirtual |
Serialize the node in a format appropriate for sending over the wire.
Implements xrpl::SHAMapTreeNode.
Definition at line 223 of file SHAMapInnerNode.cpp.
|
overridevirtual |
Serialize the node in a format appropriate for hashing.
Implements xrpl::SHAMapTreeNode.
Definition at line 246 of file SHAMapInnerNode.cpp.
|
overridevirtual |
Reimplemented from xrpl::SHAMapTreeNode.
Definition at line 255 of file SHAMapInnerNode.cpp.
|
overridevirtual |
Implements xrpl::SHAMapTreeNode.
Definition at line 398 of file SHAMapInnerNode.cpp.
|
static |
Definition at line 124 of file SHAMapInnerNode.cpp.
|
static |
Definition at line 159 of file SHAMapInnerNode.cpp.
|
inherited |
Return the hash of this node.
Definition at line 139 of file SHAMapTreeNode.h.
|
staticinherited |
Definition at line 157 of file SHAMapTreeNode.cpp.
|
staticinherited |
Definition at line 126 of file SHAMapTreeNode.cpp.
|
staticprivateinherited |
Definition at line 30 of file SHAMapTreeNode.cpp.
|
staticprivateinherited |
Definition at line 85 of file SHAMapTreeNode.cpp.
|
staticprivateinherited |
Definition at line 47 of file SHAMapTreeNode.cpp.
|
noexceptinherited |
Definition at line 238 of file IntrusiveRefCounts.h.
|
noexceptinherited |
Definition at line 244 of file IntrusiveRefCounts.h.
|
inherited |
Definition at line 250 of file IntrusiveRefCounts.h.
|
inherited |
Definition at line 298 of file IntrusiveRefCounts.h.
|
inherited |
Definition at line 347 of file IntrusiveRefCounts.h.
|
noexceptinherited |
Definition at line 376 of file IntrusiveRefCounts.h.
|
noexceptinherited |
Definition at line 393 of file IntrusiveRefCounts.h.
|
noexceptinherited |
Definition at line 400 of file IntrusiveRefCounts.h.
|
staticprivatenoexceptinherited |
Definition at line 113 of file CountedObject.h.
|
staticconstexpr |
Each inner node has 16 children (the 'radix tree' part of the map).
Definition at line 24 of file SHAMapInnerNode.h.
|
private |
Opaque type that contains the hashes array (array of type SHAMapHash) and the children array (array of type intr_ptr::SharedPtr<SHAMapInnerNode>).
Definition at line 32 of file SHAMapInnerNode.h.
|
private |
Definition at line 34 of file SHAMapInnerNode.h.
|
private |
Definition at line 35 of file SHAMapInnerNode.h.
|
mutableprivate |
A bitlock for the children of this node, with one bit per child.
Definition at line 40 of file SHAMapInnerNode.h.
|
protectedinherited |
Definition at line 40 of file SHAMapTreeNode.h.
|
protectedinherited |
Determines the owning SHAMap, if any.
Used for copy-on-write semantics.
If this value is 0, the node is not dirty and does not need to be flushed. It is eligible for sharing and may be included multiple SHAMap instances.
Definition at line 49 of file SHAMapTreeNode.h.
|
staticconstexprprivateinherited |
Definition at line 97 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Definition at line 98 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Definition at line 100 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Definition at line 101 of file IntrusiveRefCounts.h.
|
mutableprivateinherited |
refCounts consists of four fields that are treated atomically:
Definition at line 136 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Amount to change the strong count when adding or releasing a reference.
Note: The strong count is stored in the low StrongCountNumBits bits of refCounts
Definition at line 144 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Amount to change the weak count when adding or releasing a reference.
Note: The weak count is stored in the high WeakCountNumBits bits of refCounts
Definition at line 152 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Flag that is set when the partialDestroy function has started running (or is about to start running).
See description of the refCounts field for a fuller description of this field.
Definition at line 161 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Flag that is set when the partialDestroy function has finished running.
See description of the refCounts field for a fuller description of this field.
Definition at line 169 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Mask that will zero out all the count bits and leave the tag bits unchanged.
Definition at line 175 of file IntrusiveRefCounts.h.
Mask that will zero out the tag bits and leave the count bits unchanged.
Definition at line 181 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Mask that will zero out everything except the strong count.
Definition at line 186 of file IntrusiveRefCounts.h.
|
staticconstexprprivateinherited |
Mask that will zero out everything except the weak count.
Definition at line 191 of file IntrusiveRefCounts.h.
|
inherited |
Definition at line 138 of file CountedObject.h.