diff --git a/src/data_format/magic_blob.cpp b/src/data_format/magic_blob.cpp index 80900e0..96d4458 100644 --- a/src/data_format/magic_blob.cpp +++ b/src/data_format/magic_blob.cpp @@ -55,14 +55,14 @@ void MagicBlob::read(const fs::path& path) { n_rva += rva; rva = n_rva; - m_entities.emplace(hash, std::make_unique(flags, rva)); + m_entries.emplace(hash, std::make_unique(flags, rva)); } } MagicEntry const* MagicBlob::query(std::string_view symbol) const { auto query_hash = XXH64(symbol.data(), symbol.size(), m_query_seed); - if (m_entities.contains(query_hash)) { - return m_entities.at(query_hash).get(); + if (m_entries.contains(query_hash)) { + return m_entries.at(query_hash).get(); } return nullptr; } diff --git a/src/data_format/magic_blob.h b/src/data_format/magic_blob.h index 3e38e48..9b03c1d 100644 --- a/src/data_format/magic_blob.h +++ b/src/data_format/magic_blob.h @@ -7,14 +7,20 @@ namespace di::data_format { class MagicBlob : public StreamedIO { public: + using for_each_callback_t = std::function; + void read(const fs::path& path) override; - constexpr size_t count() const { return m_entities.size(); } + void for_each(const for_each_callback_t& callback) const { + for (const auto& [hash, entry] : m_entries) callback(hash, *entry); + } + + constexpr size_t count() const { return m_entries.size(); } MagicEntry const* query(std::string_view symbol) const; private: - std::unordered_map> m_entities; + std::unordered_map> m_entries; // MagicBlob uses a custom algorithm to transform the stored seed. When // querying, you should use m_query_seed. diff --git a/src/data_format/type/magic_entry.h b/src/data_format/type/magic_entry.h index 7271194..14a6035 100644 --- a/src/data_format/type/magic_entry.h +++ b/src/data_format/type/magic_entry.h @@ -12,10 +12,10 @@ struct MagicEntry { // Do not put the original hash in the entry yet. // hash_t hash; - constexpr bool is_function() { return flags[0]; } - constexpr bool _unk2() { return flags[1]; } - constexpr bool is_verbose() { return flags[2]; } - constexpr bool _unk4() { return flags[3]; } + constexpr bool is_function() const { return flags[0]; } + constexpr bool _unk2() const { return flags[1]; } + constexpr bool is_verbose() const { return flags[2]; } + constexpr bool _unk4() const { return flags[3]; } }; } // namespace di