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 // C Includes 14 // C++ Includes 15 #include <map> 16 17 // Other libraries and framework includes 18 // Project includes 19 #include "lldb/Interpreter/OptionValue.h" 20 21 namespace lldb_private { 22 23 class OptionValueDictionary : public OptionValue 24 { 25 public: 26 OptionValueDictionary (uint32_t type_mask = UINT32_MAX, bool raw_value_dump = true) : OptionValue()27 OptionValue(), 28 m_type_mask (type_mask), 29 m_values (), 30 m_raw_value_dump (raw_value_dump) 31 { 32 } 33 34 virtual ~OptionValueDictionary()35 ~OptionValueDictionary() 36 { 37 } 38 39 //--------------------------------------------------------------------- 40 // Virtual subclass pure virtual overrides 41 //--------------------------------------------------------------------- 42 43 virtual OptionValue::Type GetType()44 GetType () const 45 { 46 return eTypeDictionary; 47 } 48 49 virtual void 50 DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask); 51 52 virtual Error 53 SetValueFromCString (const char *value, 54 VarSetOperationType op = eVarSetOperationAssign); 55 56 virtual bool Clear()57 Clear () 58 { 59 m_values.clear(); 60 m_value_was_set = false; 61 return true; 62 } 63 64 virtual lldb::OptionValueSP 65 DeepCopy () const; 66 67 virtual bool IsAggregateValue()68 IsAggregateValue () const 69 { 70 return true; 71 } 72 73 bool IsHomogenous()74 IsHomogenous() const 75 { 76 return ConvertTypeMaskToType (m_type_mask) != eTypeInvalid; 77 } 78 79 //--------------------------------------------------------------------- 80 // Subclass specific functions 81 //--------------------------------------------------------------------- 82 83 size_t GetNumValues()84 GetNumValues() const 85 { 86 return m_values.size(); 87 } 88 89 lldb::OptionValueSP 90 GetValueForKey (const ConstString &key) const; 91 92 virtual lldb::OptionValueSP 93 GetSubValue (const ExecutionContext *exe_ctx, 94 const char *name, 95 bool will_modify, 96 Error &error) const; 97 98 virtual Error 99 SetSubValue (const ExecutionContext *exe_ctx, 100 VarSetOperationType op, 101 const char *name, 102 const char *value); 103 104 //--------------------------------------------------------------------- 105 // String value getters and setters 106 //--------------------------------------------------------------------- 107 const char * 108 GetStringValueForKey (const ConstString &key); 109 110 bool 111 SetStringValueForKey (const ConstString &key, 112 const char *value, 113 bool can_replace = true); 114 115 116 bool 117 SetValueForKey (const ConstString &key, 118 const lldb::OptionValueSP &value_sp, 119 bool can_replace = true); 120 121 bool 122 DeleteValueForKey (const ConstString &key); 123 124 size_t 125 GetArgs (Args &args) const; 126 127 Error 128 SetArgs (const Args &args, VarSetOperationType op); 129 130 protected: 131 typedef std::map<ConstString, lldb::OptionValueSP> collection; 132 uint32_t m_type_mask; 133 collection m_values; 134 bool m_raw_value_dump; 135 }; 136 137 } // namespace lldb_private 138 139 #endif // liblldb_OptionValueDictionary_h_ 140