#pragma once #include #include #include #include #include namespace xrpl { /** A leaf node for a state object. */ class SHAMapAccountStateLeafNode final : public SHAMapLeafNode, public CountedObject { public: SHAMapAccountStateLeafNode(boost::intrusive_ptr item, std::uint32_t cowid) : SHAMapLeafNode(std::move(item), cowid) { updateHash(); } SHAMapAccountStateLeafNode( boost::intrusive_ptr item, std::uint32_t cowid, SHAMapHash const& hash) : SHAMapLeafNode(std::move(item), cowid, hash) { } intr_ptr::SharedPtr clone(std::uint32_t cowid) const final { return intr_ptr::makeShared(item_, cowid, hash_); } SHAMapNodeType getType() const final { return SHAMapNodeType::TnAccountState; } void updateHash() final { hash_ = SHAMapHash{sha512Half(HashPrefix::LeafNode, item_->slice(), item_->key())}; } void serializeForWire(Serializer& s) const final { s.addRaw(item_->slice()); s.addBitString(item_->key()); s.add8(kWireTypeAccountState); } void serializeWithPrefix(Serializer& s) const final { s.add32(HashPrefix::LeafNode); s.addRaw(item_->slice()); s.addBitString(item_->key()); } }; } // namespace xrpl