Files
rippled/include/xrpl/protocol/STBlob.h
Bart 1d42c4f6de refactor: Remove unnecessary copyright notices already covered by LICENSE.md (#5929)
Per XLS-0095, we are taking steps to rename ripple(d) to xrpl(d).

This change specifically removes all copyright notices referencing Ripple, XRPLF, and certain affiliated contributors upon mutual agreement, so the notice in the LICENSE.md file applies throughout. Copyright notices referencing external contributions remain as-is. Duplicate verbiage is also removed.
2025-11-04 08:33:42 +00:00

132 lines
2.3 KiB
C++

#ifndef XRPL_PROTOCOL_STBLOB_H_INCLUDED
#define XRPL_PROTOCOL_STBLOB_H_INCLUDED
#include <xrpl/basics/Buffer.h>
#include <xrpl/basics/CountedObject.h>
#include <xrpl/basics/Slice.h>
#include <xrpl/beast/utility/instrumentation.h>
#include <xrpl/protocol/STBase.h>
#include <cstring>
namespace ripple {
// variable length byte string
class STBlob : public STBase, public CountedObject<STBlob>
{
Buffer value_;
public:
using value_type = Slice;
STBlob() = default;
STBlob(STBlob const& rhs);
STBlob(SField const& f, void const* data, std::size_t size);
STBlob(SField const& f, Buffer&& b);
STBlob(SField const& n);
STBlob(SerialIter&, SField const& name = sfGeneric);
std::size_t
size() const;
std::uint8_t const*
data() const;
SerializedTypeID
getSType() const override;
std::string
getText() const override;
void
add(Serializer& s) const override;
bool
isEquivalent(STBase const& t) const override;
bool
isDefault() const override;
STBlob&
operator=(Slice const& slice);
value_type
value() const noexcept;
STBlob&
operator=(Buffer&& buffer);
void
setValue(Buffer&& b);
private:
STBase*
copy(std::size_t n, void* buf) const override;
STBase*
move(std::size_t n, void* buf) override;
friend class detail::STVar;
};
inline STBlob::STBlob(STBlob const& rhs)
: STBase(rhs), CountedObject<STBlob>(rhs), value_(rhs.data(), rhs.size())
{
}
inline STBlob::STBlob(SField const& f, void const* data, std::size_t size)
: STBase(f), value_(data, size)
{
}
inline STBlob::STBlob(SField const& f, Buffer&& b)
: STBase(f), value_(std::move(b))
{
}
inline STBlob::STBlob(SField const& n) : STBase(n)
{
}
inline std::size_t
STBlob::size() const
{
return value_.size();
}
inline std::uint8_t const*
STBlob::data() const
{
return reinterpret_cast<std::uint8_t const*>(value_.data());
}
inline STBlob&
STBlob::operator=(Slice const& slice)
{
value_ = Buffer(slice.data(), slice.size());
return *this;
}
inline STBlob::value_type
STBlob::value() const noexcept
{
return value_;
}
inline STBlob&
STBlob::operator=(Buffer&& buffer)
{
value_ = std::move(buffer);
return *this;
}
inline void
STBlob::setValue(Buffer&& b)
{
value_ = std::move(b);
}
} // namespace ripple
#endif