20#include <xrpld/shamap/SHAMapAccountStateLeafNode.h>
21#include <xrpld/shamap/SHAMapInnerNode.h>
22#include <xrpld/shamap/SHAMapTreeNode.h>
23#include <xrpld/shamap/SHAMapTxLeafNode.h>
24#include <xrpld/shamap/SHAMapTxPlusMetaLeafNode.h>
26#include <xrpl/basics/IntrusivePointer.ipp>
27#include <xrpl/basics/Slice.h>
28#include <xrpl/basics/contract.h>
29#include <xrpl/basics/safe_cast.h>
30#include <xrpl/protocol/HashPrefix.h>
31#include <xrpl/protocol/digest.h>
35intr_ptr::SharedPtr<SHAMapTreeNode>
45 return intr_ptr::make_shared<SHAMapTxLeafNode>(
46 std::move(item), 0, hash);
48 return intr_ptr::make_shared<SHAMapTxLeafNode>(std::move(item), 0);
62 Throw<std::runtime_error>(
"Short TXN+MD node");
66 Throw<std::out_of_range>(
74 return intr_ptr::make_shared<SHAMapTxPlusMetaLeafNode>(
75 std::move(item), 0, hash);
77 return intr_ptr::make_shared<SHAMapTxPlusMetaLeafNode>(std::move(item), 0);
91 Throw<std::runtime_error>(
"short AS node");
95 Throw<std::out_of_range>(
101 Throw<std::runtime_error>(
"Invalid AS node");
106 return intr_ptr::make_shared<SHAMapAccountStateLeafNode>(
107 std::move(item), 0, hash);
109 return intr_ptr::make_shared<SHAMapAccountStateLeafNode>(
119 auto const type = rawNode[rawNode.
size() - 1];
123 bool const hashValid =
false;
141 Throw<std::runtime_error>(
148 if (rawNode.
size() < 4)
149 Throw<std::runtime_error>(
"prefix: short node");
153 auto const type = safe_cast<HashPrefix>(
154 (safe_cast<std::uint32_t>(rawNode[0]) << 24) +
155 (safe_cast<std::uint32_t>(rawNode[1]) << 16) +
156 (safe_cast<std::uint32_t>(rawNode[2]) << 8) +
157 (safe_cast<std::uint32_t>(rawNode[3])));
161 bool const hashValid =
true;
175 Throw<std::runtime_error>(
176 "prefix: unknown type (" +
static intr_ptr::SharedPtr< SHAMapTreeNode > makeCompressedInner(Slice data)
static intr_ptr::SharedPtr< SHAMapTreeNode > makeFullInner(Slice data, SHAMapHash const &hash, bool hashValid)
Identifies a node inside a SHAMap.
static intr_ptr::SharedPtr< SHAMapTreeNode > makeAccountState(Slice data, SHAMapHash const &hash, bool hashValid)
virtual std::string getString(SHAMapNodeID const &) const
static intr_ptr::SharedPtr< SHAMapTreeNode > makeTransaction(Slice data, SHAMapHash const &hash, bool hashValid)
static intr_ptr::SharedPtr< SHAMapTreeNode > makeTransactionWithMeta(Slice data, SHAMapHash const &hash, bool hashValid)
static intr_ptr::SharedPtr< SHAMapTreeNode > makeFromPrefix(Slice rawNode, SHAMapHash const &hash)
static intr_ptr::SharedPtr< SHAMapTreeNode > makeFromWire(Slice rawNode)
std::size_t size() const noexcept
bool getBitString(base_uint< Bits, Tag > &data, int offset) const
Slice slice() const noexcept
A shared intrusive pointer class that supports weak pointers.
An immutable linear range of bytes.
bool empty() const noexcept
Return true if the byte range is empty.
void remove_suffix(std::size_t n)
Shrinks the slice by moving its end backward by n characters.
void remove_prefix(std::size_t n)
Shrinks the slice by moving its start forward by n characters.
std::size_t size() const noexcept
Returns the number of bytes in the storage.
static std::size_t constexpr bytes
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
static constexpr unsigned char const wireTypeAccountState
static constexpr unsigned char const wireTypeCompressedInner
constexpr std::enable_if_t< std::is_integral_v< Dest > &&std::is_integral_v< Src >, Dest > safe_cast(Src s) noexcept
boost::intrusive_ptr< SHAMapItem > make_shamapitem(uint256 const &tag, Slice data)
std::string to_string(base_uint< Bits, Tag > const &a)
static constexpr unsigned char const wireTypeInner
static constexpr unsigned char const wireTypeTransaction
static constexpr unsigned char const wireTypeTransactionWithMeta
@ txNode
transaction plus metadata
@ transactionID
transaction plus signature to give transaction ID
@ innerNode
inner node in V1 tree
sha512_half_hasher::result_type sha512Half(Args const &... args)
Returns the SHA512-Half of a series of objects.