]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/llvm/tools/lldb/include/lldb/Interpreter/OptionValueArray.h
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / llvm / tools / lldb / 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 {
25 public:
26     OptionValueArray (uint32_t type_mask = UINT32_MAX, bool raw_value_dump = false) :
27         m_type_mask (type_mask),
28         m_values (),
29         m_raw_value_dump(raw_value_dump)
30     {
31     }
32     
33     virtual 
34     ~OptionValueArray()
35     {
36     }
37     
38     //---------------------------------------------------------------------
39     // Virtual subclass pure virtual overrides
40     //---------------------------------------------------------------------
41     
42     virtual OptionValue::Type
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
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
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
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
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
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
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
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
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_