Antares Simulator
Power System Simulator
Loading...
Searching...
No Matches
SparseVector.hxx
1#include <vector>
2
3template<class T>
5{
6public:
7 std::size_t size() const
8 {
9 return isExtracted ? v.size() : m.size();
10 }
11
12 T& operator[](std::size_t idx)
13 {
14 isExtracted = false;
15 m.push_back({idx, 0});
16 return m.back().second;
17 }
18
19 T* data() const
20 {
21 extract();
22 return v.data();
23 }
24
25 std::vector<T>& extract() const
26 {
27 if (!isExtracted)
28 {
29 isExtracted = true;
30 v.assign(m.size(), 0.);
31 for (auto [index, coeff]: m)
32 {
33 v[index] = coeff;
34 }
35 m.clear();
36 }
37 return v;
38 }
39
40private:
41 mutable bool isExtracted = false;
42 mutable std::vector<std::pair<int, T>> m;
43 mutable std::vector<T> v;
44};
Definition SparseVector.hxx:5