xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
include
xrpl
nodestore
detail
EncodedBlob.h
1
#pragma once
2
3
#include <xrpl/beast/utility/instrumentation.h>
4
#include <xrpl/nodestore/NodeObject.h>
5
6
#include <boost/align/align_up.hpp>
7
8
#include <
algorithm
>
9
#include <
array
>
10
#include <
cstddef
>
11
#include <
cstdint
>
12
#include <
memory
>
13
#include <
stdexcept
>
14
15
namespace
xrpl::node_store
{
16
37
38
class
EncodedBlob
39
{
43
std::array<std::uint8_t, 32>
key_
{};
44
52
std::array
<
std::uint8_t
, boost::alignment::align_up(9 + 1024,
alignof
(
std::uint32_t
))>
53
payload_
{};
54
58
std::uint32_t
size_
;
59
66
std::uint8_t
*
const
ptr_
;
67
68
public
:
69
explicit
EncodedBlob
(
std::shared_ptr<NodeObject>
const
& obj)
70
:
size_
([&obj]() {
71
XRPL_ASSERT(obj,
"xrpl::node_store::EncodedBlob::EncodedBlob : non-null input"
);
72
73
if
(!obj)
74
throw
std::runtime_error
(
"EncodedBlob: unseated std::shared_ptr used."
);
75
76
return
obj->getData().size() + 9;
77
}())
78
,
ptr_
((
size_
<=
payload_
.
size
()) ?
payload_
.
data
() :
new
std::uint8_t
[
size_
])
79
{
80
std::fill_n
(
ptr_
, 8,
std::uint8_t
{0});
81
ptr_
[8] =
static_cast<
std::uint8_t
>
(obj->getType());
82
std::copy_n
(obj->getData().data(), obj->getData().size(),
ptr_
+ 9);
83
std::copy_n
(obj->getHash().data(), obj->getHash().size(),
key_
.
data
());
84
}
85
86
~EncodedBlob
()
87
{
88
XRPL_ASSERT(
89
((
ptr_
==
payload_
.data()) && (
size_
<=
payload_
.size())) ||
90
((
ptr_
!=
payload_
.data()) && (
size_
>
payload_
.size())),
91
"xrpl::node_store::EncodedBlob::~EncodedBlob : valid payload "
92
"pointer"
);
93
94
if
(
ptr_
!=
payload_
.data())
95
delete
[]
ptr_
;
96
}
97
98
[[nodiscard]]
void
const
*
99
getKey
() const noexcept
100
{
101
return
static_cast<
void
const*
>
(
key_
.data());
102
}
103
104
[[nodiscard]]
std::size_t
105
getSize
() const noexcept
106
{
107
return
size_
;
108
}
109
110
[[nodiscard]]
void
const
*
111
getData
() const noexcept
112
{
113
return
static_cast<
void
const*
>
(
ptr_
);
114
}
115
};
116
117
}
// namespace xrpl::node_store
algorithm
array
xrpl::node_store::EncodedBlob::size_
std::uint32_t size_
The size of the serialized data.
Definition
EncodedBlob.h:58
xrpl::node_store::EncodedBlob::key_
std::array< std::uint8_t, 32 > key_
The 32-byte key of the serialized object.
Definition
EncodedBlob.h:43
xrpl::node_store::EncodedBlob::EncodedBlob
EncodedBlob(std::shared_ptr< NodeObject > const &obj)
Definition
EncodedBlob.h:69
xrpl::node_store::EncodedBlob::getData
void const * getData() const noexcept
Definition
EncodedBlob.h:111
xrpl::node_store::EncodedBlob::payload_
std::array< std::uint8_t, boost::alignment::align_up(9+1024, alignof(std::uint32_t))> payload_
A pre-allocated buffer for the serialized object.
Definition
EncodedBlob.h:53
xrpl::node_store::EncodedBlob::getSize
std::size_t getSize() const noexcept
Definition
EncodedBlob.h:105
xrpl::node_store::EncodedBlob::getKey
void const * getKey() const noexcept
Definition
EncodedBlob.h:99
xrpl::node_store::EncodedBlob::ptr_
std::uint8_t *const ptr_
A pointer to the serialized data.
Definition
EncodedBlob.h:66
xrpl::node_store::EncodedBlob::~EncodedBlob
~EncodedBlob()
Definition
EncodedBlob.h:86
std::copy_n
T copy_n(T... args)
cstddef
cstdint
std::array::data
T data(T... args)
std::fill_n
T fill_n(T... args)
std::uint8_t
memory
xrpl::node_store
Definition
ServiceRegistry.h:18
std::runtime_error
std::shared_ptr
std::array::size
T size(T... args)
std::size_t
stdexcept
Generated by
1.17.0