]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Core/LoadedModuleInfoList.h
MFV r304057:
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Core / LoadedModuleInfoList.h
1 //===-- LoadedModuleInfoList.h ----------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_LoadedModuleInfoList_h_
11 #define liblldb_LoadedModuleInfoList_h_
12
13 // C Includes
14
15 // C++ Includes
16 #include <vector>
17
18 // Other libraries and framework includes
19 #include "lldb/lldb-private-forward.h"
20
21 namespace lldb_private {
22 class LoadedModuleInfoList
23 {
24 public:
25
26     class LoadedModuleInfo
27     {
28     public:
29
30         enum e_data_point
31         {
32             e_has_name      = 0,
33             e_has_base      ,
34             e_has_dynamic   ,
35             e_has_link_map  ,
36             e_num
37         };
38
39         LoadedModuleInfo ()
40         {
41             for (uint32_t i = 0; i < e_num; ++i)
42                 m_has[i] = false;
43         };
44
45         void set_name (const std::string & name)
46         {
47             m_name = name;
48             m_has[e_has_name] = true;
49         }
50         bool get_name (std::string & out) const
51         {
52             out = m_name;
53             return m_has[e_has_name];
54         }
55
56         void set_base (const lldb::addr_t base)
57         {
58             m_base = base;
59             m_has[e_has_base] = true;
60         }
61         bool get_base (lldb::addr_t & out) const
62         {
63             out = m_base;
64             return m_has[e_has_base];
65         }
66
67         void set_base_is_offset (bool is_offset)
68         {
69             m_base_is_offset = is_offset;
70         }
71         bool get_base_is_offset(bool & out) const
72         {
73             out = m_base_is_offset;
74             return m_has[e_has_base];
75         }
76
77         void set_link_map (const lldb::addr_t addr)
78         {
79             m_link_map = addr;
80             m_has[e_has_link_map] = true;
81         }
82         bool get_link_map (lldb::addr_t & out) const
83         {
84             out = m_link_map;
85             return m_has[e_has_link_map];
86         }
87
88         void set_dynamic (const lldb::addr_t addr)
89         {
90             m_dynamic = addr;
91             m_has[e_has_dynamic] = true;
92         }
93         bool get_dynamic (lldb::addr_t & out) const
94         {
95             out = m_dynamic;
96             return m_has[e_has_dynamic];
97         }
98
99         bool has_info (e_data_point datum) const
100         {
101             assert (datum < e_num);
102             return m_has[datum];
103         }
104
105         bool
106         operator == (LoadedModuleInfo const &rhs) const
107         {
108             if (e_num != rhs.e_num)
109                 return false;
110
111             for (size_t i = 0; i < e_num; ++i)
112             {
113                 if (m_has[i] != rhs.m_has[i])
114                     return false;
115             }
116
117             return (m_base == rhs.m_base) &&
118                    (m_link_map == rhs.m_link_map) &&
119                    (m_dynamic == rhs.m_dynamic) &&
120                    (m_name == rhs.m_name);
121         }
122     protected:
123
124         bool m_has[e_num];
125         std::string m_name;
126         lldb::addr_t m_link_map;
127         lldb::addr_t m_base;
128         bool m_base_is_offset;
129         lldb::addr_t m_dynamic;
130     };
131
132     LoadedModuleInfoList ()
133         : m_list ()
134         , m_link_map (LLDB_INVALID_ADDRESS)
135     {}
136
137     void add (const LoadedModuleInfo & mod)
138     {
139         m_list.push_back (mod);
140     }
141
142     void clear ()
143     {
144         m_list.clear ();
145     }
146
147     std::vector<LoadedModuleInfo> m_list;
148     lldb::addr_t m_link_map;
149 };
150 } // namespace lldb_private
151
152 #endif  // liblldb_LoadedModuleInfoList_h_