// Copyright 2023 xensik. All rights reserved. // // Use of this source code is governed by a GNU GPLv3 license // that can be found in the LICENSE file. #pragma once namespace xsk::utils { class reader { public: using ptr = std::unique_ptr; private: u8 const* data_; u32 size_; u32 pos_; bool swap_; public: reader(bool swap = false); reader(std::vector const& data, bool swap = false); reader(u8 const* data, u32 size, bool swap = false); template auto read() -> T; auto read_cstr() -> std::string; auto read_bytes(u32 pos, u32 count) -> std::string; auto is_avail() -> bool; auto seek(u32 size) -> void; auto seek_neg(u32 size) -> void; auto align(u32 size) -> u32; auto data() -> u8 const*; auto size() -> u32; auto pos() -> u32; auto pos(u32 pos) -> void; }; } // namespace xsk::utils