]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - include/lldb/Interpreter/OptionValueArray.h
Vendor import of lldb trunk r290819:
[FreeBSD/FreeBSD.git] / include / lldb / Interpreter / OptionValueArray.h
1 //===-- OptionValueArray.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_OptionValueArray_h_
11 #define liblldb_OptionValueArray_h_
12
13 // C Includes
14 // C++ Includes
15 #include <vector>
16
17 // Other libraries and framework includes
18 // Project includes
19 #include "lldb/Interpreter/OptionValue.h"
20
21 namespace lldb_private {
22
23 class OptionValueArray : public OptionValue {
24 public:
25   OptionValueArray(uint32_t type_mask = UINT32_MAX, bool raw_value_dump = false)
26       : m_type_mask(type_mask), m_values(), m_raw_value_dump(raw_value_dump) {}
27
28   ~OptionValueArray() override {}
29
30   //---------------------------------------------------------------------
31   // Virtual subclass pure virtual overrides
32   //---------------------------------------------------------------------
33
34   OptionValue::Type GetType() const override { return eTypeArray; }
35
36   void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
37                  uint32_t dump_mask) override;
38
39   Error
40   SetValueFromString(llvm::StringRef value,
41                      VarSetOperationType op = eVarSetOperationAssign) override;
42   Error
43   SetValueFromString(const char *,
44                      VarSetOperationType = eVarSetOperationAssign) = delete;
45
46   bool Clear() override {
47     m_values.clear();
48     m_value_was_set = false;
49     return true;
50   }
51
52   lldb::OptionValueSP DeepCopy() const override;
53
54   bool IsAggregateValue() const override { return true; }
55
56   lldb::OptionValueSP GetSubValue(const ExecutionContext *exe_ctx,
57                                   llvm::StringRef name, bool will_modify,
58                                   Error &error) const override;
59
60   //---------------------------------------------------------------------
61   // Subclass specific functions
62   //---------------------------------------------------------------------
63
64   size_t GetSize() const { return m_values.size(); }
65
66   lldb::OptionValueSP operator[](size_t idx) const {
67     lldb::OptionValueSP value_sp;
68     if (idx < m_values.size())
69       value_sp = m_values[idx];
70     return value_sp;
71   }
72
73   lldb::OptionValueSP GetValueAtIndex(size_t idx) const {
74     lldb::OptionValueSP value_sp;
75     if (idx < m_values.size())
76       value_sp = m_values[idx];
77     return value_sp;
78   }
79
80   bool AppendValue(const lldb::OptionValueSP &value_sp) {
81     // Make sure the value_sp object is allowed to contain
82     // values of the type passed in...
83     if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
84       m_values.push_back(value_sp);
85       return true;
86     }
87     return false;
88   }
89
90   bool InsertValue(size_t idx, const lldb::OptionValueSP &value_sp) {
91     // Make sure the value_sp object is allowed to contain
92     // values of the type passed in...
93     if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
94       if (idx < m_values.size())
95         m_values.insert(m_values.begin() + idx, value_sp);
96       else
97         m_values.push_back(value_sp);
98       return true;
99     }
100     return false;
101   }
102
103   bool ReplaceValue(size_t idx, const lldb::OptionValueSP &value_sp) {
104     // Make sure the value_sp object is allowed to contain
105     // values of the type passed in...
106     if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
107       if (idx < m_values.size()) {
108         m_values[idx] = value_sp;
109         return true;
110       }
111     }
112     return false;
113   }
114
115   bool DeleteValue(size_t idx) {
116     if (idx < m_values.size()) {
117       m_values.erase(m_values.begin() + idx);
118       return true;
119     }
120     return false;
121   }
122
123   size_t GetArgs(Args &args) const;
124
125   Error SetArgs(const Args &args, VarSetOperationType op);
126
127 protected:
128   typedef std::vector<lldb::OptionValueSP> collection;
129
130   uint32_t m_type_mask;
131   collection m_values;
132   bool m_raw_value_dump;
133 };
134
135 } // namespace lldb_private
136
137 #endif // liblldb_OptionValueArray_h_