20 #ifndef RIPPLE_SHAMAP_SHAMAPTREENODE_H_INCLUDED
21 #define RIPPLE_SHAMAP_SHAMAPTREENODE_H_INCLUDED
23 #include <ripple/basics/TaggedCache.h>
24 #include <ripple/beast/utility/Journal.h>
25 #include <ripple/shamap/SHAMapItem.h>
26 #include <ripple/shamap/SHAMapNodeID.h>
180 Slice const& rawNode,
238 key()
const override;
240 invariants(
bool is_root =
false)
const override;
244 Slice const& rawNode,
280 key()
const override;
282 invariants(
bool is_root =
false)
const override;
306 : mType(type), mSeq(seq)
314 : mType(type), mHash(hash), mSeq(seq)
365 return (!
isInner() || (
id.getDepth() < 64));
SHAMapTreeNode(const SHAMapTreeNode &)=delete
std::array< SHAMapHash, 16 > mHashes
friend bool operator<(SHAMapHash const &x, SHAMapHash const &y)
bool setItem(std::shared_ptr< SHAMapItem const > const &i, TNType type)
void addRaw(Serializer &, SHANodeFormat format) const override
An immutable linear range of bytes.
static std::shared_ptr< SHAMapAbstractNode > make(Slice const &rawNode, std::uint32_t seq, SHANodeFormat format, SHAMapHash const &hash, bool hashValid, beast::Journal j, SHAMapNodeID const &id=SHAMapNodeID{})
bool updateHash() override
bool isInBounds(SHAMapNodeID const &id) const
virtual uint256 const & key() const =0
std::uint32_t mFullBelowGen
SHAMapTreeNode & operator=(const SHAMapTreeNode &)=delete
uint256 const & key() const override
virtual std::string getString(SHAMapNodeID const &) const
virtual void invariants(bool is_root=false) const =0
void addRaw(Serializer &, SHANodeFormat format) const override
SHAMapAbstractNode(SHAMapAbstractNode const &)=delete
SHAMapAbstractNode * getChildPointer(int branch)
std::shared_ptr< SHAMapAbstractNode > clone(std::uint32_t seq) const override
virtual std::shared_ptr< SHAMapAbstractNode > clone(std::uint32_t seq) const =0
void setChild(int m, std::shared_ptr< SHAMapAbstractNode > const &child)
void setSeq(std::uint32_t s)
bool isEmptyBranch(int m) const
friend std::string to_string(SHAMapHash const &x)
std::string getString(SHAMapNodeID const &) const override
uint256 const & key() const override
virtual void addRaw(Serializer &, SHANodeFormat format) const =0
void invariants(bool is_root=false) const override
SHAMapAbstractNode & operator=(SHAMapAbstractNode const &)=delete
SHAMapInnerNode(std::uint32_t seq)
SHAMapHash const & getChildHash(int m) const
bool isFullBelow(std::uint32_t generation) const
SHAMapHash const & getNodeHash() const
virtual std::shared_ptr< SHAMapAbstractNode > canonicalizeChild(int branch, std::shared_ptr< SHAMapAbstractNode > node)
std::uint32_t getSeq() const
bool operator!=(Manifest const &lhs, Manifest const &rhs)
friend std::ostream & operator<<(std::ostream &os, SHAMapHash const &x)
A generic endpoint for log messages.
int getBranchCount() const
friend bool operator==(SHAMapHash const &x, SHAMapHash const &y)
std::shared_ptr< SHAMapItem const > mItem
void shareChild(int m, std::shared_ptr< SHAMapAbstractNode > const &child)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
SHAMapHash(uint256 const &hash)
std::string getString(SHAMapNodeID const &) const override
static std::mutex childLock
std::shared_ptr< SHAMapAbstractNode > mChildren[16]
uint256 const & as_uint256() const
void setFullBelowGen(std::uint32_t gen)
std::shared_ptr< SHAMapAbstractNode > getChild(int branch)
bool updateHash() override
friend void hash_append(H &h, SHAMapHash const &x)
void invariants(bool is_root=false) const override
virtual ~SHAMapAbstractNode()=0
virtual bool updateHash()=0
std::shared_ptr< SHAMapAbstractNode > clone(std::uint32_t seq) const override
std::shared_ptr< SHAMapItem const > const & peekItem() const