OptionValueArray.h revision 73844aa19a7360b662e2be710fc3c969d6c86606
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
21namespace lldb_private {
22
23class OptionValueArray : public OptionValue
24{
25public:
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    uint32_t
83    GetSize () const
84    {
85        return m_values.size();
86    }
87
88    lldb::OptionValueSP
89    operator[](uint32_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 (uint32_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 (uint32_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 (uint32_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 (uint32_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
168protected:
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