• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===-- OptionValueProperties.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_OptionValueProperties_h_
11 #define liblldb_OptionValueProperties_h_
12 
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/Core/ConstString.h"
18 #include "lldb/Core/UniqueCStringMap.h"
19 #include "lldb/Interpreter/OptionValue.h"
20 #include "lldb/Interpreter/Property.h"
21 
22 namespace lldb_private {
23 
24 class OptionValueProperties :
25     public OptionValue,
26     public std::enable_shared_from_this<OptionValueProperties>
27 {
28 public:
29 
30     //---------------------------------------------------------------------
31     // OptionValueProperties
32     //---------------------------------------------------------------------
OptionValueProperties()33     OptionValueProperties () :
34         OptionValue(),
35         m_name (),
36         m_properties (),
37         m_name_to_index ()
38     {
39     }
40 
41     OptionValueProperties (const ConstString &name);
42 
43     OptionValueProperties (const OptionValueProperties &global_properties);
44 
45     virtual
~OptionValueProperties()46     ~OptionValueProperties()
47     {
48     }
49 
50     virtual Type
GetType()51     GetType () const
52     {
53         return eTypeProperties;
54     }
55 
56     virtual bool
57     Clear ();
58 
59     virtual lldb::OptionValueSP
60     DeepCopy () const;
61 
62     virtual Error
63     SetValueFromCString (const char *value, VarSetOperationType op = eVarSetOperationAssign);
64 
65     virtual void
66     DumpValue (const ExecutionContext *exe_ctx,
67                Stream &strm,
68                uint32_t dump_mask);
69 
70     virtual ConstString
GetName()71     GetName () const
72     {
73         return m_name;
74     }
75 
76     virtual Error
77     DumpPropertyValue (const ExecutionContext *exe_ctx,
78                        Stream &strm,
79                        const char *property_path,
80                        uint32_t dump_mask);
81 
82     virtual void
83     DumpAllDescriptions (CommandInterpreter &interpreter,
84                          Stream &strm) const;
85 
86     void
87     Apropos (const char *keyword,
88              std::vector<const Property *> &matching_properties) const;
89 
90     void
91     Initialize (const PropertyDefinition *setting_definitions);
92 
93 //    bool
94 //    GetQualifiedName (Stream &strm);
95 
96     //---------------------------------------------------------------------
97     // Subclass specific functions
98     //---------------------------------------------------------------------
99 
100     virtual size_t
101     GetNumProperties() const;
102 
103     virtual ConstString
104     GetPropertyNameAtIndex (uint32_t idx) const;
105 
106     virtual const char *
107     GetPropertyDescriptionAtIndex (uint32_t idx) const;
108 
109     //---------------------------------------------------------------------
110     // Get the index of a property given its exact name in this property
111     // collection, "name" can't be a path to a property path that refers
112     // to a property within a property
113     //---------------------------------------------------------------------
114     virtual uint32_t
115     GetPropertyIndex (const ConstString &name) const;
116 
117     //---------------------------------------------------------------------
118     // Get a property by exact name exists in this property collection, name
119     // can not be a path to a property path that refers to a property within
120     // a property
121     //---------------------------------------------------------------------
122     virtual const Property *
123     GetProperty (const ExecutionContext *exe_ctx,
124                  bool will_modify,
125                  const ConstString &name) const;
126 
127     virtual const Property *
128     GetPropertyAtIndex (const ExecutionContext *exe_ctx,
129                         bool will_modify,
130                         uint32_t idx) const;
131 
132     //---------------------------------------------------------------------
133     // Property can be be a property path like "target.process.extra-startup-command"
134     //---------------------------------------------------------------------
135     virtual const Property *
136     GetPropertyAtPath (const ExecutionContext *exe_ctx,
137                        bool will_modify,
138                        const char *property_path) const;
139 
140     virtual lldb::OptionValueSP
141     GetPropertyValueAtIndex (const ExecutionContext *exe_ctx,
142                              bool will_modify,
143                              uint32_t idx) const;
144 
145     virtual lldb::OptionValueSP
146     GetValueForKey  (const ExecutionContext *exe_ctx,
147                      const ConstString &key,
148                      bool value_will_be_modified) const;
149 
150     lldb::OptionValueSP
151     GetSubValue (const ExecutionContext *exe_ctx,
152                  const char *name,
153                  bool value_will_be_modified,
154                  Error &error) const;
155 
156     virtual Error
157     SetSubValue (const ExecutionContext *exe_ctx,
158                  VarSetOperationType op,
159                  const char *path,
160                  const char *value);
161 
162     virtual bool
PredicateMatches(const ExecutionContext * exe_ctx,const char * predicate)163     PredicateMatches (const ExecutionContext *exe_ctx,
164                       const char *predicate) const
165     {
166         return false;
167     }
168 
169 
170     OptionValueArch *
171     GetPropertyAtIndexAsOptionValueArch (const ExecutionContext *exe_ctx, uint32_t idx) const;
172 
173     bool
174     GetPropertyAtIndexAsArgs (const ExecutionContext *exe_ctx, uint32_t idx, Args &args) const;
175 
176     bool
177     SetPropertyAtIndexFromArgs (const ExecutionContext *exe_ctx, uint32_t idx, const Args &args);
178 
179     bool
180     GetPropertyAtIndexAsBoolean (const ExecutionContext *exe_ctx, uint32_t idx, bool fail_value) const;
181 
182     bool
183     SetPropertyAtIndexAsBoolean (const ExecutionContext *exe_ctx, uint32_t idx, bool new_value);
184 
185     OptionValueDictionary *
186     GetPropertyAtIndexAsOptionValueDictionary (const ExecutionContext *exe_ctx, uint32_t idx) const;
187 
188     int64_t
189     GetPropertyAtIndexAsEnumeration (const ExecutionContext *exe_ctx, uint32_t idx, int64_t fail_value) const;
190 
191     bool
192     SetPropertyAtIndexAsEnumeration (const ExecutionContext *exe_ctx, uint32_t idx, int64_t new_value);
193 
194     const RegularExpression *
195     GetPropertyAtIndexAsOptionValueRegex (const ExecutionContext *exe_ctx, uint32_t idx) const;
196 
197     OptionValueSInt64 *
198     GetPropertyAtIndexAsOptionValueSInt64 (const ExecutionContext *exe_ctx, uint32_t idx) const;
199 
200     int64_t
201     GetPropertyAtIndexAsSInt64 (const ExecutionContext *exe_ctx, uint32_t idx, int64_t fail_value) const;
202 
203     bool
204     SetPropertyAtIndexAsSInt64 (const ExecutionContext *exe_ctx, uint32_t idx, int64_t new_value);
205 
206     uint64_t
207     GetPropertyAtIndexAsUInt64 (const ExecutionContext *exe_ctx, uint32_t idx, uint64_t fail_value) const;
208 
209     bool
210     SetPropertyAtIndexAsUInt64 (const ExecutionContext *exe_ctx, uint32_t idx, uint64_t new_value);
211 
212     const char *
213     GetPropertyAtIndexAsString (const ExecutionContext *exe_ctx, uint32_t idx, const char *fail_value) const;
214 
215     bool
216     SetPropertyAtIndexAsString (const ExecutionContext *exe_ctx, uint32_t idx, const char *new_value);
217 
218     OptionValueString *
219     GetPropertyAtIndexAsOptionValueString (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
220 
221     OptionValueFileSpec *
222     GetPropertyAtIndexAsOptionValueFileSpec (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
223 
224     FileSpec
225     GetPropertyAtIndexAsFileSpec (const ExecutionContext *exe_ctx, uint32_t idx) const;
226 
227     bool
228     SetPropertyAtIndexAsFileSpec (const ExecutionContext *exe_ctx, uint32_t idx, const FileSpec &file_spec);
229 
230     OptionValuePathMappings *
231     GetPropertyAtIndexAsOptionValuePathMappings (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
232 
233     OptionValueFileSpecList *
234     GetPropertyAtIndexAsOptionValueFileSpecList (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
235 
236     void
237     AppendProperty(const ConstString &name,
238                    const ConstString &desc,
239                    bool is_global,
240                    const lldb::OptionValueSP &value_sp);
241 
242     lldb::OptionValuePropertiesSP
243     GetSubProperty (const ExecutionContext *exe_ctx,
244                     const ConstString &name);
245 
246 protected:
247 
248     const Property *
ProtectedGetPropertyAtIndex(uint32_t idx)249     ProtectedGetPropertyAtIndex (uint32_t idx) const
250     {
251         if (idx < m_properties.size())
252             return &m_properties[idx];
253         return NULL;
254     }
255 
256     typedef UniqueCStringMap<size_t> NameToIndex;
257 
258     ConstString m_name;
259     std::vector<Property> m_properties;
260     NameToIndex m_name_to_index;
261 };
262 
263 } // namespace lldb_private
264 
265 #endif  // liblldb_OptionValueProperties_h_
266