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