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