| 
    rippled
    
   | 
 
#include <SHAMapLeafNode.h>


Public Member Functions | |
| SHAMapLeafNode (SHAMapLeafNode const &)=delete | |
| SHAMapLeafNode & | operator= (SHAMapLeafNode const &)=delete | 
| bool | isLeaf () const final override | 
| Determines if this is a leaf node.   | |
| bool | isInner () const final override | 
| Determines if this is an inner node.   | |
| void | invariants (bool is_root=false) const final override | 
| boost::intrusive_ptr< SHAMapItem const > const & | peekItem () const | 
| bool | setItem (boost::intrusive_ptr< SHAMapItem const > i) | 
| Set the item that this node points to and update the node's hash.   | |
| std::string | getString (SHAMapNodeID const &) const final override | 
| virtual void | partialDestructor () | 
| 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.   | |
| virtual intr_ptr::SharedPtr< SHAMapTreeNode > | clone (std::uint32_t cowid) const =0 | 
| Make a copy of this node, setting the owner.   | |
| virtual void | updateHash ()=0 | 
| Recalculate the hash of this node.   | |
| SHAMapHash const & | getHash () const | 
| Return the hash of this node.   | |
| virtual SHAMapNodeType | getType () const =0 | 
| Determines the type of node.   | |
| virtual void | serializeForWire (Serializer &) const =0 | 
| Serialize the node in a format appropriate for sending over the wire.   | |
| virtual void | serializeWithPrefix (Serializer &) const =0 | 
| Serialize the node in a format appropriate for hashing.   | |
| 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 | use_count () const noexcept | 
Static Public Member Functions | |
| static intr_ptr::SharedPtr< SHAMapTreeNode > | makeFromPrefix (Slice rawNode, SHAMapHash const &hash) | 
| static intr_ptr::SharedPtr< SHAMapTreeNode > | makeFromWire (Slice rawNode) | 
Protected Member Functions | |
| SHAMapLeafNode (boost::intrusive_ptr< SHAMapItem const > item, std::uint32_t cowid) | |
| SHAMapLeafNode (boost::intrusive_ptr< SHAMapItem const > item, std::uint32_t cowid, SHAMapHash const &hash) | |
Protected Attributes | |
| boost::intrusive_ptr< SHAMapItem const > | item_ | 
| SHAMapHash | hash_ | 
| std::uint32_t | cowid_ | 
| Determines the owning SHAMap, if any.   | |
Private Types | |
| using | CountType = std::uint16_t | 
| using | FieldType = std::uint32_t | 
Static Private Member Functions | |
| static intr_ptr::SharedPtr< SHAMapTreeNode > | makeTransaction (Slice data, SHAMapHash const &hash, bool hashValid) | 
| static intr_ptr::SharedPtr< SHAMapTreeNode > | makeAccountState (Slice data, SHAMapHash const &hash, bool hashValid) | 
| static intr_ptr::SharedPtr< SHAMapTreeNode > | makeTransactionWithMeta (Slice data, SHAMapHash const &hash, bool hashValid) | 
Private Attributes | |
| std::atomic< FieldType > | refCounts {strongDelta} | 
refCounts consists of four fields that are treated atomically:   | |
Static Private Attributes | |
| static constexpr size_t | StrongCountNumBits = sizeof(CountType) * 8 | 
| static constexpr size_t | WeakCountNumBits = StrongCountNumBits - 2 | 
| static constexpr size_t | FieldTypeBits = sizeof(FieldType) * 8 | 
| static constexpr FieldType | one = 1 | 
| static constexpr FieldType | strongDelta = 1 | 
| Amount to change the strong count when adding or releasing a reference.   | |
| static constexpr FieldType | weakDelta = (one << StrongCountNumBits) | 
| Amount to change the weak count when adding or releasing a reference.   | |
| static constexpr FieldType | partialDestroyStartedMask | 
| Flag that is set when the partialDestroy function has started running (or is about to start running).   | |
| static constexpr FieldType | partialDestroyFinishedMask | 
| Flag that is set when the partialDestroy function has finished running.   | |
| static constexpr FieldType | tagMask | 
Mask that will zero out all the count bits and leave the tag bits unchanged.   | |
| static constexpr FieldType | valueMask = ~tagMask | 
Mask that will zero out the tag bits and leave the count bits unchanged.   | |
| static constexpr FieldType | strongMask | 
| Mask that will zero out everything except the strong count.   | |
| static constexpr FieldType | weakMask | 
| Mask that will zero out everything except the weak count.   | |
Definition at line 30 of file SHAMapLeafNode.h.
      
  | 
  privateinherited | 
Definition at line 120 of file IntrusiveRefCounts.h.
      
  | 
  privateinherited | 
Definition at line 123 of file IntrusiveRefCounts.h.
      
  | 
  protected | 
Definition at line 24 of file SHAMapLeafNode.cpp.
      
  | 
  protected | 
Definition at line 35 of file SHAMapLeafNode.cpp.
      
  | 
  delete | 
      
  | 
  delete | 
      
  | 
  finaloverridevirtual | 
Determines if this is a leaf node.
Implements ripple::SHAMapTreeNode.
Definition at line 50 of file SHAMapLeafNode.h.
      
  | 
  finaloverridevirtual | 
Determines if this is an inner node.
Implements ripple::SHAMapTreeNode.
Definition at line 56 of file SHAMapLeafNode.h.
      
  | 
  finaloverridevirtual | 
Implements ripple::SHAMapTreeNode.
Definition at line 93 of file SHAMapLeafNode.cpp.
| boost::intrusive_ptr< SHAMapItem const > const & ripple::SHAMapLeafNode::peekItem | ( | ) | const | 
Definition at line 49 of file SHAMapLeafNode.cpp.
| bool ripple::SHAMapLeafNode::setItem | ( | boost::intrusive_ptr< SHAMapItem const > | i | ) | 
Set the item that this node points to and update the node's hash.
| i | the new item | 
Definition at line 55 of file SHAMapLeafNode.cpp.
      
  | 
  finaloverridevirtual | 
Reimplemented from ripple::SHAMapTreeNode.
Definition at line 68 of file SHAMapLeafNode.cpp.
      
  | 
  virtualinherited | 
Reimplemented in ripple::SHAMapInnerNode.
Definition at line 91 of file SHAMapTreeNode.h.
      
  | 
  pure virtualinherited | 
Recalculate the hash of this node.
Implemented in ripple::SHAMapAccountStateLeafNode, ripple::SHAMapTxLeafNode, ripple::SHAMapTxPlusMetaLeafNode, and ripple::SHAMapInnerNode.
      
  | 
  inherited | 
Return the hash of this node.
Definition at line 144 of file SHAMapTreeNode.h.
      
  | 
  pure virtualinherited | 
Determines the type of node.
Implemented in ripple::SHAMapAccountStateLeafNode, ripple::SHAMapTxLeafNode, ripple::SHAMapInnerNode, and ripple::SHAMapTxPlusMetaLeafNode.
      
  | 
  pure virtualinherited | 
Serialize the node in a format appropriate for sending over the wire.
Implemented in ripple::SHAMapInnerNode, ripple::SHAMapAccountStateLeafNode, ripple::SHAMapTxLeafNode, and ripple::SHAMapTxPlusMetaLeafNode.
      
  | 
  pure virtualinherited | 
Serialize the node in a format appropriate for hashing.
Implemented in ripple::SHAMapInnerNode, ripple::SHAMapAccountStateLeafNode, ripple::SHAMapTxLeafNode, and ripple::SHAMapTxPlusMetaLeafNode.
      
  | 
  staticinherited | 
Definition at line 145 of file SHAMapTreeNode.cpp.
      
  | 
  staticinherited | 
Definition at line 113 of file SHAMapTreeNode.cpp.
      
  | 
  staticprivateinherited | 
Definition at line 35 of file SHAMapTreeNode.cpp.
      
  | 
  staticprivateinherited | 
Definition at line 80 of file SHAMapTreeNode.cpp.
      
  | 
  staticprivateinherited | 
Definition at line 51 of file SHAMapTreeNode.cpp.
      
  | 
  noexceptinherited | 
Definition at line 251 of file IntrusiveRefCounts.h.
      
  | 
  noexceptinherited | 
Definition at line 257 of file IntrusiveRefCounts.h.
      
  | 
  inherited | 
Definition at line 263 of file IntrusiveRefCounts.h.
      
  | 
  inherited | 
Definition at line 312 of file IntrusiveRefCounts.h.
      
  | 
  inherited | 
Definition at line 366 of file IntrusiveRefCounts.h.
      
  | 
  noexceptinherited | 
Definition at line 393 of file IntrusiveRefCounts.h.
      
  | 
  noexceptinherited | 
Definition at line 411 of file IntrusiveRefCounts.h.
      
  | 
  noexceptinherited | 
Definition at line 418 of file IntrusiveRefCounts.h.
      
  | 
  protected | 
Definition at line 33 of file SHAMapLeafNode.h.
      
  | 
  protectedinherited | 
Definition at line 53 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 61 of file SHAMapTreeNode.h.
      
  | 
  staticconstexprprivateinherited | 
Definition at line 121 of file IntrusiveRefCounts.h.
      
  | 
  staticconstexprprivateinherited | 
Definition at line 122 of file IntrusiveRefCounts.h.
      
  | 
  staticconstexprprivateinherited | 
Definition at line 124 of file IntrusiveRefCounts.h.
      
  | 
  staticconstexprprivateinherited | 
Definition at line 125 of file IntrusiveRefCounts.h.
      
  | 
  mutableprivateinherited | 
refCounts consists of four fields that are treated atomically: 
partialDestructor function has been started (or is about to be started). This is used to prevent the destructor from running concurrently with the partial destructor. This can easily happen when the last strong pointer release its reference in one thread and starts the partialDestructor, while in another thread the last weak pointer goes out of scope and starts the destructor while the partialDestructor is still running. Both a start and finished bit is needed to handle a corner-case where the last strong pointer goes out of scope, then then last weakPointer goes out of scope, but this happens before the partialDestructor bit is set. It would be possible to use a single bit if it could also be set atomically when the strong count goes to zero and the weak count is non-zero, but that would add complexity (and likely slow down common cases as well).partialDestructor has finished running. See (3) above for more information. Definition at line 160 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 167 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 174 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 182 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 190 of file IntrusiveRefCounts.h.
      
  | 
  staticconstexprprivateinherited | 
Mask that will zero out all the count bits and leave the tag bits unchanged. 
Definition at line 196 of file IntrusiveRefCounts.h.
      
  | 
  staticconstexprprivateinherited | 
Mask that will zero out the tag bits and leave the count bits unchanged. 
Definition at line 202 of file IntrusiveRefCounts.h.
      
  | 
  staticconstexprprivateinherited | 
Mask that will zero out everything except the strong count.
Definition at line 206 of file IntrusiveRefCounts.h.
      
  | 
  staticconstexprprivateinherited | 
Mask that will zero out everything except the weak count.
Definition at line 211 of file IntrusiveRefCounts.h.