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