1254721Semaste//===-- OptionValueArray.h --------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_OptionValueArray_h_ 11254721Semaste#define liblldb_OptionValueArray_h_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste#include <vector> 16254721Semaste 17254721Semaste// Other libraries and framework includes 18254721Semaste// Project includes 19254721Semaste#include "lldb/Interpreter/OptionValue.h" 20254721Semaste 21254721Semastenamespace lldb_private { 22254721Semaste 23254721Semasteclass OptionValueArray : public OptionValue 24254721Semaste{ 25254721Semastepublic: 26254721Semaste OptionValueArray (uint32_t type_mask = UINT32_MAX, bool raw_value_dump = false) : 27254721Semaste m_type_mask (type_mask), 28254721Semaste m_values (), 29254721Semaste m_raw_value_dump(raw_value_dump) 30254721Semaste { 31254721Semaste } 32254721Semaste 33254721Semaste virtual 34254721Semaste ~OptionValueArray() 35254721Semaste { 36254721Semaste } 37254721Semaste 38254721Semaste //--------------------------------------------------------------------- 39254721Semaste // Virtual subclass pure virtual overrides 40254721Semaste //--------------------------------------------------------------------- 41254721Semaste 42254721Semaste virtual OptionValue::Type 43254721Semaste GetType () const 44254721Semaste { 45254721Semaste return eTypeArray; 46254721Semaste } 47254721Semaste 48254721Semaste virtual void 49254721Semaste DumpValue (const ExecutionContext *exe_ctx, Stream &strm, uint32_t dump_mask); 50254721Semaste 51254721Semaste virtual Error 52254721Semaste SetValueFromCString (const char *value, 53254721Semaste VarSetOperationType op = eVarSetOperationAssign); 54254721Semaste 55254721Semaste virtual bool 56254721Semaste Clear () 57254721Semaste { 58254721Semaste m_values.clear(); 59254721Semaste m_value_was_set = false; 60254721Semaste return true; 61254721Semaste } 62254721Semaste 63254721Semaste virtual lldb::OptionValueSP 64254721Semaste DeepCopy () const; 65254721Semaste 66254721Semaste virtual bool 67254721Semaste IsAggregateValue () const 68254721Semaste { 69254721Semaste return true; 70254721Semaste } 71254721Semaste 72254721Semaste virtual lldb::OptionValueSP 73254721Semaste GetSubValue (const ExecutionContext *exe_ctx, 74254721Semaste const char *name, 75254721Semaste bool will_modify, 76254721Semaste Error &error) const; 77254721Semaste 78254721Semaste //--------------------------------------------------------------------- 79254721Semaste // Subclass specific functions 80254721Semaste //--------------------------------------------------------------------- 81254721Semaste 82254721Semaste size_t 83254721Semaste GetSize () const 84254721Semaste { 85254721Semaste return m_values.size(); 86254721Semaste } 87254721Semaste 88254721Semaste lldb::OptionValueSP 89254721Semaste operator[](size_t idx) const 90254721Semaste { 91254721Semaste lldb::OptionValueSP value_sp; 92254721Semaste if (idx < m_values.size()) 93254721Semaste value_sp = m_values[idx]; 94254721Semaste return value_sp; 95254721Semaste } 96254721Semaste 97254721Semaste lldb::OptionValueSP 98254721Semaste GetValueAtIndex (size_t idx) const 99254721Semaste { 100254721Semaste lldb::OptionValueSP value_sp; 101254721Semaste if (idx < m_values.size()) 102254721Semaste value_sp = m_values[idx]; 103254721Semaste return value_sp; 104254721Semaste } 105254721Semaste 106254721Semaste bool 107254721Semaste AppendValue (const lldb::OptionValueSP &value_sp) 108254721Semaste { 109254721Semaste // Make sure the value_sp object is allowed to contain 110254721Semaste // values of the type passed in... 111254721Semaste if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) 112254721Semaste { 113254721Semaste m_values.push_back(value_sp); 114254721Semaste return true; 115254721Semaste } 116254721Semaste return false; 117254721Semaste } 118254721Semaste 119254721Semaste bool 120254721Semaste InsertValue (size_t idx, const lldb::OptionValueSP &value_sp) 121254721Semaste { 122254721Semaste // Make sure the value_sp object is allowed to contain 123254721Semaste // values of the type passed in... 124254721Semaste if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) 125254721Semaste { 126254721Semaste if (idx < m_values.size()) 127254721Semaste m_values.insert(m_values.begin() + idx, value_sp); 128254721Semaste else 129254721Semaste m_values.push_back(value_sp); 130254721Semaste return true; 131254721Semaste } 132254721Semaste return false; 133254721Semaste } 134254721Semaste 135254721Semaste bool 136254721Semaste ReplaceValue (size_t idx, const lldb::OptionValueSP &value_sp) 137254721Semaste { 138254721Semaste // Make sure the value_sp object is allowed to contain 139254721Semaste // values of the type passed in... 140254721Semaste if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) 141254721Semaste { 142254721Semaste if (idx < m_values.size()) 143254721Semaste { 144254721Semaste m_values[idx] = value_sp; 145254721Semaste return true; 146254721Semaste } 147254721Semaste } 148254721Semaste return false; 149254721Semaste } 150254721Semaste 151254721Semaste bool 152254721Semaste DeleteValue (size_t idx) 153254721Semaste { 154254721Semaste if (idx < m_values.size()) 155254721Semaste { 156254721Semaste m_values.erase (m_values.begin() + idx); 157254721Semaste return true; 158254721Semaste } 159254721Semaste return false; 160254721Semaste } 161254721Semaste 162254721Semaste size_t 163254721Semaste GetArgs (Args &args) const; 164254721Semaste 165254721Semaste Error 166254721Semaste SetArgs (const Args &args, VarSetOperationType op); 167254721Semaste 168254721Semasteprotected: 169254721Semaste typedef std::vector<lldb::OptionValueSP> collection; 170254721Semaste 171254721Semaste uint32_t m_type_mask; 172254721Semaste collection m_values; 173254721Semaste bool m_raw_value_dump; 174254721Semaste}; 175254721Semaste 176254721Semaste} // namespace lldb_private 177254721Semaste 178254721Semaste#endif // liblldb_OptionValueArray_h_ 179