diff options
Diffstat (limited to 'include/pdb')
-rw-r--r-- | include/pdb/repo.hpp | 4 | ||||
-rw-r--r-- | include/pdb/utils/file.hpp | 30 |
2 files changed, 34 insertions, 0 deletions
diff --git a/include/pdb/repo.hpp b/include/pdb/repo.hpp index 239bd7e..aa5c3c3 100644 --- a/include/pdb/repo.hpp +++ b/include/pdb/repo.hpp @@ -9,10 +9,12 @@ #include "dbghelp.hpp" #include "module.hpp" #include "symbol.hpp" +#include "utils/file.hpp" #include <functional> #include <map> #include <string> +#include <unordered_set> namespace pdb { @@ -45,5 +47,7 @@ namespace pdb std::map<Address, Module> online_modules; std::map<Address, const Module&> offline_modules; + + std::unordered_set<file::ID> module_ids; }; } diff --git a/include/pdb/utils/file.hpp b/include/pdb/utils/file.hpp index 5b83f2b..50975aa 100644 --- a/include/pdb/utils/file.hpp +++ b/include/pdb/utils/file.hpp @@ -5,14 +5,44 @@ #pragma once +#include <Windows.h> + #include <cstddef> +#include <cstring> +#include <functional> #include <string> +#include <type_traits> namespace pdb { namespace file { std::size_t get_size(const std::string&); + + struct ID + { + const FILE_ID_INFO raw; + + bool operator==(const ID& other) const + { + static_assert(std::is_pod<FILE_ID_INFO>::value, "Can't memcmp if file IDs aren't PODs"); + return 0 == std::memcmp(&raw, &other.raw, sizeof(FILE_ID_INFO)); + } + }; + + ID query_id(const std::string&); } } + +namespace std +{ + template <> + struct hash<pdb::file::ID> + { + std::size_t operator()(const pdb::file::ID& id) const + { + return _Bitwise_hash<FILE_ID_INFO>{}(id.raw); + } + }; +} |