4 #include <boost/iterator/indirect_iterator.hpp> 18 class SortedUniqueVector
26 auto it = std::lower_bound(mData.begin(), mData.end(), &
element);
27 if (it == mData.end() || *it != &
element)
29 mData.insert(it, &element);
35 bool Contains(
const T& element)
const 37 auto it = std::lower_bound(mData.begin(), mData.end(), &
element);
38 if (it == mData.end())
44 std::vector<const T*> mData;
47 typedef std::vector<T*> Data;
51 typedef boost::indirect_iterator<typename Data::iterator>
GroupIterator;
67 Group(std::initializer_list<std::reference_wrapper<T>> elements)
87 if (mUniqueData.Add(element))
88 mData.push_back(&element);
95 return mUniqueData.Contains(element);
113 return mData.begin();
117 ConstGroupIterator
end()
const 125 return mData.begin();
139 SortedUniqueVector mUniqueData;
143 template <
typename T>
153 template <
typename T,
typename... TArgs>
160 template <
typename T>
171 template <
typename T>
183 template <
typename T>
ConstGroupIterator end() const
Iterate over group elements (by value not pointer)
Definition: Group.h:117
auto Size() const
Number of constituents.
Definition: Group.h:105
Group< T > Unite(const Group< T > &one, const Group< T > &two)
Unite two groups.
Definition: Group.h:144
ConstGroupIterator begin() const
Iterate over group elements (by value not pointer)
Definition: Group.h:111
T & operator[](size_t index)
Definition: Group.h:73
Group(T &element)
Create a group containing a single element.
Definition: Group.h:59
element
Definition: DamageBar.py:31
Group< T > Difference(const Group< T > &one, const Group< T > &two)
Returns group with elements of group one that are not in group two.
Definition: Group.h:161
const T & operator[](size_t index) const
Definition: Group.h:78
boost::indirect_iterator< typename Data::iterator > GroupIterator
indirect (dereferencing) iterator to provide value semantics for the iterators
Definition: Group.h:51
boost::indirect_iterator< typename Data::const_iterator > ConstGroupIterator
Definition: Group.h:52
GroupIterator begin()
Iterate over group elements (by value not pointer)
Definition: Group.h:123
Group()=default
Create an empty group.
Group(std::initializer_list< std::reference_wrapper< T >> elements)
Create a group containing multiple elements.
Definition: Group.h:67
bool Contains(const T &element) const
True if element is contained in group.
Definition: Group.h:93
bool Empty() const
True if group is empty.
Definition: Group.h:99
GroupIterator end()
Iterate over group elements (by value not pointer)
Definition: Group.h:129
Definition: Exception.h:6
void Add(T &element)
Add element to group.
Definition: Group.h:85
Ordered container class for elements, nodes and the like.
Definition: Group.h:15
Group< T > Intersection(const Group< T > &one, const Group< T > &two)
Returns group with elements that are in both groups.
Definition: Group.h:172
Group< T > SymmetricDifference(const Group< T > &one, const Group< T > &two)
Returns group with elements that are only in one group not in both.
Definition: Group.h:184