xrpld
Loading...
Searching...
No Matches
STBlob.h
1#pragma once
2
3#include <xrpl/basics/Buffer.h>
4#include <xrpl/basics/CountedObject.h>
5#include <xrpl/basics/Slice.h>
6#include <xrpl/protocol/SField.h>
7#include <xrpl/protocol/STBase.h>
8#include <xrpl/protocol/Serializer.h>
9
10#include <cstdint>
11#include <cstring>
12#include <string>
13#include <utility>
14
15namespace xrpl {
16
17// variable length byte string
18class STBlob : public STBase, public CountedObject<STBlob>
19{
21
22public:
24
25 STBlob() = default;
26 STBlob(STBlob const& rhs);
27
28 STBlob(SField const& f, void const* data, std::size_t size);
29 STBlob(SField const& f, Buffer&& b);
30 STBlob(SField const& n);
31 STBlob(SerialIter&, SField const& name = sfGeneric);
32
33 [[nodiscard]] std::size_t
34 size() const;
35
36 [[nodiscard]] std::uint8_t const*
37 data() const;
38
39 [[nodiscard]] SerializedTypeID
40 getSType() const override;
41
42 [[nodiscard]] std::string
43 getText() const override;
44
45 void
46 add(Serializer& s) const override;
47
48 [[nodiscard]] bool
49 isEquivalent(STBase const& t) const override;
50
51 [[nodiscard]] bool
52 isDefault() const override;
53
54 STBlob&
55 operator=(Slice const& slice);
56
57 [[nodiscard]] value_type
58 value() const noexcept;
59
60 STBlob&
61 operator=(Buffer&& buffer);
62
63 void
64 setValue(Buffer&& b);
65
66private:
67 STBase*
68 copy(std::size_t n, void* buf) const override;
69 STBase*
70 move(std::size_t n, void* buf) override;
71
72 friend class detail::STVar;
73};
74
75inline STBlob::STBlob(STBlob const& rhs)
76 : STBase(rhs), CountedObject<STBlob>(rhs), value_(rhs.data(), rhs.size())
77{
78}
79
80inline STBlob::STBlob(SField const& f, void const* data, std::size_t size)
81 : STBase(f), value_(data, size)
82{
83}
84
85inline STBlob::STBlob(SField const& f, Buffer&& b) : STBase(f), value_(std::move(b))
86{
87}
88
89inline STBlob::STBlob(SField const& n) : STBase(n)
90{
91}
92
93inline std::size_t
95{
96 return value_.size();
97}
98
99inline std::uint8_t const*
101{
102 return value_.data();
103}
104
105inline STBlob&
107{
108 value_ = Buffer(slice.data(), slice.size());
109 return *this;
110}
111
113STBlob::value() const noexcept
114{
115 return value_;
116}
117
118inline STBlob&
120{
121 value_ = std::move(buffer);
122 return *this;
123}
124
125inline void
127{
128 value_ = std::move(b);
129}
130
131} // namespace xrpl
Like std::vector<char> but better.
Definition Buffer.h:19
Identifies fields.
Definition SField.h:132
std::size_t size() const
Definition STBlob.h:94
bool isEquivalent(STBase const &t) const override
Definition STBlob.cpp:54
std::uint8_t const * data() const
Definition STBlob.h:100
void setValue(Buffer &&b)
Definition STBlob.h:126
friend class detail::STVar
Definition STBlob.h:72
Buffer value_
Definition STBlob.h:20
void add(Serializer &s) const override
Definition STBlob.cpp:44
SerializedTypeID getSType() const override
Definition STBlob.cpp:32
STBlob()=default
Slice value_type
Definition STBlob.h:23
value_type value() const noexcept
Definition STBlob.h:113
STBase * copy(std::size_t n, void *buf) const override
Definition STBlob.cpp:20
STBase * move(std::size_t n, void *buf) override
Definition STBlob.cpp:26
bool isDefault() const override
Definition STBlob.cpp:61
STBlob & operator=(Slice const &slice)
Definition STBlob.h:106
std::string getText() const override
Definition STBlob.cpp:38
An immutable linear range of bytes.
Definition Slice.h:28
std::uint8_t const * data() const noexcept
Return a pointer to beginning of the storage.
Definition Slice.h:88
std::size_t size() const noexcept
Returns the number of bytes in the storage.
Definition Slice.h:70
STL namespace.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
SField const sfGeneric
SerializedTypeID
Definition SField.h:94