#include "buffer.h" #include #include TBufferBase::TBufferBase(size_t size) noexcept : Size(size) { } size_t TBufferBase::GetSize() const noexcept { return Size; } void TBufferBase::SetSize(size_t size) noexcept { Size = size; } ///////////////////////////////////////////////////////////////////// template TBufferBaseT::TBufferBaseT(PointerType data, size_t size) noexcept : TBufferBase(size) , Data(data) { } template PointerType TBufferBaseT::GetPointer() const noexcept { return Data; } template void TBufferBaseT::Assign(PointerType data, size_t size) noexcept { Data = data; Size = size; } template <> void TBufferBaseT::Cut(size_t offset) noexcept { Y_VERIFY_DEBUG(offset <= Size); Data = static_cast(Data) + offset; TBufferBase::Size -= offset; } template <> void TBufferBaseT::Cut(size_t offset) noexcept { Y_VERIFY_DEBUG(offset <= Size); Data = static_cast(Data) + offset; TBufferBase::Size -= offset; } template class TBufferBaseT; template class TBufferBaseT; ///////////////////////////////////////////////////////////////////// TConstBuffer::TConstBuffer(const void* data, size_t size) noexcept : TBufferBaseT(data, size) { } TConstBuffer::TConstBuffer(const TMutableBuffer& buffer) noexcept : TBufferBaseT(buffer.GetPointer(), buffer.GetSize()) { } TConstBuffer TConstBuffer::Offset(ptrdiff_t offset, size_t size) const noexcept { return TConstBuffer(static_cast(Data) + offset, std::min(Size - offset, size)); } //////////////////////////////////////////////////////////////////////////////// TMutableBuffer::TMutableBuffer(void* data, size_t size) noexcept : TBufferBaseT(data, size) { } TMutableBuffer TMutableBuffer::Offset(ptrdiff_t offset, size_t size) const noexcept { return TMutableBuffer(static_cast(Data) + offset, std::min(Size - offset, size)); } size_t TMutableBuffer::CopyFrom(const TConstBuffer& buffer) const noexcept { const auto size = std::min(Size, buffer.Size); std::memcpy(Data, buffer.Data, size); return size; }