5 #include <boost/iterator/indirect_iterator.hpp> 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;
25 template <
typename... TArgs>
26 T&
Add(TArgs&&... args)
28 mData.push_back(std::make_unique<T>(std::forward<TArgs>(args)...));
34 mData.push_back(std::make_unique<T>(std::move(t)));
43 IndirectIterator
end()
48 ConstIndirectIterator
begin()
const 53 ConstIndirectIterator
end()
const 58 typename Data::size_type
Size()
const 72 IndirectIterator
Erase(IndirectIterator it)
74 return mData.erase(it.base());
77 IndirectIterator
Erase(IndirectIterator from, IndirectIterator to)
79 return mData.erase(from.base(), to.base());
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