• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {
25 public:
26     OptionValueArray (uint32_t type_mask = UINT32_MAX, bool raw_value_dump = false) :
m_type_mask(type_mask)27         m_type_mask (type_mask),
28         m_values (),
29         m_raw_value_dump(raw_value_dump)
30     {
31     }
32 
33     virtual
~OptionValueArray()34     ~OptionValueArray()
35     {
36     }
37 
38     //---------------------------------------------------------------------
39     // Virtual subclass pure virtual overrides
40     //---------------------------------------------------------------------
41 
42     virtual OptionValue::Type
GetType()43     GetType () const
44     {
45         return eTypeArray;
46     }
47 
48     virtual void
49     DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask);
50 
51     virtual Error
52     SetValueFromCString (const char *value,
53                          VarSetOperationType op = eVarSetOperationAssign);
54 
55     virtual bool
Clear()56     Clear ()
57     {
58         m_values.clear();
59         m_value_was_set = false;
60         return true;
61     }
62 
63     virtual lldb::OptionValueSP
64     DeepCopy () const;
65 
66     virtual bool
IsAggregateValue()67     IsAggregateValue () const
68     {
69         return true;
70     }
71 
72     virtual lldb::OptionValueSP
73     GetSubValue (const ExecutionContext *exe_ctx,
74                  const char *name,
75                  bool will_modify,
76                  Error &error) const;
77 
78     //---------------------------------------------------------------------
79     // Subclass specific functions
80     //---------------------------------------------------------------------
81 
82     size_t
GetSize()83     GetSize () const
84     {
85         return m_values.size();
86     }
87 
88     lldb::OptionValueSP
89     operator[](size_t idx) const
90     {
91         lldb::OptionValueSP value_sp;
92         if (idx < m_values.size())
93             value_sp = m_values[idx];
94         return value_sp;
95     }
96 
97     lldb::OptionValueSP
GetValueAtIndex(size_t idx)98     GetValueAtIndex (size_t idx) const
99     {
100         lldb::OptionValueSP value_sp;
101         if (idx < m_values.size())
102             value_sp = m_values[idx];
103         return value_sp;
104     }
105 
106     bool
AppendValue(const lldb::OptionValueSP & value_sp)107     AppendValue (const lldb::OptionValueSP &value_sp)
108     {
109         // Make sure the value_sp object is allowed to contain
110         // values of the type passed in...
111         if (value_sp && (m_type_mask & value_sp->GetTypeAsMask()))
112         {
113             m_values.push_back(value_sp);
114             return true;
115         }
116         return false;
117     }
118 
119     bool
InsertValue(size_t idx,const lldb::OptionValueSP & value_sp)120     InsertValue (size_t idx, const lldb::OptionValueSP &value_sp)
121     {
122         // Make sure the value_sp object is allowed to contain
123         // values of the type passed in...
124         if (value_sp && (m_type_mask & value_sp->GetTypeAsMask()))
125         {
126             if (idx < m_values.size())
127                 m_values.insert(m_values.begin() + idx, value_sp);
128             else
129                 m_values.push_back(value_sp);
130             return true;
131         }
132         return false;
133     }
134 
135     bool
ReplaceValue(size_t idx,const lldb::OptionValueSP & value_sp)136     ReplaceValue (size_t idx, const lldb::OptionValueSP &value_sp)
137     {
138         // Make sure the value_sp object is allowed to contain
139         // values of the type passed in...
140         if (value_sp && (m_type_mask & value_sp->GetTypeAsMask()))
141         {
142             if (idx < m_values.size())
143             {
144                 m_values[idx] = value_sp;
145                 return true;
146             }
147         }
148         return false;
149     }
150 
151     bool
DeleteValue(size_t idx)152     DeleteValue (size_t idx)
153     {
154         if (idx < m_values.size())
155         {
156             m_values.erase (m_values.begin() + idx);
157             return true;
158         }
159         return false;
160     }
161 
162     size_t
163     GetArgs (Args &args) const;
164 
165     Error
166     SetArgs (const Args &args, VarSetOperationType op);
167 
168 protected:
169     typedef std::vector<lldb::OptionValueSP> collection;
170 
171     uint32_t m_type_mask;
172     collection m_values;
173     bool m_raw_value_dump;
174 };
175 
176 } // namespace lldb_private
177 
178 #endif  // liblldb_OptionValueArray_h_
179