//===-- LoadedModuleInfoList.h ----------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef liblldb_LoadedModuleInfoList_h_ #define liblldb_LoadedModuleInfoList_h_ // C Includes // C++ Includes #include // Other libraries and framework includes #include "lldb/lldb-private-forward.h" namespace lldb_private { class LoadedModuleInfoList { public: class LoadedModuleInfo { public: enum e_data_point { e_has_name = 0, e_has_base, e_has_dynamic, e_has_link_map, e_num }; LoadedModuleInfo() { for (uint32_t i = 0; i < e_num; ++i) m_has[i] = false; }; void set_name(const std::string &name) { m_name = name; m_has[e_has_name] = true; } bool get_name(std::string &out) const { out = m_name; return m_has[e_has_name]; } void set_base(const lldb::addr_t base) { m_base = base; m_has[e_has_base] = true; } bool get_base(lldb::addr_t &out) const { out = m_base; return m_has[e_has_base]; } void set_base_is_offset(bool is_offset) { m_base_is_offset = is_offset; } bool get_base_is_offset(bool &out) const { out = m_base_is_offset; return m_has[e_has_base]; } void set_link_map(const lldb::addr_t addr) { m_link_map = addr; m_has[e_has_link_map] = true; } bool get_link_map(lldb::addr_t &out) const { out = m_link_map; return m_has[e_has_link_map]; } void set_dynamic(const lldb::addr_t addr) { m_dynamic = addr; m_has[e_has_dynamic] = true; } bool get_dynamic(lldb::addr_t &out) const { out = m_dynamic; return m_has[e_has_dynamic]; } bool has_info(e_data_point datum) const { assert(datum < e_num); return m_has[datum]; } bool operator==(LoadedModuleInfo const &rhs) const { if (e_num != rhs.e_num) return false; for (size_t i = 0; i < e_num; ++i) { if (m_has[i] != rhs.m_has[i]) return false; } return (m_base == rhs.m_base) && (m_link_map == rhs.m_link_map) && (m_dynamic == rhs.m_dynamic) && (m_name == rhs.m_name); } protected: bool m_has[e_num]; std::string m_name; lldb::addr_t m_link_map; lldb::addr_t m_base; bool m_base_is_offset; lldb::addr_t m_dynamic; }; LoadedModuleInfoList() : m_list(), m_link_map(LLDB_INVALID_ADDRESS) {} void add(const LoadedModuleInfo &mod) { m_list.push_back(mod); } void clear() { m_list.clear(); } std::vector m_list; lldb::addr_t m_link_map; }; } // namespace lldb_private #endif // liblldb_LoadedModuleInfoList_h_