NuTo
Numerics Tool
ValueVector.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <memory>
5 #include <boost/iterator/indirect_iterator.hpp>
6 
7 
8 namespace NuTo
9 {
10 
16 template <typename T>
18 {
19  using Data = std::vector<std::unique_ptr<T>>;
21  typedef boost::indirect_iterator<typename Data::iterator> IndirectIterator;
22  typedef boost::indirect_iterator<typename Data::const_iterator> ConstIndirectIterator;
23 
24 public:
25  template <typename... TArgs>
26  T& Add(TArgs&&... args)
27  {
28  mData.push_back(std::make_unique<T>(std::forward<TArgs>(args)...));
29  return *mData.back();
30  }
31 
32  T& Add(T&& t)
33  {
34  mData.push_back(std::make_unique<T>(std::move(t)));
35  return *mData.back();
36  }
37 
38  IndirectIterator begin()
39  {
40  return mData.begin();
41  }
42 
43  IndirectIterator end()
44  {
45  return mData.end();
46  }
47 
48  ConstIndirectIterator begin() const
49  {
50  return mData.begin();
51  }
52 
53  ConstIndirectIterator end() const
54  {
55  return mData.end();
56  }
57 
58  typename Data::size_type Size() const
59  {
60  return mData.size();
61  }
62 
63  const T& operator[](int i) const
64  {
65  return *mData[i];
66  }
67  T& operator[](int i)
68  {
69  return *mData[i];
70  }
71 
72  IndirectIterator Erase(IndirectIterator it)
73  {
74  return mData.erase(it.base());
75  }
76 
77  IndirectIterator Erase(IndirectIterator from, IndirectIterator to)
78  {
79  return mData.erase(from.base(), to.base());
80  }
81 
82 private:
83  Data mData;
84 };
85 } /* NuTo */
const T & operator[](int i) const
Definition: ValueVector.h:63
Data::size_type Size() const
Definition: ValueVector.h:58
T & Add(T &&t)
Definition: ValueVector.h:32
container that stores values of T and keeps references to these values valid
Definition: ValueVector.h:17
ConstIndirectIterator begin() const
Definition: ValueVector.h:48
T & Add(TArgs &&...args)
Definition: ValueVector.h:26
ConstIndirectIterator end() const
Definition: ValueVector.h:53
IndirectIterator Erase(IndirectIterator it)
Definition: ValueVector.h:72
IndirectIterator begin()
Definition: ValueVector.h:38
IndirectIterator Erase(IndirectIterator from, IndirectIterator to)
Definition: ValueVector.h:77
IndirectIterator end()
Definition: ValueVector.h:43
Definition: Exception.h:6
T & operator[](int i)
Definition: ValueVector.h:67