| 
|   | SHAMap ()=delete | 
|   | 
|   | SHAMap (SHAMap const &)=delete | 
|   | 
| SHAMap &  | operator= (SHAMap const &)=delete | 
|   | 
|   | SHAMap (SHAMap const &other, bool isMutable) | 
|   | 
|   | SHAMap (SHAMapType t, Family &f) | 
|   | 
|   | SHAMap (SHAMapType t, uint256 const &hash, Family &f) | 
|   | 
|   | ~SHAMap ()=default | 
|   | 
| Family const &  | family () const | 
|   | 
| Family &  | family () | 
|   | 
| const_iterator  | begin () const | 
|   | 
| const_iterator  | end () const | 
|   | 
| std::shared_ptr< SHAMap >  | snapShot (bool isMutable) const | 
|   | 
| void  | setFull () | 
|   | 
| void  | setLedgerSeq (std::uint32_t lseq) | 
|   | 
| bool  | fetchRoot (SHAMapHash const &hash, SHAMapSyncFilter *filter) | 
|   | 
| bool  | hasItem (uint256 const &id) const | 
|   | Does the tree have an item with the given ID?  
  | 
|   | 
| bool  | delItem (uint256 const &id) | 
|   | 
| bool  | addItem (SHAMapNodeType type, boost::intrusive_ptr< SHAMapItem const > item) | 
|   | 
| SHAMapHash  | getHash () const | 
|   | 
| bool  | updateGiveItem (SHAMapNodeType type, boost::intrusive_ptr< SHAMapItem const > item) | 
|   | 
| bool  | addGiveItem (SHAMapNodeType type, boost::intrusive_ptr< SHAMapItem const > item) | 
|   | 
| boost::intrusive_ptr< SHAMapItem const > const &  | peekItem (uint256 const &id) const | 
|   | 
| boost::intrusive_ptr< SHAMapItem const > const &  | peekItem (uint256 const &id, SHAMapHash &hash) const | 
|   | 
| const_iterator  | upper_bound (uint256 const &id) const | 
|   | Find the first item after the given item.  
  | 
|   | 
| const_iterator  | lower_bound (uint256 const &id) const | 
|   | Find the object with the greatest object id smaller than the input id.  
  | 
|   | 
| void  | visitNodes (std::function< bool(SHAMapTreeNode &)> const &function) const | 
|   | Visit every node in this SHAMap.  
  | 
|   | 
| void  | visitDifferences (SHAMap const *have, std::function< bool(SHAMapTreeNode const &)> const &) const | 
|   | Visit every node in this SHAMap that is not present in the specified SHAMap.  
  | 
|   | 
| void  | visitLeaves (std::function< void(boost::intrusive_ptr< SHAMapItem const > const &)> const &) const | 
|   | Visit every leaf node in this SHAMap.  
  | 
|   | 
| std::vector< std::pair< SHAMapNodeID, uint256 > >  | getMissingNodes (int maxNodes, SHAMapSyncFilter *filter) | 
|   | Check for nodes in the SHAMap not available.  
  | 
|   | 
| bool  | getNodeFat (SHAMapNodeID const &wanted, std::vector< std::pair< SHAMapNodeID, Blob > > &data, bool fatLeaves, std::uint32_t depth) const | 
|   | 
| std::optional< std::vector< Blob > >  | getProofPath (uint256 const &key) const | 
|   | Get the proof path of the key.  
  | 
|   | 
| void  | serializeRoot (Serializer &s) const | 
|   | Serializes the root in a format appropriate for sending over the wire.  
  | 
|   | 
| SHAMapAddNode  | addRootNode (SHAMapHash const &hash, Slice const &rootNode, SHAMapSyncFilter *filter) | 
|   | 
| SHAMapAddNode  | addKnownNode (SHAMapNodeID const &nodeID, Slice const &rawNode, SHAMapSyncFilter *filter) | 
|   | 
| void  | setImmutable () | 
|   | 
| bool  | isSynching () const | 
|   | 
| void  | setSynching () | 
|   | 
| void  | clearSynching () | 
|   | 
| bool  | isValid () const | 
|   | 
| bool  | compare (SHAMap const &otherMap, Delta &differences, int maxCount) const | 
|   | 
| int  | unshare () | 
|   | Convert any modified nodes to shared.  
  | 
|   | 
| int  | flushDirty (NodeObjectType t) | 
|   | Flush modified nodes to the nodestore and convert them to shared.  
  | 
|   | 
| void  | walkMap (std::vector< SHAMapMissingNode > &missingNodes, int maxMissing) const | 
|   | 
| bool  | walkMapParallel (std::vector< SHAMapMissingNode > &missingNodes, int maxMissing) const | 
|   | 
| bool  | deepCompare (SHAMap &other) const | 
|   | 
| void  | setUnbacked () | 
|   | 
| void  | dump (bool withHashes=false) const | 
|   | 
| void  | invariants () const | 
|   | 
 | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | cacheLookup (SHAMapHash const &hash) const | 
|   | 
| void  | canonicalize (SHAMapHash const &hash, intr_ptr::SharedPtr< SHAMapTreeNode > &) const | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | fetchNodeFromDB (SHAMapHash const &hash) const | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | fetchNodeNT (SHAMapHash const &hash) const | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | fetchNodeNT (SHAMapHash const &hash, SHAMapSyncFilter *filter) const | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | fetchNode (SHAMapHash const &hash) const | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | checkFilter (SHAMapHash const &hash, SHAMapSyncFilter *filter) const | 
|   | 
| void  | dirtyUp (SharedPtrNodeStack &stack, uint256 const &target, intr_ptr::SharedPtr< SHAMapTreeNode > terminal) | 
|   | Update hashes up to the root.  
  | 
|   | 
| SHAMapLeafNode *  | walkTowardsKey (uint256 const &id, SharedPtrNodeStack *stack=nullptr) const | 
|   | Walk towards the specified id, returning the node.  
  | 
|   | 
| SHAMapLeafNode *  | findKey (uint256 const &id) const | 
|   | Return nullptr if key not found.  
  | 
|   | 
| template<class Node >  | 
| intr_ptr::SharedPtr< Node >  | unshareNode (intr_ptr::SharedPtr< Node >, SHAMapNodeID const &nodeID) | 
|   | Unshare the node, allowing it to be modified.  
  | 
|   | 
| template<class Node >  | 
| intr_ptr::SharedPtr< Node >  | preFlushNode (intr_ptr::SharedPtr< Node > node) const | 
|   | prepare a node to be modified before flushing  
  | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | writeNode (NodeObjectType t, intr_ptr::SharedPtr< SHAMapTreeNode > node) const | 
|   | write and canonicalize modified node  
  | 
|   | 
| SHAMapLeafNode *  | firstBelow (intr_ptr::SharedPtr< SHAMapTreeNode >, SharedPtrNodeStack &stack, int branch=0) const | 
|   | 
| SHAMapLeafNode *  | lastBelow (intr_ptr::SharedPtr< SHAMapTreeNode > node, SharedPtrNodeStack &stack, int branch=branchFactor) const | 
|   | 
| SHAMapLeafNode *  | belowHelper (intr_ptr::SharedPtr< SHAMapTreeNode > node, SharedPtrNodeStack &stack, int branch, std::tuple< int, std::function< bool(int)>, std::function< void(int &)> > const &loopParams) const | 
|   | 
| SHAMapTreeNode *  | descend (SHAMapInnerNode *, int branch) const | 
|   | 
| SHAMapTreeNode *  | descendThrow (SHAMapInnerNode *, int branch) const | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | descend (SHAMapInnerNode &, int branch) const | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | descendThrow (SHAMapInnerNode &, int branch) const | 
|   | 
| SHAMapTreeNode *  | descendAsync (SHAMapInnerNode *parent, int branch, SHAMapSyncFilter *filter, bool &pending, descendCallback &&) const | 
|   | 
| std::pair< SHAMapTreeNode *, SHAMapNodeID >  | descend (SHAMapInnerNode *parent, SHAMapNodeID const &parentID, int branch, SHAMapSyncFilter *filter) const | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | descendNoStore (SHAMapInnerNode &, int branch) const | 
|   | 
| boost::intrusive_ptr< SHAMapItem const > const &  | onlyBelow (SHAMapTreeNode *) const | 
|   | If there is only one leaf below this node, get its contents.  
  | 
|   | 
| bool  | hasInnerNode (SHAMapNodeID const &nodeID, SHAMapHash const &hash) const | 
|   | Does this map have this inner node?  
  | 
|   | 
| bool  | hasLeafNode (uint256 const &tag, SHAMapHash const &hash) const | 
|   | Does this map have this leaf node?  
  | 
|   | 
| SHAMapLeafNode const *  | peekFirstItem (SharedPtrNodeStack &stack) const | 
|   | 
| SHAMapLeafNode const *  | peekNextItem (uint256 const &id, SharedPtrNodeStack &stack) const | 
|   | 
| bool  | walkBranch (SHAMapTreeNode *node, boost::intrusive_ptr< SHAMapItem const > const &otherMapItem, bool isFirstMap, Delta &differences, int &maxCount) const | 
|   | 
| int  | walkSubTree (bool doWrite, NodeObjectType t) | 
|   | 
| void  | gmn_ProcessNodes (MissingNodes &, MissingNodes::StackEntry &node) | 
|   | 
| void  | gmn_ProcessDeferredReads (MissingNodes &) | 
|   | 
| intr_ptr::SharedPtr< SHAMapTreeNode >  | finishFetch (SHAMapHash const &hash, std::shared_ptr< NodeObject > const &object) const | 
|   | 
A SHAMap is both a radix tree with a fan-out of 16 and a Merkle tree. 
A radix tree is a tree with two properties:
- The key for a node is represented by the node's position in the tree (the "prefix property").
 
- A node with only one child is merged with that child (the "merge property")
 
These properties result in a significantly smaller memory footprint for a radix tree.
A fan-out of 16 means that each node in the tree has at most 16 children. See https://en.wikipedia.org/wiki/Radix_tree
A Merkle tree is a tree where each non-leaf node is labelled with the hash of the combined labels of its children nodes.
A key property of a Merkle tree is that testing for node inclusion is O(log(N)) where N is the number of nodes in the tree.
See https://en.wikipedia.org/wiki/Merkle_tree 
Definition at line 96 of file SHAMap.h.
 
Check for nodes in the SHAMap not available. 
Get a list of node IDs and hashes for nodes that are part of this SHAMap but not available locally.
Traverse the SHAMap efficiently, maximizing I/O concurrency, to discover nodes referenced in the SHAMap but not available locally.
- Parameters
 - 
  
    | maxNodes | The maximum number of found nodes to return  | 
    | filter | The filter to use when retrieving nodes  | 
    | return | The nodes known to be missing | 
  
   
The filter can hold alternate sources of nodes that are not permanently stored locally 
Definition at line 318 of file SHAMapSync.cpp.