diff --git a/DatabaseShard__test_8cpp_source.html b/DatabaseShard__test_8cpp_source.html index e3ea3b4b1c..b9b089cd2f 100644 --- a/DatabaseShard__test_8cpp_source.html +++ b/DatabaseShard__test_8cpp_source.html @@ -1978,7 +1978,7 @@ $(function() {
ripple::NodeStore::TestBase
Definition: TestBase.h:68
std::string
STL class.
std::shared_ptr
STL class.
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
ripple::SHAMapNodeType::tnINNER
@ tnINNER
ripple::NodeStore::uniformIntDistribution::paramType::B
const resultType B
Definition: DatabaseShard_test.cpp:68
ripple::base_uint::isNonZero
bool isNonZero() const
Definition: base_uint.h:536
diff --git a/Database_8cpp_source.html b/Database_8cpp_source.html index 0854e0815d..4e49b24363 100644 --- a/Database_8cpp_source.html +++ b/Database_8cpp_source.html @@ -489,7 +489,7 @@ $(function() {
Json::Value::isObject
bool isObject() const
Definition: json_value.cpp:1027
std::string
STL class.
std::shared_ptr< NodeObject >
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
std::exception
STL class.
ripple::base_uint::isNonZero
bool isNonZero() const
Definition: base_uint.h:536
ripple::SHAMap::family
Family const & family() const
Definition: SHAMap.h:139
diff --git a/FetchPack__test_8cpp_source.html b/FetchPack__test_8cpp_source.html index e229e98549..9d5ea5a90c 100644 --- a/FetchPack__test_8cpp_source.html +++ b/FetchPack__test_8cpp_source.html @@ -251,7 +251,7 @@ $(function() {
std::shared_ptr
STL class.
ripple::tests::FetchPack_test::Handler::operator()
void operator()(std::uint32_t refNum) const
Definition: FetchPack_test.cpp:49
functional
-
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:837
+
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:836
ripple::SHAMapNodeType::tnACCOUNT_STATE
@ tnACCOUNT_STATE
ripple::tests::FetchPack_test::TestFilter::gotNode
void gotNode(bool fromFilter, SHAMapHash const &nodeHash, std::uint32_t ledgerSeq, Blob &&nodeData, SHAMapNodeType type) const override
Definition: FetchPack_test.cpp:63
ripple::tests::FetchPack_test::TestFilter
Definition: FetchPack_test.cpp:55
diff --git a/InboundLedger_8cpp_source.html b/InboundLedger_8cpp_source.html index 2918858f60..4b7dd8b519 100644 --- a/InboundLedger_8cpp_source.html +++ b/InboundLedger_8cpp_source.html @@ -1463,7 +1463,7 @@ $(function() {
std::shared_ptr
STL class.
ripple::InboundLedger::mHaveState
bool mHaveState
Definition: InboundLedger.h:180
ripple::LedgerInfo::parentHash
uint256 parentHash
Definition: ReadView.h:104
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
std::exception
STL class.
beast::Journal::trace
Stream trace() const
Severity stream access functions.
Definition: Journal.h:309
ripple::InboundLedger::TriggerReason::added
@ added
diff --git a/LedgerReplayMsgHandler_8cpp_source.html b/LedgerReplayMsgHandler_8cpp_source.html index 6f833b16fc..9b39ba4b12 100644 --- a/LedgerReplayMsgHandler_8cpp_source.html +++ b/LedgerReplayMsgHandler_8cpp_source.html @@ -368,7 +368,7 @@ $(function() {
ripple::makeSlice
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
Definition: Slice.h:241
ripple::sfMetadata
const SField sfMetadata
std::shared_ptr
STL class.
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
ripple::HashPrefix::txNode
@ txNode
transaction plus metadata
std::exception
STL class.
ripple::SHAMapType::TRANSACTION
@ TRANSACTION
diff --git a/SHAMapDelta_8cpp_source.html b/SHAMapDelta_8cpp_source.html index 1a32d4fabe..0db27cc0dc 100644 --- a/SHAMapDelta_8cpp_source.html +++ b/SHAMapDelta_8cpp_source.html @@ -464,7 +464,7 @@ $(function() {
ripple::SHAMap::isValid
bool isValid() const
Definition: SHAMap.h:617
std::shared_ptr
STL class.
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
std::pair
std::vector::reserve
T reserve(T... args)
vector
diff --git a/SHAMapInnerNode_8cpp_source.html b/SHAMapInnerNode_8cpp_source.html index 3ee96e9ad4..3dba2f9492 100644 --- a/SHAMapInnerNode_8cpp_source.html +++ b/SHAMapInnerNode_8cpp_source.html @@ -355,7 +355,7 @@ $(function() {
284 
285 // We are modifying an inner node
286 void
-
287 SHAMapInnerNode::setChild(int m, std::shared_ptr<SHAMapTreeNode> const& child)
+
287 SHAMapInnerNode::setChild(int m, std::shared_ptr<SHAMapTreeNode> child)
288 {
289  assert((m >= 0) && (m < branchFactor));
290  assert(cowid_ != 0);
@@ -381,7 +381,7 @@ $(function() {
310  auto const childIndex = *getChildIndex(m);
311  auto [_, hashes, children] = hashesAndChildren_.getHashesAndChildren();
312  hashes[childIndex].zero();
-
313  children[childIndex] = child;
+
313  children[childIndex] = std::move(child);
314  }
315 
316  hash_.zero();
@@ -514,7 +514,6 @@ $(function() {
ripple::SHAMapTreeNode::cowid
std::uint32_t cowid() const
Returns the SHAMap that owns this node.
Definition: SHAMapTreeNode.h:116
ripple::SHAMapInnerNode::serializeWithPrefix
void serializeWithPrefix(Serializer &) const override
Serialize the node in a format appropriate for hashing.
Definition: SHAMapInnerNode.cpp:250
-
ripple::SHAMapInnerNode::setChild
void setChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)
Definition: SHAMapInnerNode.cpp:287
ripple::SHAMapInnerNode::clone
std::shared_ptr< SHAMapTreeNode > clone(std::uint32_t cowid) const override
Make a copy of this node, setting the owner.
Definition: SHAMapInnerNode.cpp:75
ripple::TaggedPointer::getChildIndex
std::optional< int > getChildIndex(std::uint16_t isBranch, int i) const
Get the child's index inside the hashes or children array (which may or may not be sparse).
std::string
STL class.
@@ -551,6 +550,7 @@ $(function() {
ripple::HashPrefix::innerNode
@ innerNode
inner node in V1 tree
ripple::SHAMapInnerNode::getChildHash
SHAMapHash const & getChildHash(int m) const
Definition: SHAMapInnerNode.cpp:361
ripple::base_uint< 256 >::bytes
static constexpr std::size_t bytes
Definition: base_uint.h:104
+
ripple::SHAMapInnerNode::setChild
void setChild(int m, std::shared_ptr< SHAMapTreeNode > child)
Definition: SHAMapInnerNode.cpp:287
ripple::SerialIter::get8
unsigned char get8()
Definition: Serializer.cpp:362
ripple::packed_spinlock
Classes to handle arrays of spinlocks packed into a single atomic integer:
Definition: spinlock.h:89
ripple::SHAMapInnerNode::resizeChildArrays
void resizeChildArrays(std::uint8_t toAllocate)
Convert arrays stored in hashesAndChildren_ so they can store the requested number of children.
Definition: SHAMapInnerNode.cpp:62
diff --git a/SHAMapInnerNode_8h_source.html b/SHAMapInnerNode_8h_source.html index 67e9355ab7..24c5b11f13 100644 --- a/SHAMapInnerNode_8h_source.html +++ b/SHAMapInnerNode_8h_source.html @@ -181,7 +181,7 @@ $(function() {
147  getChildHash(int m) const;
148 
149  void
-
150  setChild(int m, std::shared_ptr<SHAMapTreeNode> const& child);
+
150  setChild(int m, std::shared_ptr<SHAMapTreeNode> child);
151 
152  void
153  shareChild(int m, std::shared_ptr<SHAMapTreeNode> const& child);
@@ -252,7 +252,6 @@ $(function() {
ripple::SHAMapInnerNode::serializeWithPrefix
void serializeWithPrefix(Serializer &) const override
Serialize the node in a format appropriate for hashing.
Definition: SHAMapInnerNode.cpp:250
ripple::SHAMapInnerNode::isInner
bool isInner() const override
Determines if this is an inner node.
Definition: SHAMapInnerNode.h:132
bitset
-
ripple::SHAMapInnerNode::setChild
void setChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)
Definition: SHAMapInnerNode.cpp:287
ripple::CountedObject
Tracks the number of instances of an object.
Definition: CountedObject.h:124
ripple::SHAMapInnerNode::clone
std::shared_ptr< SHAMapTreeNode > clone(std::uint32_t cowid) const override
Make a copy of this node, setting the owner.
Definition: SHAMapInnerNode.cpp:75
std::string
STL class.
@@ -276,6 +275,7 @@ $(function() {
ripple::SHAMapInnerNode::getString
std::string getString(SHAMapNodeID const &) const override
Definition: SHAMapInnerNode.cpp:272
ripple::SHAMapInnerNode::operator=
SHAMapInnerNode & operator=(SHAMapInnerNode const &)=delete
ripple::SHAMapInnerNode::getChildHash
SHAMapHash const & getChildHash(int m) const
Definition: SHAMapInnerNode.cpp:361
+
ripple::SHAMapInnerNode::setChild
void setChild(int m, std::shared_ptr< SHAMapTreeNode > child)
Definition: SHAMapInnerNode.cpp:287
ripple::SHAMapInnerNode
Definition: SHAMapInnerNode.h:41
ripple::SHAMapInnerNode::resizeChildArrays
void resizeChildArrays(std::uint8_t toAllocate)
Convert arrays stored in hashesAndChildren_ so they can store the requested number of children.
Definition: SHAMapInnerNode.cpp:62
ripple::SHAMapInnerNode::isFullBelow
bool isFullBelow(std::uint32_t generation) const
Definition: SHAMapInnerNode.h:204
diff --git a/SHAMapSync__test_8cpp_source.html b/SHAMapSync__test_8cpp_source.html index 8ca9570ff7..90bfc21d44 100644 --- a/SHAMapSync__test_8cpp_source.html +++ b/SHAMapSync__test_8cpp_source.html @@ -264,15 +264,15 @@ $(function() {
193 } // namespace tests
194 } // namespace ripple
-
ripple::SHAMap::invariants
void invariants() const
Definition: SHAMap.cpp:1179
+
ripple::SHAMap::invariants
void invariants() const
Definition: SHAMap.cpp:1178
ripple::SHAMap::clearSynching
void clearSynching()
Definition: SHAMap.h:611
ripple::makeSlice
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
Definition: Slice.h:241
std::shared_ptr
STL class.
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
ripple::tests::SHAMapSync_test::run
void run() override
Definition: SHAMapSync_test.cpp:88
std::list
STL class.
ripple::SHAMap::deepCompare
bool deepCompare(SHAMap &other) const
Definition: SHAMapSync.cpp:667
-
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:837
+
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:836
ripple::SHAMapNodeType::tnACCOUNT_STATE
@ tnACCOUNT_STATE
std::vector
STL class.
std::vector::size
T size(T... args)
diff --git a/SHAMap_8cpp_source.html b/SHAMap_8cpp_source.html index 37040eb0cc..643044ef87 100644 --- a/SHAMap_8cpp_source.html +++ b/SHAMap_8cpp_source.html @@ -189,7 +189,7 @@ $(function() {
118  assert(branch >= 0);
119 
120  node = unshareNode(std::move(node), nodeID);
-
121  node->setChild(branch, child);
+
121  node->setChild(branch, std::move(child));
122 
123  child = std::move(node);
124  }
@@ -789,7 +789,7 @@ $(function() {
718  stack.pop();
719 
720  node = unshareNode(std::move(node), nodeID);
-
721  node->setChild(selectBranch(nodeID, id), prevNode);
+
721  node->setChild(selectBranch(nodeID, id), std::move(prevNode));
722 
723  if (!nodeID.isRoot())
724  {
@@ -866,406 +866,404 @@ $(function() {
795  auto inner = std::static_pointer_cast<SHAMapInnerNode>(node);
796  int branch = selectBranch(nodeID, tag);
797  assert(inner->isEmptyBranch(branch));
-
798  auto newNode = makeTypedLeaf(type, std::move(item), cowid_);
-
799  inner->setChild(branch, newNode);
-
800  }
-
801  else
-
802  {
-
803  // this is a leaf node that has to be made an inner node holding two
-
804  // items
-
805  auto leaf = std::static_pointer_cast<SHAMapLeafNode>(node);
-
806  std::shared_ptr<SHAMapItem const> otherItem = leaf->peekItem();
-
807  assert(otherItem && (tag != otherItem->key()));
-
808 
-
809  node = std::make_shared<SHAMapInnerNode>(node->cowid());
-
810 
-
811  unsigned int b1, b2;
-
812 
-
813  while ((b1 = selectBranch(nodeID, tag)) ==
-
814  (b2 = selectBranch(nodeID, otherItem->key())))
-
815  {
-
816  stack.push({node, nodeID});
-
817 
-
818  // we need a new inner node, since both go on same branch at this
-
819  // level
-
820  nodeID = nodeID.getChildNodeID(b1);
-
821  node = std::make_shared<SHAMapInnerNode>(cowid_);
-
822  }
-
823 
-
824  // we can add the two leaf nodes here
-
825  assert(node->isInner());
-
826 
-
827  auto inner = static_cast<SHAMapInnerNode*>(node.get());
-
828  inner->setChild(b1, makeTypedLeaf(type, std::move(item), cowid_));
-
829  inner->setChild(b2, makeTypedLeaf(type, std::move(otherItem), cowid_));
-
830  }
-
831 
-
832  dirtyUp(stack, tag, node);
-
833  return true;
-
834 }
-
835 
-
836 bool
-
837 SHAMap::addItem(SHAMapNodeType type, SHAMapItem&& i)
-
838 {
-
839  return addGiveItem(type, std::make_shared<SHAMapItem const>(std::move(i)));
-
840 }
-
841 
-
842 SHAMapHash
-
843 SHAMap::getHash() const
-
844 {
-
845  auto hash = root_->getHash();
-
846  if (hash.isZero())
-
847  {
-
848  const_cast<SHAMap&>(*this).unshare();
-
849  hash = root_->getHash();
-
850  }
-
851  return hash;
-
852 }
-
853 
-
854 bool
-
855 SHAMap::updateGiveItem(
-
856  SHAMapNodeType type,
-
857  std::shared_ptr<SHAMapItem const> item)
-
858 {
-
859  // can't change the tag but can change the hash
-
860  uint256 tag = item->key();
-
861 
-
862  assert(state_ != SHAMapState::Immutable);
-
863 
-
864  SharedPtrNodeStack stack;
-
865  walkTowardsKey(tag, &stack);
-
866 
-
867  if (stack.empty())
-
868  Throw<SHAMapMissingNode>(type_, tag);
-
869 
-
870  auto node = std::dynamic_pointer_cast<SHAMapLeafNode>(stack.top().first);
-
871  auto nodeID = stack.top().second;
-
872  stack.pop();
-
873 
-
874  if (!node || (node->peekItem()->key() != tag))
-
875  {
-
876  assert(false);
-
877  return false;
-
878  }
-
879 
-
880  if (node->getType() != type)
-
881  {
-
882  JLOG(journal_.fatal()) << "SHAMap::setItem: cross-type change!";
-
883  return false;
-
884  }
-
885 
-
886  node = unshareNode(std::move(node), nodeID);
-
887 
-
888  if (node->setItem(std::move(item)))
-
889  dirtyUp(stack, tag, node);
-
890 
-
891  return true;
-
892 }
-
893 
-
894 bool
-
895 SHAMap::fetchRoot(SHAMapHash const& hash, SHAMapSyncFilter* filter)
-
896 {
-
897  if (hash == root_->getHash())
-
898  return true;
-
899 
-
900  if (auto stream = journal_.trace())
-
901  {
-
902  if (type_ == SHAMapType::TRANSACTION)
-
903  {
-
904  stream << "Fetch root TXN node " << hash;
-
905  }
-
906  else if (type_ == SHAMapType::STATE)
-
907  {
-
908  stream << "Fetch root STATE node " << hash;
-
909  }
-
910  else
-
911  {
-
912  stream << "Fetch root SHAMap node " << hash;
-
913  }
-
914  }
-
915 
-
916  auto newRoot = fetchNodeNT(hash, filter);
-
917 
-
918  if (newRoot)
-
919  {
-
920  root_ = newRoot;
-
921  assert(root_->getHash() == hash);
-
922  return true;
-
923  }
-
924 
-
925  return false;
-
926 }
-
927 
-
940 std::shared_ptr<SHAMapTreeNode>
-
941 SHAMap::writeNode(NodeObjectType t, std::shared_ptr<SHAMapTreeNode> node) const
-
942 {
-
943  assert(node->cowid() == 0);
-
944  assert(backed_);
-
945 
-
946  canonicalize(node->getHash(), node);
-
947 
-
948  Serializer s;
-
949  node->serializeWithPrefix(s);
-
950  f_.db().store(
-
951  t, std::move(s.modData()), node->getHash().as_uint256(), ledgerSeq_);
-
952  return node;
-
953 }
-
954 
-
955 // We can't modify an inner node someone else might have a
-
956 // pointer to because flushing modifies inner nodes -- it
-
957 // makes them point to canonical/shared nodes.
-
958 template <class Node>
-
959 std::shared_ptr<Node>
-
960 SHAMap::preFlushNode(std::shared_ptr<Node> node) const
-
961 {
-
962  // A shared node should never need to be flushed
-
963  // because that would imply someone modified it
-
964  assert(node->cowid() != 0);
-
965 
-
966  if (node->cowid() != cowid_)
-
967  {
-
968  // Node is not uniquely ours, so unshare it before
-
969  // possibly modifying it
-
970  node = std::static_pointer_cast<Node>(node->clone(cowid_));
-
971  }
-
972  return node;
-
973 }
-
974 
-
975 int
-
976 SHAMap::unshare()
-
977 {
-
978  // Don't share nodes with parent map
-
979  return walkSubTree(false, hotUNKNOWN);
-
980 }
-
981 
-
982 int
-
983 SHAMap::flushDirty(NodeObjectType t)
-
984 {
-
985  // We only write back if this map is backed.
-
986  return walkSubTree(backed_, t);
-
987 }
-
988 
-
989 int
-
990 SHAMap::walkSubTree(bool doWrite, NodeObjectType t)
-
991 {
-
992  assert(!doWrite || backed_);
-
993 
-
994  int flushed = 0;
-
995 
-
996  if (!root_ || (root_->cowid() == 0))
-
997  return flushed;
-
998 
-
999  if (root_->isLeaf())
-
1000  { // special case -- root_ is leaf
-
1001  root_ = preFlushNode(std::move(root_));
-
1002  root_->updateHash();
-
1003  root_->unshare();
-
1004 
-
1005  if (doWrite)
-
1006  root_ = writeNode(t, std::move(root_));
-
1007 
-
1008  return 1;
-
1009  }
-
1010 
-
1011  auto node = std::static_pointer_cast<SHAMapInnerNode>(root_);
-
1012 
-
1013  if (node->isEmpty())
-
1014  { // replace empty root with a new empty root
-
1015  root_ = std::make_shared<SHAMapInnerNode>(0);
-
1016  return 1;
-
1017  }
-
1018 
-
1019  // Stack of {parent,index,child} pointers representing
-
1020  // inner nodes we are in the process of flushing
-
1021  using StackEntry = std::pair<std::shared_ptr<SHAMapInnerNode>, int>;
-
1022  std::stack<StackEntry, std::vector<StackEntry>> stack;
-
1023 
-
1024  node = preFlushNode(std::move(node));
-
1025 
-
1026  int pos = 0;
-
1027 
-
1028  // We can't flush an inner node until we flush its children
-
1029  while (1)
-
1030  {
-
1031  while (pos < branchFactor)
-
1032  {
-
1033  if (node->isEmptyBranch(pos))
-
1034  {
-
1035  ++pos;
-
1036  }
-
1037  else
-
1038  {
-
1039  // No need to do I/O. If the node isn't linked,
-
1040  // it can't need to be flushed
-
1041  int branch = pos;
-
1042  auto child = node->getChild(pos++);
-
1043 
-
1044  if (child && (child->cowid() != 0))
-
1045  {
-
1046  // This is a node that needs to be flushed
-
1047 
-
1048  child = preFlushNode(std::move(child));
-
1049 
-
1050  if (child->isInner())
-
1051  {
-
1052  // save our place and work on this node
-
1053 
-
1054  stack.emplace(std::move(node), branch);
-
1055  // The semantics of this changes when we move to c++-20
-
1056  // Right now no move will occur; With c++-20 child will
-
1057  // be moved from.
-
1058  node = std::static_pointer_cast<SHAMapInnerNode>(
-
1059  std::move(child));
-
1060  pos = 0;
-
1061  }
-
1062  else
-
1063  {
-
1064  // flush this leaf
-
1065  ++flushed;
-
1066 
-
1067  assert(node->cowid() == cowid_);
-
1068  child->updateHash();
-
1069  child->unshare();
-
1070 
-
1071  if (doWrite)
-
1072  child = writeNode(t, std::move(child));
-
1073 
-
1074  node->shareChild(branch, child);
-
1075  }
-
1076  }
-
1077  }
-
1078  }
-
1079 
-
1080  // update the hash of this inner node
-
1081  node->updateHashDeep();
-
1082 
-
1083  // This inner node can now be shared
-
1084  node->unshare();
-
1085 
-
1086  if (doWrite)
-
1087  node = std::static_pointer_cast<SHAMapInnerNode>(
-
1088  writeNode(t, std::move(node)));
-
1089 
-
1090  ++flushed;
-
1091 
-
1092  if (stack.empty())
-
1093  break;
-
1094 
-
1095  auto parent = std::move(stack.top().first);
-
1096  pos = stack.top().second;
-
1097  stack.pop();
-
1098 
-
1099  // Hook this inner node to its parent
-
1100  assert(parent->cowid() == cowid_);
-
1101  parent->shareChild(pos, node);
-
1102 
-
1103  // Continue with parent's next child, if any
-
1104  node = std::move(parent);
-
1105  ++pos;
-
1106  }
-
1107 
-
1108  // Last inner node is the new root_
-
1109  root_ = std::move(node);
-
1110 
-
1111  return flushed;
-
1112 }
-
1113 
-
1114 void
-
1115 SHAMap::dump(bool hash) const
-
1116 {
-
1117  int leafCount = 0;
-
1118  JLOG(journal_.info()) << " MAP Contains";
-
1119 
-
1120  std::stack<std::pair<SHAMapTreeNode*, SHAMapNodeID>> stack;
-
1121  stack.push({root_.get(), SHAMapNodeID()});
-
1122 
-
1123  do
-
1124  {
-
1125  auto [node, nodeID] = stack.top();
-
1126  stack.pop();
-
1127 
-
1128  JLOG(journal_.info()) << node->getString(nodeID);
-
1129  if (hash)
-
1130  {
-
1131  JLOG(journal_.info()) << "Hash: " << node->getHash();
-
1132  }
-
1133 
-
1134  if (node->isInner())
-
1135  {
-
1136  auto inner = static_cast<SHAMapInnerNode*>(node);
-
1137  for (int i = 0; i < branchFactor; ++i)
-
1138  {
-
1139  if (!inner->isEmptyBranch(i))
-
1140  {
-
1141  auto child = inner->getChildPointer(i);
-
1142  if (child)
-
1143  {
-
1144  assert(child->getHash() == inner->getChildHash(i));
-
1145  stack.push({child, nodeID.getChildNodeID(i)});
-
1146  }
-
1147  }
-
1148  }
-
1149  }
-
1150  else
-
1151  ++leafCount;
-
1152  } while (!stack.empty());
-
1153 
-
1154  JLOG(journal_.info()) << leafCount << " resident leaves";
-
1155 }
-
1156 
-
1157 std::shared_ptr<SHAMapTreeNode>
-
1158 SHAMap::cacheLookup(SHAMapHash const& hash) const
-
1159 {
-
1160  auto ret = f_.getTreeNodeCache(ledgerSeq_)->fetch(hash.as_uint256());
-
1161  assert(!ret || !ret->cowid());
-
1162  return ret;
-
1163 }
-
1164 
-
1165 void
-
1166 SHAMap::canonicalize(
-
1167  SHAMapHash const& hash,
-
1168  std::shared_ptr<SHAMapTreeNode>& node) const
-
1169 {
-
1170  assert(backed_);
-
1171  assert(node->cowid() == 0);
-
1172  assert(node->getHash() == hash);
-
1173 
-
1174  f_.getTreeNodeCache(ledgerSeq_)
-
1175  ->canonicalize_replace_client(hash.as_uint256(), node);
-
1176 }
-
1177 
-
1178 void
-
1179 SHAMap::invariants() const
-
1180 {
-
1181  (void)getHash(); // update node hashes
-
1182  auto node = root_.get();
-
1183  assert(node != nullptr);
-
1184  assert(!node->isLeaf());
-
1185  SharedPtrNodeStack stack;
-
1186  for (auto leaf = peekFirstItem(stack); leaf != nullptr;
-
1187  leaf = peekNextItem(leaf->peekItem()->key(), stack))
-
1188  ;
-
1189  node->invariants(true);
-
1190 }
-
1191 
-
1192 } // namespace ripple
+
798  inner->setChild(branch, makeTypedLeaf(type, std::move(item), cowid_));
+
799  }
+
800  else
+
801  {
+
802  // this is a leaf node that has to be made an inner node holding two
+
803  // items
+
804  auto leaf = std::static_pointer_cast<SHAMapLeafNode>(node);
+
805  std::shared_ptr<SHAMapItem const> otherItem = leaf->peekItem();
+
806  assert(otherItem && (tag != otherItem->key()));
+
807 
+
808  node = std::make_shared<SHAMapInnerNode>(node->cowid());
+
809 
+
810  unsigned int b1, b2;
+
811 
+
812  while ((b1 = selectBranch(nodeID, tag)) ==
+
813  (b2 = selectBranch(nodeID, otherItem->key())))
+
814  {
+
815  stack.push({node, nodeID});
+
816 
+
817  // we need a new inner node, since both go on same branch at this
+
818  // level
+
819  nodeID = nodeID.getChildNodeID(b1);
+
820  node = std::make_shared<SHAMapInnerNode>(cowid_);
+
821  }
+
822 
+
823  // we can add the two leaf nodes here
+
824  assert(node->isInner());
+
825 
+
826  auto inner = static_cast<SHAMapInnerNode*>(node.get());
+
827  inner->setChild(b1, makeTypedLeaf(type, std::move(item), cowid_));
+
828  inner->setChild(b2, makeTypedLeaf(type, std::move(otherItem), cowid_));
+
829  }
+
830 
+
831  dirtyUp(stack, tag, node);
+
832  return true;
+
833 }
+
834 
+
835 bool
+
836 SHAMap::addItem(SHAMapNodeType type, SHAMapItem&& i)
+
837 {
+
838  return addGiveItem(type, std::make_shared<SHAMapItem const>(std::move(i)));
+
839 }
+
840 
+
841 SHAMapHash
+
842 SHAMap::getHash() const
+
843 {
+
844  auto hash = root_->getHash();
+
845  if (hash.isZero())
+
846  {
+
847  const_cast<SHAMap&>(*this).unshare();
+
848  hash = root_->getHash();
+
849  }
+
850  return hash;
+
851 }
+
852 
+
853 bool
+
854 SHAMap::updateGiveItem(
+
855  SHAMapNodeType type,
+
856  std::shared_ptr<SHAMapItem const> item)
+
857 {
+
858  // can't change the tag but can change the hash
+
859  uint256 tag = item->key();
+
860 
+
861  assert(state_ != SHAMapState::Immutable);
+
862 
+
863  SharedPtrNodeStack stack;
+
864  walkTowardsKey(tag, &stack);
+
865 
+
866  if (stack.empty())
+
867  Throw<SHAMapMissingNode>(type_, tag);
+
868 
+
869  auto node = std::dynamic_pointer_cast<SHAMapLeafNode>(stack.top().first);
+
870  auto nodeID = stack.top().second;
+
871  stack.pop();
+
872 
+
873  if (!node || (node->peekItem()->key() != tag))
+
874  {
+
875  assert(false);
+
876  return false;
+
877  }
+
878 
+
879  if (node->getType() != type)
+
880  {
+
881  JLOG(journal_.fatal()) << "SHAMap::setItem: cross-type change!";
+
882  return false;
+
883  }
+
884 
+
885  node = unshareNode(std::move(node), nodeID);
+
886 
+
887  if (node->setItem(std::move(item)))
+
888  dirtyUp(stack, tag, node);
+
889 
+
890  return true;
+
891 }
+
892 
+
893 bool
+
894 SHAMap::fetchRoot(SHAMapHash const& hash, SHAMapSyncFilter* filter)
+
895 {
+
896  if (hash == root_->getHash())
+
897  return true;
+
898 
+
899  if (auto stream = journal_.trace())
+
900  {
+
901  if (type_ == SHAMapType::TRANSACTION)
+
902  {
+
903  stream << "Fetch root TXN node " << hash;
+
904  }
+
905  else if (type_ == SHAMapType::STATE)
+
906  {
+
907  stream << "Fetch root STATE node " << hash;
+
908  }
+
909  else
+
910  {
+
911  stream << "Fetch root SHAMap node " << hash;
+
912  }
+
913  }
+
914 
+
915  auto newRoot = fetchNodeNT(hash, filter);
+
916 
+
917  if (newRoot)
+
918  {
+
919  root_ = newRoot;
+
920  assert(root_->getHash() == hash);
+
921  return true;
+
922  }
+
923 
+
924  return false;
+
925 }
+
926 
+
939 std::shared_ptr<SHAMapTreeNode>
+
940 SHAMap::writeNode(NodeObjectType t, std::shared_ptr<SHAMapTreeNode> node) const
+
941 {
+
942  assert(node->cowid() == 0);
+
943  assert(backed_);
+
944 
+
945  canonicalize(node->getHash(), node);
+
946 
+
947  Serializer s;
+
948  node->serializeWithPrefix(s);
+
949  f_.db().store(
+
950  t, std::move(s.modData()), node->getHash().as_uint256(), ledgerSeq_);
+
951  return node;
+
952 }
+
953 
+
954 // We can't modify an inner node someone else might have a
+
955 // pointer to because flushing modifies inner nodes -- it
+
956 // makes them point to canonical/shared nodes.
+
957 template <class Node>
+
958 std::shared_ptr<Node>
+
959 SHAMap::preFlushNode(std::shared_ptr<Node> node) const
+
960 {
+
961  // A shared node should never need to be flushed
+
962  // because that would imply someone modified it
+
963  assert(node->cowid() != 0);
+
964 
+
965  if (node->cowid() != cowid_)
+
966  {
+
967  // Node is not uniquely ours, so unshare it before
+
968  // possibly modifying it
+
969  node = std::static_pointer_cast<Node>(node->clone(cowid_));
+
970  }
+
971  return node;
+
972 }
+
973 
+
974 int
+
975 SHAMap::unshare()
+
976 {
+
977  // Don't share nodes with parent map
+
978  return walkSubTree(false, hotUNKNOWN);
+
979 }
+
980 
+
981 int
+
982 SHAMap::flushDirty(NodeObjectType t)
+
983 {
+
984  // We only write back if this map is backed.
+
985  return walkSubTree(backed_, t);
+
986 }
+
987 
+
988 int
+
989 SHAMap::walkSubTree(bool doWrite, NodeObjectType t)
+
990 {
+
991  assert(!doWrite || backed_);
+
992 
+
993  int flushed = 0;
+
994 
+
995  if (!root_ || (root_->cowid() == 0))
+
996  return flushed;
+
997 
+
998  if (root_->isLeaf())
+
999  { // special case -- root_ is leaf
+
1000  root_ = preFlushNode(std::move(root_));
+
1001  root_->updateHash();
+
1002  root_->unshare();
+
1003 
+
1004  if (doWrite)
+
1005  root_ = writeNode(t, std::move(root_));
+
1006 
+
1007  return 1;
+
1008  }
+
1009 
+
1010  auto node = std::static_pointer_cast<SHAMapInnerNode>(root_);
+
1011 
+
1012  if (node->isEmpty())
+
1013  { // replace empty root with a new empty root
+
1014  root_ = std::make_shared<SHAMapInnerNode>(0);
+
1015  return 1;
+
1016  }
+
1017 
+
1018  // Stack of {parent,index,child} pointers representing
+
1019  // inner nodes we are in the process of flushing
+
1020  using StackEntry = std::pair<std::shared_ptr<SHAMapInnerNode>, int>;
+
1021  std::stack<StackEntry, std::vector<StackEntry>> stack;
+
1022 
+
1023  node = preFlushNode(std::move(node));
+
1024 
+
1025  int pos = 0;
+
1026 
+
1027  // We can't flush an inner node until we flush its children
+
1028  while (1)
+
1029  {
+
1030  while (pos < branchFactor)
+
1031  {
+
1032  if (node->isEmptyBranch(pos))
+
1033  {
+
1034  ++pos;
+
1035  }
+
1036  else
+
1037  {
+
1038  // No need to do I/O. If the node isn't linked,
+
1039  // it can't need to be flushed
+
1040  int branch = pos;
+
1041  auto child = node->getChild(pos++);
+
1042 
+
1043  if (child && (child->cowid() != 0))
+
1044  {
+
1045  // This is a node that needs to be flushed
+
1046 
+
1047  child = preFlushNode(std::move(child));
+
1048 
+
1049  if (child->isInner())
+
1050  {
+
1051  // save our place and work on this node
+
1052 
+
1053  stack.emplace(std::move(node), branch);
+
1054  // The semantics of this changes when we move to c++-20
+
1055  // Right now no move will occur; With c++-20 child will
+
1056  // be moved from.
+
1057  node = std::static_pointer_cast<SHAMapInnerNode>(
+
1058  std::move(child));
+
1059  pos = 0;
+
1060  }
+
1061  else
+
1062  {
+
1063  // flush this leaf
+
1064  ++flushed;
+
1065 
+
1066  assert(node->cowid() == cowid_);
+
1067  child->updateHash();
+
1068  child->unshare();
+
1069 
+
1070  if (doWrite)
+
1071  child = writeNode(t, std::move(child));
+
1072 
+
1073  node->shareChild(branch, child);
+
1074  }
+
1075  }
+
1076  }
+
1077  }
+
1078 
+
1079  // update the hash of this inner node
+
1080  node->updateHashDeep();
+
1081 
+
1082  // This inner node can now be shared
+
1083  node->unshare();
+
1084 
+
1085  if (doWrite)
+
1086  node = std::static_pointer_cast<SHAMapInnerNode>(
+
1087  writeNode(t, std::move(node)));
+
1088 
+
1089  ++flushed;
+
1090 
+
1091  if (stack.empty())
+
1092  break;
+
1093 
+
1094  auto parent = std::move(stack.top().first);
+
1095  pos = stack.top().second;
+
1096  stack.pop();
+
1097 
+
1098  // Hook this inner node to its parent
+
1099  assert(parent->cowid() == cowid_);
+
1100  parent->shareChild(pos, node);
+
1101 
+
1102  // Continue with parent's next child, if any
+
1103  node = std::move(parent);
+
1104  ++pos;
+
1105  }
+
1106 
+
1107  // Last inner node is the new root_
+
1108  root_ = std::move(node);
+
1109 
+
1110  return flushed;
+
1111 }
+
1112 
+
1113 void
+
1114 SHAMap::dump(bool hash) const
+
1115 {
+
1116  int leafCount = 0;
+
1117  JLOG(journal_.info()) << " MAP Contains";
+
1118 
+
1119  std::stack<std::pair<SHAMapTreeNode*, SHAMapNodeID>> stack;
+
1120  stack.push({root_.get(), SHAMapNodeID()});
+
1121 
+
1122  do
+
1123  {
+
1124  auto [node, nodeID] = stack.top();
+
1125  stack.pop();
+
1126 
+
1127  JLOG(journal_.info()) << node->getString(nodeID);
+
1128  if (hash)
+
1129  {
+
1130  JLOG(journal_.info()) << "Hash: " << node->getHash();
+
1131  }
+
1132 
+
1133  if (node->isInner())
+
1134  {
+
1135  auto inner = static_cast<SHAMapInnerNode*>(node);
+
1136  for (int i = 0; i < branchFactor; ++i)
+
1137  {
+
1138  if (!inner->isEmptyBranch(i))
+
1139  {
+
1140  auto child = inner->getChildPointer(i);
+
1141  if (child)
+
1142  {
+
1143  assert(child->getHash() == inner->getChildHash(i));
+
1144  stack.push({child, nodeID.getChildNodeID(i)});
+
1145  }
+
1146  }
+
1147  }
+
1148  }
+
1149  else
+
1150  ++leafCount;
+
1151  } while (!stack.empty());
+
1152 
+
1153  JLOG(journal_.info()) << leafCount << " resident leaves";
+
1154 }
+
1155 
+
1156 std::shared_ptr<SHAMapTreeNode>
+
1157 SHAMap::cacheLookup(SHAMapHash const& hash) const
+
1158 {
+
1159  auto ret = f_.getTreeNodeCache(ledgerSeq_)->fetch(hash.as_uint256());
+
1160  assert(!ret || !ret->cowid());
+
1161  return ret;
+
1162 }
+
1163 
+
1164 void
+
1165 SHAMap::canonicalize(
+
1166  SHAMapHash const& hash,
+
1167  std::shared_ptr<SHAMapTreeNode>& node) const
+
1168 {
+
1169  assert(backed_);
+
1170  assert(node->cowid() == 0);
+
1171  assert(node->getHash() == hash);
+
1172 
+
1173  f_.getTreeNodeCache(ledgerSeq_)
+
1174  ->canonicalize_replace_client(hash.as_uint256(), node);
+
1175 }
+
1176 
+
1177 void
+
1178 SHAMap::invariants() const
+
1179 {
+
1180  (void)getHash(); // update node hashes
+
1181  auto node = root_.get();
+
1182  assert(node != nullptr);
+
1183  assert(!node->isLeaf());
+
1184  SharedPtrNodeStack stack;
+
1185  for (auto leaf = peekFirstItem(stack); leaf != nullptr;
+
1186  leaf = peekNextItem(leaf->peekItem()->key(), stack))
+
1187  ;
+
1188  node->invariants(true);
+
1189 }
+
1190 
+
1191 } // namespace ripple
beast::Journal::fatal
Stream fatal() const
Definition: Journal.h:339
ripple::SHAMapInnerNode::isInner
bool isInner() const override
Determines if this is an inner node.
Definition: SHAMapInnerNode.h:132
ripple::hotUNKNOWN
@ hotUNKNOWN
Definition: NodeObject.h:33
-
ripple::SHAMap::invariants
void invariants() const
Definition: SHAMap.cpp:1179
+
ripple::SHAMap::invariants
void invariants() const
Definition: SHAMap.cpp:1178
ripple::Family::getTreeNodeCache
virtual std::shared_ptr< TreeNodeCache > getTreeNodeCache(std::uint32_t ledgerSeq)=0
Return a pointer to the Family Tree Node Cache.
ripple::SHAMap::branchFactor
static constexpr unsigned int branchFactor
Number of children each non-leaf node has (the 'radix tree' part of the map)
Definition: SHAMap.h:116
ripple::SHAMap::descendNoStore
std::shared_ptr< SHAMapTreeNode > descendNoStore(std::shared_ptr< SHAMapInnerNode > const &, int branch) const
Definition: SHAMap.cpp:340
ripple::ListDisposition::pending
@ pending
List will be valid in the future.
-
ripple::SHAMapInnerNode::setChild
void setChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)
Definition: SHAMapInnerNode.cpp:287
ripple::makeSlice
std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)
Definition: Slice.h:241
ripple::SHAMapNodeID::getChildNodeID
SHAMapNodeID getChildNodeID(unsigned int m) const
Definition: SHAMapNodeID.cpp:74
ripple::SHAMap::SHAMap
SHAMap(SHAMap const &)=delete
ripple::SHAMap::peekNextItem
SHAMapLeafNode const * peekNextItem(uint256 const &id, SharedPtrNodeStack &stack) const
Definition: SHAMap.cpp:557
ripple::SHAMapSyncFilter::getNode
virtual std::optional< Blob > getNode(SHAMapHash const &nodeHash) const =0
std::shared_ptr
STL class.
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
ripple::SHAMap::backed_
bool backed_
Definition: SHAMap.h:110
ripple::SHAMapNodeType::tnINNER
@ tnINNER
ripple::SHAMap::type_
const SHAMapType type_
Definition: SHAMap.h:109
@@ -1274,13 +1272,13 @@ $(function() {
ripple::selectBranch
unsigned int selectBranch(SHAMapNodeID const &id, uint256 const &hash)
Returns the branch that would contain the given hash.
Definition: SHAMapNodeID.cpp:121
ripple::SHAMap::fetchNodeFromDB
std::shared_ptr< SHAMapTreeNode > fetchNodeFromDB(SHAMapHash const &hash) const
Definition: SHAMap.cpp:163
ripple::Serializer::modData
Blob & modData()
Definition: Serializer.h:178
-
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:837
+
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:836
ripple::SHAMapNodeType::tnACCOUNT_STATE
@ tnACCOUNT_STATE
std::pair::first
T first
ripple::SHAMapType::TRANSACTION
@ TRANSACTION
ripple::SHAMapInnerNode::canonicalizeChild
std::shared_ptr< SHAMapTreeNode > canonicalizeChild(int branch, std::shared_ptr< SHAMapTreeNode > node)
Definition: SHAMapInnerNode.cpp:371
-
ripple::SHAMap::walkSubTree
int walkSubTree(bool doWrite, NodeObjectType t)
Definition: SHAMap.cpp:990
-
ripple::SHAMap::dump
void dump(bool withHashes=false) const
Definition: SHAMap.cpp:1115
+
ripple::SHAMap::walkSubTree
int walkSubTree(bool doWrite, NodeObjectType t)
Definition: SHAMap.cpp:989
+
ripple::SHAMap::dump
void dump(bool withHashes=false) const
Definition: SHAMap.cpp:1114
ripple::NodeObjectType
NodeObjectType
The types of node objects.
Definition: NodeObject.h:32
ripple::SHAMap::onlyBelow
std::shared_ptr< SHAMapItem const > const & onlyBelow(SHAMapTreeNode *) const
If there is only one leaf below this node, get its contents.
Definition: SHAMap.cpp:507
ripple::SHAMapNodeType
SHAMapNodeType
Definition: SHAMapTreeNode.h:46
@@ -1301,7 +1299,7 @@ $(function() {
ripple::SHAMap::snapShot
std::shared_ptr< SHAMap > snapShot(bool isMutable) const
Definition: SHAMap.cpp:70
ripple::SHAMapType::STATE
@ STATE
ripple::const_iterator
Dir::const_iterator const_iterator
Definition: Directory.cpp:24
-
ripple::SHAMap::cacheLookup
std::shared_ptr< SHAMapTreeNode > cacheLookup(SHAMapHash const &hash) const
Definition: SHAMap.cpp:1158
+
ripple::SHAMap::cacheLookup
std::shared_ptr< SHAMapTreeNode > cacheLookup(SHAMapHash const &hash) const
Definition: SHAMap.cpp:1157
ripple::Family::missingNode
virtual void missingNode(std::uint32_t refNum)=0
ripple::Family::db
virtual NodeStore::Database & db()=0
ripple::SHAMapLeafNode
Definition: SHAMapLeafNode.h:32
@@ -1316,6 +1314,7 @@ $(function() {
ripple::base_uint< 256 >
ripple::SHAMap::hasItem
bool hasItem(uint256 const &id) const
Does the tree have an item with the given ID?
Definition: SHAMap.cpp:684
ripple::SHAMapInnerNode::getChildHash
SHAMapHash const & getChildHash(int m) const
Definition: SHAMapInnerNode.cpp:361
+
ripple::SHAMapInnerNode::setChild
void setChild(int m, std::shared_ptr< SHAMapTreeNode > child)
Definition: SHAMapInnerNode.cpp:287
ripple::SHAMapInnerNode
Definition: SHAMapInnerNode.h:41
ripple::SHAMap::peekFirstItem
SHAMapLeafNode const * peekFirstItem(SharedPtrNodeStack &stack) const
Definition: SHAMap.cpp:543
ripple::SHAMapItem
Definition: SHAMapItem.h:31
@@ -1333,10 +1332,10 @@ $(function() {
beast::Journal::info
Stream info() const
Definition: Journal.h:321
ripple::SHAMap::journal_
beast::Journal journal_
Definition: SHAMap.h:99
ripple::SHAMapTreeNode::isLeaf
virtual bool isLeaf() const =0
Determines if this is a leaf node.
-
ripple::SHAMap::canonicalize
void canonicalize(SHAMapHash const &hash, std::shared_ptr< SHAMapTreeNode > &) const
Definition: SHAMap.cpp:1166
+
ripple::SHAMap::canonicalize
void canonicalize(SHAMapHash const &hash, std::shared_ptr< SHAMapTreeNode > &) const
Definition: SHAMap.cpp:1165
ripple::Family
Definition: Family.h:32
std::uint32_t
-
ripple::SHAMap::fetchRoot
bool fetchRoot(SHAMapHash const &hash, SHAMapSyncFilter *filter)
Definition: SHAMap.cpp:895
+
ripple::SHAMap::fetchRoot
bool fetchRoot(SHAMapHash const &hash, SHAMapSyncFilter *filter)
Definition: SHAMap.cpp:894
ripple::SHAMapTreeNode::getHash
SHAMapHash const & getHash() const
Return the hash of this node.
Definition: SHAMapTreeNode.h:143
ripple::Serializer
Definition: Serializer.h:39
ripple::SHAMapTreeNode::makeFromPrefix
static std::shared_ptr< SHAMapTreeNode > makeFromPrefix(Slice rawNode, SHAMapHash const &hash)
Definition: SHAMapTreeNode.cpp:148
@@ -1347,24 +1346,24 @@ $(function() {
ripple::SHAMap::checkFilter
std::shared_ptr< SHAMapTreeNode > checkFilter(SHAMapHash const &hash, SHAMapSyncFilter *filter) const
Definition: SHAMap.cpp:204
ripple::SHAMap::dirtyUp
void dirtyUp(SharedPtrNodeStack &stack, uint256 const &target, std::shared_ptr< SHAMapTreeNode > terminal)
Update hashes up to the root.
Definition: SHAMap.cpp:94
ripple::SHAMap::findKey
SHAMapLeafNode * findKey(uint256 const &id) const
Return nullptr if key not found.
Definition: SHAMap.cpp:154
-
ripple::SHAMap::updateGiveItem
bool updateGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const >)
Definition: SHAMap.cpp:855
+
ripple::SHAMap::updateGiveItem
bool updateGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const >)
Definition: SHAMap.cpp:854
ripple::makeTypedLeaf
std::shared_ptr< SHAMapLeafNode > makeTypedLeaf(SHAMapNodeType type, std::shared_ptr< SHAMapItem const > item, std::uint32_t owner)
Definition: SHAMap.cpp:31
ripple::SHAMap::end
const_iterator end() const
Definition: SHAMap.h:744
ripple::SHAMap::walkTowardsKey
SHAMapLeafNode * walkTowardsKey(uint256 const &id, SharedPtrNodeStack *stack=nullptr) const
Walk towards the specified id, returning the node.
Definition: SHAMap.cpp:128
ripple::LogicError
void LogicError(std::string const &how) noexcept
Called when faulty logic causes a broken invariant.
Definition: contract.cpp:48
ripple::SHAMap::addGiveItem
bool addGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const > item)
Definition: SHAMap.cpp:768
-
ripple::SHAMap::unshare
int unshare()
Convert any modified nodes to shared.
Definition: SHAMap.cpp:976
+
ripple::SHAMap::unshare
int unshare()
Convert any modified nodes to shared.
Definition: SHAMap.cpp:975
ripple::SHAMap::descendAsync
SHAMapTreeNode * descendAsync(SHAMapInnerNode *parent, int branch, SHAMapSyncFilter *filter, bool &pending, descendCallback &&) const
Definition: SHAMap.cpp:380
-
ripple::SHAMap::writeNode
std::shared_ptr< SHAMapTreeNode > writeNode(NodeObjectType t, std::shared_ptr< SHAMapTreeNode > node) const
write and canonicalize modified node
Definition: SHAMap.cpp:941
+
ripple::SHAMap::writeNode
std::shared_ptr< SHAMapTreeNode > writeNode(NodeObjectType t, std::shared_ptr< SHAMapTreeNode > node) const
write and canonicalize modified node
Definition: SHAMap.cpp:940
ripple::SHAMap::leafDepth
static constexpr unsigned int leafDepth
The depth of the hash map: data is only present in the leaves.
Definition: SHAMap.h:120
std::stack::empty
T empty(T... args)
ripple::SHAMapState::Immutable
@ Immutable
The map is set in stone and cannot be changed.
std::stack::push
T push(T... args)
ripple::SHAMapType
SHAMapType
Definition: SHAMapMissingNode.h:32
std::make_pair
T make_pair(T... args)
-
ripple::SHAMap::preFlushNode
std::shared_ptr< Node > preFlushNode(std::shared_ptr< Node > node) const
prepare a node to be modified before flushing
Definition: SHAMap.cpp:960
+
ripple::SHAMap::preFlushNode
std::shared_ptr< Node > preFlushNode(std::shared_ptr< Node > node) const
prepare a node to be modified before flushing
Definition: SHAMap.cpp:959
ripple::NodeStore::Database::fetchNodeObject
std::shared_ptr< NodeObject > fetchNodeObject(uint256 const &hash, std::uint32_t ledgerSeq=0, FetchType fetchType=FetchType::synchronous, bool duplicate=false)
Fetch a node object.
Definition: Database.cpp:252
-
ripple::SHAMap::flushDirty
int flushDirty(NodeObjectType t)
Flush modified nodes to the nodestore and convert them to shared.
Definition: SHAMap.cpp:983
+
ripple::SHAMap::flushDirty
int flushDirty(NodeObjectType t)
Flush modified nodes to the nodestore and convert them to shared.
Definition: SHAMap.cpp:982
ripple::Family::journal
virtual beast::Journal const & journal()=0
ripple::SHAMap::lower_bound
const_iterator lower_bound(uint256 const &id) const
Find the object with the greatest object id smaller than the input id.
Definition: SHAMap.cpp:646
ripple::SHAMapLeafNode::peekItem
std::shared_ptr< SHAMapItem const > const & peekItem() const
Definition: SHAMapLeafNode.cpp:44
diff --git a/SHAMap_8h_source.html b/SHAMap_8h_source.html index bbac0ef3f1..fd074114a0 100644 --- a/SHAMap_8h_source.html +++ b/SHAMap_8h_source.html @@ -711,7 +711,7 @@ $(function() {
ripple::SHAMap::MissingNodes
Definition: SHAMap.h:502
ripple::SHAMapAddNode
Definition: SHAMapAddNode.h:28
-
ripple::SHAMap::invariants
void invariants() const
Definition: SHAMap.cpp:1179
+
ripple::SHAMap::invariants
void invariants() const
Definition: SHAMap.cpp:1178
ripple::SHAMap::clearSynching
void clearSynching()
Definition: SHAMap.h:611
ripple::SHAMap::isValid
bool isValid() const
Definition: SHAMap.h:617
ripple::SHAMap::branchFactor
static constexpr unsigned int branchFactor
Number of children each non-leaf node has (the 'radix tree' part of the map)
Definition: SHAMap.h:116
@@ -721,7 +721,7 @@ $(function() {
ripple::SHAMap::peekNextItem
SHAMapLeafNode const * peekNextItem(uint256 const &id, SharedPtrNodeStack &stack) const
Definition: SHAMap.cpp:557
ripple::Dir::const_iterator
Definition: Directory.h:49
std::shared_ptr
STL class.
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
ripple::SHAMap::backed_
bool backed_
Definition: SHAMap.h:110
ripple::SHAMap::type_
const SHAMapType type_
Definition: SHAMap.h:109
ripple::SHAMap::deepCompare
bool deepCompare(SHAMap &other) const
Definition: SHAMapSync.cpp:667
@@ -730,12 +730,12 @@ $(function() {
ripple::SHAMap::MissingNodes::deferred_
int deferred_
Definition: SHAMap.h:541
ripple::SHAMap::family
Family const & family() const
Definition: SHAMap.h:139
ripple::SHAMap::fetchNodeFromDB
std::shared_ptr< SHAMapTreeNode > fetchNodeFromDB(SHAMapHash const &hash) const
Definition: SHAMap.cpp:163
-
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:837
+
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:836
ripple::Slice
An immutable linear range of bytes.
Definition: Slice.h:44
std::pair
ripple::SHAMap::MissingNodes::MissingNodes
MissingNodes(int max, SHAMapSyncFilter *filter, int maxDefer, std::uint32_t generation)
Definition: SHAMap.h:550
-
ripple::SHAMap::walkSubTree
int walkSubTree(bool doWrite, NodeObjectType t)
Definition: SHAMap.cpp:990
-
ripple::SHAMap::dump
void dump(bool withHashes=false) const
Definition: SHAMap.cpp:1115
+
ripple::SHAMap::walkSubTree
int walkSubTree(bool doWrite, NodeObjectType t)
Definition: SHAMap.cpp:989
+
ripple::SHAMap::dump
void dump(bool withHashes=false) const
Definition: SHAMap.cpp:1114
ripple::SHAMap::const_iterator::stack_
SharedPtrNodeStack stack_
Definition: SHAMap.h:640
vector
ripple::NodeObjectType
NodeObjectType
The types of node objects.
Definition: NodeObject.h:32
@@ -765,7 +765,7 @@ $(function() {
ripple::Dir::const_iterator::pointer
value_type const * pointer
Definition: Directory.h:53
ripple::SHAMap::gmn_ProcessNodes
void gmn_ProcessNodes(MissingNodes &, MissingNodes::StackEntry &node)
Definition: SHAMapSync.cpp:172
ripple::const_iterator
Dir::const_iterator const_iterator
Definition: Directory.cpp:24
-
ripple::SHAMap::cacheLookup
std::shared_ptr< SHAMapTreeNode > cacheLookup(SHAMapHash const &hash) const
Definition: SHAMap.cpp:1158
+
ripple::SHAMap::cacheLookup
std::shared_ptr< SHAMapTreeNode > cacheLookup(SHAMapHash const &hash) const
Definition: SHAMap.cpp:1157
ripple::SHAMap::const_iterator::operator->
pointer operator->() const
Definition: SHAMap.h:701
ripple::SHAMapLeafNode
Definition: SHAMapLeafNode.h:32
ripple::SHAMap::setFull
void setFull()
Definition: SHAMap.h:580
@@ -799,7 +799,7 @@ $(function() {
ripple::SHAMap::descendThrow
SHAMapTreeNode * descendThrow(SHAMapInnerNode *, int branch) const
Definition: SHAMap.cpp:283
ripple::SHAMap::~SHAMap
~SHAMap()=default
ripple::SHAMap::journal_
beast::Journal journal_
Definition: SHAMap.h:99
-
ripple::SHAMap::canonicalize
void canonicalize(SHAMapHash const &hash, std::shared_ptr< SHAMapTreeNode > &) const
Definition: SHAMap.cpp:1166
+
ripple::SHAMap::canonicalize
void canonicalize(SHAMapHash const &hash, std::shared_ptr< SHAMapTreeNode > &) const
Definition: SHAMap.cpp:1165
ripple::SHAMap::MissingNodes::missingHashes_
std::set< SHAMapHash > missingHashes_
Definition: SHAMap.h:517
ripple::Family
Definition: Family.h:32
beast::Journal
A generic endpoint for log messages.
Definition: Journal.h:58
@@ -809,7 +809,7 @@ $(function() {
ripple::SHAMap::setLedgerSeq
void setLedgerSeq(std::uint32_t lseq)
Definition: SHAMap.h:586
ripple::SHAMap::getMissingNodes
std::vector< std::pair< SHAMapNodeID, uint256 > > getMissingNodes(int maxNodes, SHAMapSyncFilter *filter)
Check for nodes in the SHAMap not available.
Definition: SHAMapSync.cpp:317
ripple::SHAMap::const_iterator::map_
SHAMap const * map_
Definition: SHAMap.h:641
-
ripple::SHAMap::fetchRoot
bool fetchRoot(SHAMapHash const &hash, SHAMapSyncFilter *filter)
Definition: SHAMap.cpp:895
+
ripple::SHAMap::fetchRoot
bool fetchRoot(SHAMapHash const &hash, SHAMapSyncFilter *filter)
Definition: SHAMap.cpp:894
ripple::SHAMap::walkMap
void walkMap(std::vector< SHAMapMissingNode > &missingNodes, int maxMissing) const
Definition: SHAMapDelta.cpp:252
ripple::Serializer
Definition: Serializer.h:39
ripple::SHAMap::upper_bound
const_iterator upper_bound(uint256 const &id) const
Find the first item after the given item.
Definition: SHAMap.cpp:609
@@ -824,17 +824,17 @@ $(function() {
ripple::SHAMap::setUnbacked
void setUnbacked()
Definition: SHAMap.h:623
ripple::SHAMap::MissingNodes::deferCondVar_
std::condition_variable deferCondVar_
Definition: SHAMap.h:543
ripple::SHAMap::findKey
SHAMapLeafNode * findKey(uint256 const &id) const
Return nullptr if key not found.
Definition: SHAMap.cpp:154
-
ripple::SHAMap::updateGiveItem
bool updateGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const >)
Definition: SHAMap.cpp:855
+
ripple::SHAMap::updateGiveItem
bool updateGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const >)
Definition: SHAMap.cpp:854
ripple::SHAMap::const_iterator::const_iterator
const_iterator()=delete
ripple::SHAMap::end
const_iterator end() const
Definition: SHAMap.h:744
ripple::SHAMap::walkTowardsKey
SHAMapLeafNode * walkTowardsKey(uint256 const &id, SharedPtrNodeStack *stack=nullptr) const
Walk towards the specified id, returning the node.
Definition: SHAMap.cpp:128
std
STL namespace.
cassert
ripple::SHAMap::addGiveItem
bool addGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const > item)
Definition: SHAMap.cpp:768
-
ripple::SHAMap::unshare
int unshare()
Convert any modified nodes to shared.
Definition: SHAMap.cpp:976
+
ripple::SHAMap::unshare
int unshare()
Convert any modified nodes to shared.
Definition: SHAMap.cpp:975
ripple::SHAMap::descendAsync
SHAMapTreeNode * descendAsync(SHAMapInnerNode *parent, int branch, SHAMapSyncFilter *filter, bool &pending, descendCallback &&) const
Definition: SHAMap.cpp:380
std::condition_variable
-
ripple::SHAMap::writeNode
std::shared_ptr< SHAMapTreeNode > writeNode(NodeObjectType t, std::shared_ptr< SHAMapTreeNode > node) const
write and canonicalize modified node
Definition: SHAMap.cpp:941
+
ripple::SHAMap::writeNode
std::shared_ptr< SHAMapTreeNode > writeNode(NodeObjectType t, std::shared_ptr< SHAMapTreeNode > node) const
write and canonicalize modified node
Definition: SHAMap.cpp:940
ripple::SHAMap::leafDepth
static constexpr unsigned int leafDepth
The depth of the hash map: data is only present in the leaves.
Definition: SHAMap.h:120
ripple::SHAMap::SharedPtrNodeStack
std::stack< std::pair< std::shared_ptr< SHAMapTreeNode >, SHAMapNodeID > > SharedPtrNodeStack
Definition: SHAMap.h:362
std::ptrdiff_t
@@ -848,9 +848,9 @@ $(function() {
std::mutex
STL class.
ripple::SHAMapState::Invalid
@ Invalid
The map is known to not be valid.
ripple::SHAMap::const_iterator::pointer
value_type const * pointer
Definition: SHAMap.h:637
-
ripple::SHAMap::preFlushNode
std::shared_ptr< Node > preFlushNode(std::shared_ptr< Node > node) const
prepare a node to be modified before flushing
Definition: SHAMap.cpp:960
+
ripple::SHAMap::preFlushNode
std::shared_ptr< Node > preFlushNode(std::shared_ptr< Node > node) const
prepare a node to be modified before flushing
Definition: SHAMap.cpp:959
ripple::SHAMap::addKnownNode
SHAMapAddNode addKnownNode(SHAMapNodeID const &nodeID, Slice const &rawNode, SHAMapSyncFilter *filter)
Definition: SHAMapSync.cpp:570
-
ripple::SHAMap::flushDirty
int flushDirty(NodeObjectType t)
Flush modified nodes to the nodestore and convert them to shared.
Definition: SHAMap.cpp:983
+
ripple::SHAMap::flushDirty
int flushDirty(NodeObjectType t)
Flush modified nodes to the nodestore and convert them to shared.
Definition: SHAMap.cpp:982
ripple::SHAMap::lower_bound
const_iterator lower_bound(uint256 const &id) const
Find the object with the greatest object id smaller than the input id.
Definition: SHAMap.cpp:646
ripple::SHAMap::unshareNode
std::shared_ptr< Node > unshareNode(std::shared_ptr< Node >, SHAMapNodeID const &nodeID)
Unshare the node, allowing it to be modified.
Definition: SHAMap.cpp:424
ripple::SHAMap::descend
SHAMapTreeNode * descend(SHAMapInnerNode *, int branch) const
Definition: SHAMap.cpp:306
diff --git a/SHAMap__test_8cpp_source.html b/SHAMap__test_8cpp_source.html index 0a163fd922..01a7301821 100644 --- a/SHAMap__test_8cpp_source.html +++ b/SHAMap__test_8cpp_source.html @@ -475,15 +475,15 @@ $(function() {
404 } // namespace ripple
ripple::tests::SHAMap_test
Definition: SHAMap_test.cpp:110
-
ripple::SHAMap::invariants
void invariants() const
Definition: SHAMap.cpp:1179
+
ripple::SHAMap::invariants
void invariants() const
Definition: SHAMap.cpp:1178
std::shared_ptr
STL class.
-
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:843
+
ripple::SHAMap::getHash
SHAMapHash getHash() const
Definition: SHAMap.cpp:842
std::is_nothrow_destructible
-
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:837
+
ripple::SHAMap::addItem
bool addItem(SHAMapNodeType type, SHAMapItem &&i)
Definition: SHAMap.cpp:836
ripple::Slice
An immutable linear range of bytes.
Definition: Slice.h:44
ripple::SHAMapNodeType::tnACCOUNT_STATE
@ tnACCOUNT_STATE
ripple::tests::SHAMap_test::run
void run(bool backed, beast::Journal const &journal)
Definition: SHAMap_test.cpp:132
-
ripple::SHAMap::dump
void dump(bool withHashes=false) const
Definition: SHAMap.cpp:1115
+
ripple::SHAMap::dump
void dump(bool withHashes=false) const
Definition: SHAMap.cpp:1114
std::vector
STL class.
std::map::size
T size(T... args)
ripple::tests::TestNodeFamily
Definition: common.h:32
diff --git a/classripple_1_1SHAMap.html b/classripple_1_1SHAMap.html index 5bf61393f4..205f6258fb 100644 --- a/classripple_1_1SHAMap.html +++ b/classripple_1_1SHAMap.html @@ -773,7 +773,7 @@ Private Attributes
-

Definition at line 895 of file SHAMap.cpp.

+

Definition at line 894 of file SHAMap.cpp.

@@ -845,7 +845,7 @@ Private Attributes
-

Definition at line 837 of file SHAMap.cpp.

+

Definition at line 836 of file SHAMap.cpp.

@@ -864,7 +864,7 @@ Private Attributes
-

Definition at line 843 of file SHAMap.cpp.

+

Definition at line 842 of file SHAMap.cpp.

@@ -894,7 +894,7 @@ Private Attributes
-

Definition at line 855 of file SHAMap.cpp.

+

Definition at line 854 of file SHAMap.cpp.

@@ -1541,7 +1541,7 @@ Private Attributes

Convert any modified nodes to shared.

-

Definition at line 976 of file SHAMap.cpp.

+

Definition at line 975 of file SHAMap.cpp.

@@ -1563,7 +1563,7 @@ Private Attributes

Flush modified nodes to the nodestore and convert them to shared.

-

Definition at line 983 of file SHAMap.cpp.

+

Definition at line 982 of file SHAMap.cpp.

@@ -1682,7 +1682,7 @@ Private Attributes
-

Definition at line 1115 of file SHAMap.cpp.

+

Definition at line 1114 of file SHAMap.cpp.

@@ -1701,7 +1701,7 @@ Private Attributes
-

Definition at line 1179 of file SHAMap.cpp.

+

Definition at line 1178 of file SHAMap.cpp.

@@ -1729,7 +1729,7 @@ Private Attributes
-

Definition at line 1158 of file SHAMap.cpp.

+

Definition at line 1157 of file SHAMap.cpp.

@@ -1767,7 +1767,7 @@ Private Attributes
-

Definition at line 1166 of file SHAMap.cpp.

+

Definition at line 1165 of file SHAMap.cpp.

@@ -2118,7 +2118,7 @@ template<class Node >

prepare a node to be modified before flushing

-

Definition at line 960 of file SHAMap.cpp.

+

Definition at line 959 of file SHAMap.cpp.

@@ -2162,7 +2162,7 @@ template<class Node >

1) An unshared, unshareable node needs to be made shareable so immutable SHAMap's can have references to it. 2) An unshareable node is shared. This happens when you make a mutable snapshot of a mutable SHAMap.

Note
The node must have already been unshared by having the caller first call SHAMapTreeNode::unshare().
-

Definition at line 941 of file SHAMap.cpp.

+

Definition at line 940 of file SHAMap.cpp.

@@ -2866,7 +2866,7 @@ template<class Node >
-

Definition at line 990 of file SHAMap.cpp.

+

Definition at line 989 of file SHAMap.cpp.

diff --git a/classripple_1_1SHAMapInnerNode-members.html b/classripple_1_1SHAMapInnerNode-members.html index f5be2028bb..7acb064780 100644 --- a/classripple_1_1SHAMapInnerNode-members.html +++ b/classripple_1_1SHAMapInnerNode-members.html @@ -114,7 +114,7 @@ $(function() { resizeChildArrays(std::uint8_t toAllocate)ripple::SHAMapInnerNodeprivate serializeForWire(Serializer &) const overrideripple::SHAMapInnerNodevirtual serializeWithPrefix(Serializer &) const overrideripple::SHAMapInnerNodevirtual - setChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)ripple::SHAMapInnerNode + setChild(int m, std::shared_ptr< SHAMapTreeNode > child)ripple::SHAMapInnerNode setFullBelowGen(std::uint32_t gen)ripple::SHAMapInnerNode SHAMapInnerNode(std::uint32_t cowid, std::uint8_t numAllocatedChildren=2)ripple::SHAMapInnerNodeexplicit SHAMapInnerNode(SHAMapInnerNode const &)=deleteripple::SHAMapInnerNode diff --git a/classripple_1_1SHAMapInnerNode.html b/classripple_1_1SHAMapInnerNode.html index 113e0c2d14..44522e03e4 100644 --- a/classripple_1_1SHAMapInnerNode.html +++ b/classripple_1_1SHAMapInnerNode.html @@ -138,8 +138,8 @@ Public Member Functions   SHAMapHash const & getChildHash (int m) const   -void setChild (int m, std::shared_ptr< SHAMapTreeNode > const &child) -  +void setChild (int m, std::shared_ptr< SHAMapTreeNode > child) +  void shareChild (int m, std::shared_ptr< SHAMapTreeNode > const &child)   SHAMapTreeNodegetChildPointer (int branch) @@ -717,8 +717,8 @@ template<class F > - -

◆ setChild()

+ +

◆ setChild()

@@ -732,7 +732,7 @@ template<class F >
- std::shared_ptr< SHAMapTreeNode > const &  + std::shared_ptr< SHAMapTreeNodechild  diff --git a/functions_func_s.html b/functions_func_s.html index 34fe0630bc..90749191a8 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -399,7 +399,7 @@ $(function() { , ripple::SHAMapStoreImp
  • setChild() -: ripple::SHAMapInnerNode +: ripple::SHAMapInnerNode
  • setClusterFee() : ripple::LoadFeeTrack diff --git a/functions_s.html b/functions_s.html index 4a0dca6f69..2cbd049a19 100644 --- a/functions_s.html +++ b/functions_s.html @@ -688,7 +688,7 @@ $(function() { , ripple::SHAMapStoreImp
  • setChild() -: ripple::SHAMapInnerNode +: ripple::SHAMapInnerNode
  • setClusterFee() : ripple::LoadFeeTrack diff --git a/search/all_13.js b/search/all_13.js index 3b59441080..718d66c9fe 100644 --- a/search/all_13.js +++ b/search/all_13.js @@ -257,7 +257,7 @@ var searchData= ['setbuildingledger_8598',['setBuildingLedger',['../classripple_1_1LedgerMaster.html#a07b039ad7b58f43b8587e57c49e596f0',1,'ripple::LedgerMaster']]], ['setcachelimiting_8599',['setCacheLimiting',['../classripple_1_1DirectStepI.html#a592ddeaeb2ad7b0d7bbf4b1d31cdbe00',1,'ripple::DirectStepI']]], ['setcandelete_8600',['setCanDelete',['../classripple_1_1SHAMapStore.html#a2b1a46d6f878575eeea6730c8fc367f2',1,'ripple::SHAMapStore::setCanDelete()'],['../classripple_1_1SHAMapStoreImp_1_1SavedStateDB.html#a2daf6933e39fef00c2004ea292a5655c',1,'ripple::SHAMapStoreImp::SavedStateDB::setCanDelete()'],['../classripple_1_1SHAMapStoreImp.html#a3be2b951362ba4c182e2a75dae4805f3',1,'ripple::SHAMapStoreImp::setCanDelete()'],['../namespaceripple.html#aab972dc5eb4ccbbb4a0a0d0b83042723',1,'ripple::setCanDelete()']]], - ['setchild_8601',['setChild',['../classripple_1_1SHAMapInnerNode.html#a816fb1a18b49832dcffccc073a5dd929',1,'ripple::SHAMapInnerNode']]], + ['setchild_8601',['setChild',['../classripple_1_1SHAMapInnerNode.html#a7fb5fc0e5d65ed4c3c77537a8fda8d32',1,'ripple::SHAMapInnerNode']]], ['setclusterfee_8602',['setClusterFee',['../classripple_1_1LoadFeeTrack.html#aed4bb323d4e737576185213517baaeca',1,'ripple::LoadFeeTrack']]], ['setclustertimer_8603',['setClusterTimer',['../classripple_1_1NetworkOPsImp.html#a312a6368f14118216b064f292349db31',1,'ripple::NetworkOPsImp']]], ['setconfig_8604',['setConfig',['../classripple_1_1PeerFinder_1_1ManagerImp.html#abf2ab8c369f806ad780ffc2cb198fdc1',1,'ripple::PeerFinder::ManagerImp::setConfig()'],['../classripple_1_1PeerFinder_1_1Manager.html#a2da6f9a40efac1c2ac0cef79ae3a0e18',1,'ripple::PeerFinder::Manager::setConfig()']]], diff --git a/search/functions_13.js b/search/functions_13.js index ca4e91e121..1ab597d86d 100644 --- a/search/functions_13.js +++ b/search/functions_13.js @@ -137,7 +137,7 @@ var searchData= ['setbuildingledger_20129',['setBuildingLedger',['../classripple_1_1LedgerMaster.html#a07b039ad7b58f43b8587e57c49e596f0',1,'ripple::LedgerMaster']]], ['setcachelimiting_20130',['setCacheLimiting',['../classripple_1_1DirectStepI.html#a592ddeaeb2ad7b0d7bbf4b1d31cdbe00',1,'ripple::DirectStepI']]], ['setcandelete_20131',['setCanDelete',['../classripple_1_1SHAMapStore.html#a2b1a46d6f878575eeea6730c8fc367f2',1,'ripple::SHAMapStore::setCanDelete()'],['../classripple_1_1SHAMapStoreImp_1_1SavedStateDB.html#a2daf6933e39fef00c2004ea292a5655c',1,'ripple::SHAMapStoreImp::SavedStateDB::setCanDelete()'],['../classripple_1_1SHAMapStoreImp.html#a3be2b951362ba4c182e2a75dae4805f3',1,'ripple::SHAMapStoreImp::setCanDelete()'],['../namespaceripple.html#aab972dc5eb4ccbbb4a0a0d0b83042723',1,'ripple::setCanDelete()']]], - ['setchild_20132',['setChild',['../classripple_1_1SHAMapInnerNode.html#a816fb1a18b49832dcffccc073a5dd929',1,'ripple::SHAMapInnerNode']]], + ['setchild_20132',['setChild',['../classripple_1_1SHAMapInnerNode.html#a7fb5fc0e5d65ed4c3c77537a8fda8d32',1,'ripple::SHAMapInnerNode']]], ['setclusterfee_20133',['setClusterFee',['../classripple_1_1LoadFeeTrack.html#aed4bb323d4e737576185213517baaeca',1,'ripple::LoadFeeTrack']]], ['setclustertimer_20134',['setClusterTimer',['../classripple_1_1NetworkOPsImp.html#a312a6368f14118216b064f292349db31',1,'ripple::NetworkOPsImp']]], ['setconfig_20135',['setConfig',['../classripple_1_1PeerFinder_1_1ManagerImp.html#abf2ab8c369f806ad780ffc2cb198fdc1',1,'ripple::PeerFinder::ManagerImp::setConfig()'],['../classripple_1_1PeerFinder_1_1Manager.html#a2da6f9a40efac1c2ac0cef79ae3a0e18',1,'ripple::PeerFinder::Manager::setConfig()']]],