Coverage Report

Created: 2023-09-21 18:56

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Interpreter/OptionValueArray.h
Line
Count
Source (jump to first uncovered line)
1
//===-- OptionValueArray.h --------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_INTERPRETER_OPTIONVALUEARRAY_H
10
#define LLDB_INTERPRETER_OPTIONVALUEARRAY_H
11
12
#include <vector>
13
14
#include "lldb/Interpreter/OptionValue.h"
15
16
namespace lldb_private {
17
18
class OptionValueArray : public Cloneable<OptionValueArray, OptionValue> {
19
public:
20
  OptionValueArray(uint32_t type_mask = UINT32_MAX, bool raw_value_dump = false)
21
25.7k
      : m_type_mask(type_mask), m_raw_value_dump(raw_value_dump) {}
22
23
30.1k
  ~OptionValueArray() override = default;
24
25
  // Virtual subclass pure virtual overrides
26
27
29.8k
  OptionValue::Type GetType() const override { return eTypeArray; }
28
29
  void DumpValue(const ExecutionContext *exe_ctx, Stream &strm,
30
                 uint32_t dump_mask) override;
31
32
  llvm::json::Value ToJSON(const ExecutionContext *exe_ctx) override;
33
34
  Status
35
  SetValueFromString(llvm::StringRef value,
36
                     VarSetOperationType op = eVarSetOperationAssign) override;
37
38
16.4k
  void Clear() override {
39
16.4k
    m_values.clear();
40
16.4k
    m_value_was_set = false;
41
16.4k
  }
42
43
  lldb::OptionValueSP
44
  DeepCopy(const lldb::OptionValueSP &new_parent) const override;
45
46
0
  bool IsAggregateValue() const override { return true; }
47
48
  lldb::OptionValueSP GetSubValue(const ExecutionContext *exe_ctx,
49
                                  llvm::StringRef name,
50
                                  Status &error) const override;
51
52
  // Subclass specific functions
53
54
703
  size_t GetSize() const { return m_values.size(); }
55
56
6
  lldb::OptionValueSP operator[](size_t idx) const {
57
6
    lldb::OptionValueSP value_sp;
58
6
    if (idx < m_values.size())
59
6
      value_sp = m_values[idx];
60
6
    return value_sp;
61
6
  }
62
63
101
  lldb::OptionValueSP GetValueAtIndex(size_t idx) const {
64
101
    lldb::OptionValueSP value_sp;
65
101
    if (idx < m_values.size())
66
101
      value_sp = m_values[idx];
67
101
    return value_sp;
68
101
  }
69
70
148
  bool AppendValue(const lldb::OptionValueSP &value_sp) {
71
    // Make sure the value_sp object is allowed to contain values of the type
72
    // passed in...
73
148
    if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
74
148
      m_values.push_back(value_sp);
75
148
      return true;
76
148
    }
77
0
    return false;
78
148
  }
79
80
101
  bool InsertValue(size_t idx, const lldb::OptionValueSP &value_sp) {
81
    // Make sure the value_sp object is allowed to contain values of the type
82
    // passed in...
83
101
    if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
84
101
      if (idx < m_values.size())
85
0
        m_values.insert(m_values.begin() + idx, value_sp);
86
101
      else
87
101
        m_values.push_back(value_sp);
88
101
      return true;
89
101
    }
90
0
    return false;
91
101
  }
92
93
0
  bool ReplaceValue(size_t idx, const lldb::OptionValueSP &value_sp) {
94
0
    // Make sure the value_sp object is allowed to contain values of the type
95
0
    // passed in...
96
0
    if (value_sp && (m_type_mask & value_sp->GetTypeAsMask())) {
97
0
      if (idx < m_values.size()) {
98
0
        m_values[idx] = value_sp;
99
0
        return true;
100
0
      }
101
0
    }
102
0
    return false;
103
0
  }
104
105
0
  bool DeleteValue(size_t idx) {
106
0
    if (idx < m_values.size()) {
107
0
      m_values.erase(m_values.begin() + idx);
108
0
      return true;
109
0
    }
110
0
    return false;
111
0
  }
112
113
  size_t GetArgs(Args &args) const;
114
115
  Status SetArgs(const Args &args, VarSetOperationType op);
116
117
protected:
118
  typedef std::vector<lldb::OptionValueSP> collection;
119
120
  uint32_t m_type_mask;
121
  collection m_values;
122
  bool m_raw_value_dump;
123
};
124
125
} // namespace lldb_private
126
127
#endif // LLDB_INTERPRETER_OPTIONVALUEARRAY_H