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 //--------------------------------------------------------------------- 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 46 ~OptionValueProperties() 47 { 48 } 49 50 virtual Type 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 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 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 * 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