#pragma once #include namespace ckitty { /** * @brief Represents a piece of a shared buffer that * is not owned by this object. */ class data_view { private: const u8* _begin; const u8* _end; public: data_view(const u8* begin, const u8* end) : _begin(begin), _end(end) {} data_view(const u8* data, const isize length) : _begin(data), _end(data + length) {} data_view(const std::string& str) : _begin((const u8*) str.begin().base()), _end((const u8*) str.end().base()) {} const u8* begin() const { return _begin; } const u8* end() const { return _end; } u8 operator[](isize i) const { return *(_begin + i); } isize length() const { return isize(_end - _begin); } const data_view sub_off(isize offset, isize length) const { return data_view(_begin + offset, _begin + offset + length); } const data_view sub_abs(isize begin, isize end) const { return data_view(_begin + begin, _begin + end); } }; }