41 lines
1010 B
C++
41 lines
1010 B
C++
#pragma once
|
|
#include <cstddef>
|
|
|
|
#include <istream>
|
|
#include <ostream>
|
|
|
|
#include "acrux/memory/Endian.hpp"
|
|
|
|
namespace acrux::buffers
|
|
{
|
|
class IBuffer
|
|
{
|
|
public:
|
|
[[nodiscard]] virtual size_t byteLength() const = 0;
|
|
[[nodiscard]] virtual size_t bitLength() const = 0;
|
|
|
|
[[nodiscard]] virtual size_t byteCapacity() const = 0;
|
|
[[nodiscard]] virtual size_t bitCapacity() const = 0;
|
|
|
|
virtual bool copyTo(std::ostream& stream) const = 0;
|
|
virtual bool copyFrom(std::istream& stream) = 0;
|
|
|
|
[[nodiscard]] virtual bool hasBytesLeft(size_t count) const = 0;
|
|
[[nodiscard]] virtual bool hasBitsLeft(size_t count) const = 0;
|
|
|
|
void setendianness(acrux::memory::Endian endianness);
|
|
acrux::memory::Endian endianness();
|
|
|
|
~IBuffer() = default;
|
|
|
|
IBuffer(const IBuffer&) = default;
|
|
IBuffer(IBuffer&&) noexcept = default;
|
|
|
|
IBuffer& operator=(IBuffer&&) noexcept = default;
|
|
IBuffer& operator=(const IBuffer&) = default;
|
|
|
|
private:
|
|
acrux::memory::Endian m_endianness{acrux::memory::Endian::None};
|
|
};
|
|
}
|