1 //===-- OptionValueDictionary.h ---------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_INTERPRETER_OPTIONVALUEDICTIONARY_H 10 #define LLDB_INTERPRETER_OPTIONVALUEDICTIONARY_H 11 12 #include <map> 13 14 #include "lldb/Interpreter/OptionValue.h" 15 #include "lldb/lldb-private-types.h" 16 17 namespace lldb_private { 18 19 class OptionValueDictionary 20 : public Cloneable<OptionValueDictionary, OptionValue> { 21 public: 22 OptionValueDictionary(uint32_t type_mask = UINT32_MAX, 23 OptionEnumValues enum_values = OptionEnumValues(), 24 bool raw_value_dump = true) 25 : m_type_mask(type_mask), m_enum_values(enum_values), 26 m_raw_value_dump(raw_value_dump) {} 27 28 ~OptionValueDictionary() override = default; 29 30 // Virtual subclass pure virtual overrides 31 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 41 void Clear() override { 42 m_values.clear(); 43 m_value_was_set = false; 44 } 45 46 lldb::OptionValueSP 47 DeepCopy(const lldb::OptionValueSP &new_parent) const override; 48 49 bool IsAggregateValue() const override { return true; } 50 51 bool IsHomogenous() const { 52 return ConvertTypeMaskToType(m_type_mask) != eTypeInvalid; 53 } 54 55 // Subclass specific functions 56 57 size_t GetNumValues() const { return m_values.size(); } 58 59 lldb::OptionValueSP GetValueForKey(ConstString key) const; 60 61 lldb::OptionValueSP GetSubValue(const ExecutionContext *exe_ctx, 62 llvm::StringRef name, bool will_modify, 63 Status &error) const override; 64 65 Status SetSubValue(const ExecutionContext *exe_ctx, VarSetOperationType op, 66 llvm::StringRef name, llvm::StringRef value) override; 67 68 bool SetValueForKey(ConstString key, 69 const lldb::OptionValueSP &value_sp, 70 bool can_replace = true); 71 72 bool DeleteValueForKey(ConstString key); 73 74 size_t GetArgs(Args &args) const; 75 76 Status SetArgs(const Args &args, VarSetOperationType op); 77 78 protected: 79 typedef std::map<ConstString, lldb::OptionValueSP> collection; 80 uint32_t m_type_mask; 81 OptionEnumValues m_enum_values; 82 collection m_values; 83 bool m_raw_value_dump; 84 }; 85 86 } // namespace lldb_private 87 88 #endif // LLDB_INTERPRETER_OPTIONVALUEDICTIONARY_H 89