1 //===-- OptionValueProperties.h ---------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_OptionValueProperties_h_
11 #define liblldb_OptionValueProperties_h_
17 // Other libraries and framework includes
19 #include "lldb/Core/ConstString.h"
20 #include "lldb/Core/FormatEntity.h"
21 #include "lldb/Core/UniqueCStringMap.h"
22 #include "lldb/Interpreter/OptionValue.h"
23 #include "lldb/Interpreter/Property.h"
25 namespace lldb_private {
27 class OptionValueProperties :
29 public std::enable_shared_from_this<OptionValueProperties>
32 OptionValueProperties () :
40 OptionValueProperties (const ConstString &name);
42 OptionValueProperties (const OptionValueProperties &global_properties);
44 ~OptionValueProperties() override = default;
47 GetType() const override
49 return eTypeProperties;
56 DeepCopy() const override;
59 SetValueFromString(llvm::StringRef value,
60 VarSetOperationType op = eVarSetOperationAssign) override;
63 DumpValue(const ExecutionContext *exe_ctx,
65 uint32_t dump_mask) override;
68 GetName() const override
74 DumpPropertyValue (const ExecutionContext *exe_ctx,
76 const char *property_path,
80 DumpAllDescriptions (CommandInterpreter &interpreter,
84 Apropos (const char *keyword,
85 std::vector<const Property *> &matching_properties) const;
88 Initialize (const PropertyDefinition *setting_definitions);
91 // GetQualifiedName (Stream &strm);
93 //---------------------------------------------------------------------
94 // Subclass specific functions
95 //---------------------------------------------------------------------
98 GetNumProperties() const;
101 GetPropertyNameAtIndex (uint32_t idx) const;
104 GetPropertyDescriptionAtIndex (uint32_t idx) const;
106 //---------------------------------------------------------------------
107 // Get the index of a property given its exact name in this property
108 // collection, "name" can't be a path to a property path that refers
109 // to a property within a property
110 //---------------------------------------------------------------------
112 GetPropertyIndex (const ConstString &name) const;
114 //---------------------------------------------------------------------
115 // Get a property by exact name exists in this property collection, name
116 // can not be a path to a property path that refers to a property within
118 //---------------------------------------------------------------------
119 virtual const Property *
120 GetProperty (const ExecutionContext *exe_ctx,
122 const ConstString &name) const;
124 virtual const Property *
125 GetPropertyAtIndex (const ExecutionContext *exe_ctx,
129 //---------------------------------------------------------------------
130 // Property can be be a property path like "target.process.extra-startup-command"
131 //---------------------------------------------------------------------
132 virtual const Property *
133 GetPropertyAtPath (const ExecutionContext *exe_ctx,
135 const char *property_path) const;
137 virtual lldb::OptionValueSP
138 GetPropertyValueAtIndex (const ExecutionContext *exe_ctx,
142 virtual lldb::OptionValueSP
143 GetValueForKey (const ExecutionContext *exe_ctx,
144 const ConstString &key,
145 bool value_will_be_modified) const;
148 GetSubValue(const ExecutionContext *exe_ctx,
150 bool value_will_be_modified,
151 Error &error) const override;
154 SetSubValue(const ExecutionContext *exe_ctx,
155 VarSetOperationType op,
157 const char *value) override;
160 PredicateMatches (const ExecutionContext *exe_ctx,
161 const char *predicate) const
168 GetPropertyAtIndexAsOptionValueArch (const ExecutionContext *exe_ctx, uint32_t idx) const;
170 OptionValueLanguage *
171 GetPropertyAtIndexAsOptionValueLanguage (const ExecutionContext *exe_ctx, uint32_t idx) const;
174 GetPropertyAtIndexAsArgs (const ExecutionContext *exe_ctx, uint32_t idx, Args &args) const;
177 SetPropertyAtIndexFromArgs (const ExecutionContext *exe_ctx, uint32_t idx, const Args &args);
180 GetPropertyAtIndexAsBoolean (const ExecutionContext *exe_ctx, uint32_t idx, bool fail_value) const;
183 SetPropertyAtIndexAsBoolean (const ExecutionContext *exe_ctx, uint32_t idx, bool new_value);
185 OptionValueDictionary *
186 GetPropertyAtIndexAsOptionValueDictionary (const ExecutionContext *exe_ctx, uint32_t idx) const;
189 GetPropertyAtIndexAsEnumeration (const ExecutionContext *exe_ctx, uint32_t idx, int64_t fail_value) const;
192 SetPropertyAtIndexAsEnumeration (const ExecutionContext *exe_ctx, uint32_t idx, int64_t new_value);
194 const FormatEntity::Entry *
195 GetPropertyAtIndexAsFormatEntity (const ExecutionContext *exe_ctx, uint32_t idx);
197 const RegularExpression *
198 GetPropertyAtIndexAsOptionValueRegex (const ExecutionContext *exe_ctx, uint32_t idx) const;
201 GetPropertyAtIndexAsOptionValueSInt64 (const ExecutionContext *exe_ctx, uint32_t idx) const;
204 GetPropertyAtIndexAsSInt64 (const ExecutionContext *exe_ctx, uint32_t idx, int64_t fail_value) const;
207 SetPropertyAtIndexAsSInt64 (const ExecutionContext *exe_ctx, uint32_t idx, int64_t new_value);
210 GetPropertyAtIndexAsUInt64 (const ExecutionContext *exe_ctx, uint32_t idx, uint64_t fail_value) const;
213 SetPropertyAtIndexAsUInt64 (const ExecutionContext *exe_ctx, uint32_t idx, uint64_t new_value);
216 GetPropertyAtIndexAsString (const ExecutionContext *exe_ctx, uint32_t idx, const char *fail_value) const;
219 SetPropertyAtIndexAsString (const ExecutionContext *exe_ctx, uint32_t idx, const char *new_value);
222 GetPropertyAtIndexAsOptionValueString (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
224 OptionValueFileSpec *
225 GetPropertyAtIndexAsOptionValueFileSpec (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
228 GetPropertyAtIndexAsFileSpec (const ExecutionContext *exe_ctx, uint32_t idx) const;
231 SetPropertyAtIndexAsFileSpec (const ExecutionContext *exe_ctx, uint32_t idx, const FileSpec &file_spec);
233 OptionValuePathMappings *
234 GetPropertyAtIndexAsOptionValuePathMappings (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
236 OptionValueFileSpecList *
237 GetPropertyAtIndexAsOptionValueFileSpecList (const ExecutionContext *exe_ctx, bool will_modify, uint32_t idx) const;
240 AppendProperty(const ConstString &name,
241 const ConstString &desc,
243 const lldb::OptionValueSP &value_sp);
245 lldb::OptionValuePropertiesSP
246 GetSubProperty (const ExecutionContext *exe_ctx,
247 const ConstString &name);
250 SetValueChangedCallback (uint32_t property_idx,
251 OptionValueChangedCallback callback,
256 ProtectedGetPropertyAtIndex(uint32_t idx)
258 return ((idx < m_properties.size()) ? &m_properties[idx] : nullptr);
262 ProtectedGetPropertyAtIndex(uint32_t idx) const
264 return ((idx < m_properties.size()) ? &m_properties[idx] : nullptr);
267 typedef UniqueCStringMap<size_t> NameToIndex;
270 std::vector<Property> m_properties;
271 NameToIndex m_name_to_index;
274 } // namespace lldb_private
276 #endif // liblldb_OptionValueProperties_h_