]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/include/lldb/DataFormatters/TypeCategoryMap.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / lldb / include / lldb / DataFormatters / TypeCategoryMap.h
1 //===-- TypeCategoryMap.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 lldb_TypeCategoryMap_h_
11 #define lldb_TypeCategoryMap_h_
12
13 // C Includes
14 // C++ Includes
15
16 // Other libraries and framework includes
17 // Project includes
18 #include "lldb/lldb-public.h"
19 #include "lldb/lldb-enumerations.h"
20
21 #include "lldb/DataFormatters/FormattersContainer.h"
22 #include "lldb/DataFormatters/TypeCategory.h"
23
24 namespace lldb_private {
25     class TypeCategoryMap
26     {
27     private:
28         typedef ConstString KeyType;
29         typedef TypeCategoryImpl ValueType;
30         typedef ValueType::SharedPointer ValueSP;
31         typedef std::list<lldb::TypeCategoryImplSP> ActiveCategoriesList;
32         typedef ActiveCategoriesList::iterator ActiveCategoriesIterator;
33         
34     public:
35         typedef std::map<KeyType, ValueSP> MapType;
36         typedef MapType::iterator MapIterator;
37         typedef bool(*CallbackType)(void*, const ValueSP&);
38         typedef uint32_t Position;
39         
40         static const Position First = 0;
41         static const Position Default = 1;
42         static const Position Last = UINT32_MAX;
43         
44         TypeCategoryMap (IFormatChangeListener* lst);
45         
46         void
47         Add (KeyType name,
48              const ValueSP& entry);
49         
50         bool
51         Delete (KeyType name);
52         
53         bool
54         Enable (KeyType category_name,
55                 Position pos = Default);
56         
57         bool
58         Disable (KeyType category_name);
59         
60         bool
61         Enable (ValueSP category,
62                 Position pos = Default);
63         
64         bool
65         Disable (ValueSP category);
66         
67         void
68         Clear ();
69         
70         bool
71         Get (KeyType name,
72              ValueSP& entry);
73         
74         bool
75         Get (uint32_t pos,
76              ValueSP& entry);
77         
78         void
79         LoopThrough (CallbackType callback, void* param);
80         
81         lldb::TypeCategoryImplSP
82         GetAtIndex (uint32_t);
83         
84         bool
85         AnyMatches (ConstString type_name,
86                     TypeCategoryImpl::FormatCategoryItems items = TypeCategoryImpl::ALL_ITEM_TYPES,
87                     bool only_enabled = true,
88                     const char** matching_category = NULL,
89                     TypeCategoryImpl::FormatCategoryItems* matching_type = NULL);
90         
91         uint32_t
92         GetCount ()
93         {
94             return m_map.size();
95         }
96
97         lldb::TypeFormatImplSP
98         GetFormat (ValueObject& valobj,
99                    lldb::DynamicValueType use_dynamic);
100         
101         lldb::TypeSummaryImplSP
102         GetSummaryFormat (ValueObject& valobj,
103                           lldb::DynamicValueType use_dynamic);
104         
105 #ifndef LLDB_DISABLE_PYTHON
106         lldb::SyntheticChildrenSP
107         GetSyntheticChildren (ValueObject& valobj,
108                               lldb::DynamicValueType use_dynamic);
109 #endif
110         
111     private:
112         
113         class delete_matching_categories
114         {
115             lldb::TypeCategoryImplSP ptr;
116         public:
117             delete_matching_categories(lldb::TypeCategoryImplSP p) : ptr(p)
118             {}
119             
120             bool operator()(const lldb::TypeCategoryImplSP& other)
121             {
122                 return ptr.get() == other.get();
123             }
124         };
125         
126         Mutex m_map_mutex;
127         IFormatChangeListener* listener;
128         
129         MapType m_map;
130         ActiveCategoriesList m_active_categories;
131         
132         MapType& map ()
133         {
134             return m_map;
135         }
136         
137         ActiveCategoriesList& active_list ()
138         {
139             return m_active_categories;
140         }
141         
142         Mutex& mutex ()
143         {
144             return m_map_mutex;
145         }
146         
147         friend class FormattersContainer<KeyType, ValueType>;
148         friend class FormatManager;
149     };
150 } // namespace lldb_private
151
152 #endif  // lldb_TypeCategoryMap_h_