#pragma once #include #include #include "kabufuda/File.hpp" namespace kabufuda { class Directory { friend class Card; #pragma pack(push, 4) struct Data { std::array m_files; std::array padding; uint16_t m_updateCounter; uint16_t m_checksum; uint16_t m_checksumInv; }; union { Data data; std::array raw; }; #pragma pack(pop) void swapEndian(); void updateChecksum(); bool valid() const; public: Directory(); Directory(uint8_t data[BlockSize]); ~Directory() = default; bool hasFreeFile() const; int32_t numFreeFiles() const; File* getFirstFreeFile(const char* game, const char* maker, const char* filename); File* getFirstNonFreeFile(uint32_t start, const char* game, const char* maker); File* getFile(const char* game, const char* maker, const char* filename); File* getFile(uint32_t idx); int32_t indexForFile(File* f); }; } // namespace kabufuda