1 //===-- OptionValueDictionary.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_OptionValueDictionary_h_ 11 #define liblldb_OptionValueDictionary_h_ 12 13 #include <map> 14 15 #include "lldb/Interpreter/OptionValue.h" 16 17 namespace lldb_private { 18 19 class OptionValueDictionary : public OptionValue { 20 public: 21 OptionValueDictionary(uint32_t type_mask = UINT32_MAX, 22 bool raw_value_dump = true) OptionValue()23 : OptionValue(), m_type_mask(type_mask), m_values(), 24 m_raw_value_dump(raw_value_dump) {} 25 ~OptionValueDictionary()26 ~OptionValueDictionary() override {} 27 28 //--------------------------------------------------------------------- 29 // Virtual subclass pure virtual overrides 30 //--------------------------------------------------------------------- 31 GetType()32 OptionValue::Type GetType() const override { return eTypeDictionary; } 33 34 void DumpValue(const ExecutionContext *exe_ctx, Stream &strm, 35 uint32_t dump_mask) override; 36 37 Status 38 SetValueFromString(llvm::StringRef value, 39 VarSetOperationType op = eVarSetOperationAssign) override; 40 Clear()41 bool Clear() override { 42 m_values.clear(); 43 m_value_was_set = false; 44 return true; 45 } 46 47 lldb::OptionValueSP DeepCopy() const override; 48 IsAggregateValue()49 bool IsAggregateValue() const override { return true; } 50 IsHomogenous()51 bool IsHomogenous() const { 52 return ConvertTypeMaskToType(m_type_mask) != eTypeInvalid; 53 } 54 55 //--------------------------------------------------------------------- 56 // Subclass specific functions 57 //--------------------------------------------------------------------- 58 GetNumValues()59 size_t GetNumValues() const { return m_values.size(); } 60 61 lldb::OptionValueSP GetValueForKey(const ConstString &key) const; 62 63 lldb::OptionValueSP GetSubValue(const ExecutionContext *exe_ctx, 64 llvm::StringRef name, bool will_modify, 65 Status &error) const override; 66 67 Status SetSubValue(const ExecutionContext *exe_ctx, VarSetOperationType op, 68 llvm::StringRef name, llvm::StringRef value) override; 69 70 bool SetValueForKey(const ConstString &key, 71 const lldb::OptionValueSP &value_sp, 72 bool can_replace = true); 73 74 bool DeleteValueForKey(const ConstString &key); 75 76 size_t GetArgs(Args &args) const; 77 78 Status SetArgs(const Args &args, VarSetOperationType op); 79 80 protected: 81 typedef std::map<ConstString, lldb::OptionValueSP> collection; 82 uint32_t m_type_mask; 83 collection m_values; 84 bool m_raw_value_dump; 85 }; 86 87 } // namespace lldb_private 88 89 #endif // liblldb_OptionValueDictionary_h_ 90