DiaDes  0.1
DIAgnosis of Discrete-Event System
VectorTools.hh
Go to the documentation of this file.
1 
9 #ifndef __DIADES__UTILS__VECTORTOOLS__HH
10 #define __DIADES__UTILS__VECTORTOOLS__HH
11 
12 #include <vector>
13 
14 namespace Diades
15 {
16  namespace Utils
17  {
18 
33  template<typename T>
34  typename std::vector<T>::size_type
35  swapRemove(std::vector<T> & myVector,
36  typename std::vector<T>::size_type index)
37  {
38  if(myVector.empty())
39  {
40  return myVector.size();
41  }
42  if(index == myVector.size() - 1)
43  {
44  myVector.pop_back();
45  return myVector.size();
46  }
47  if(index > myVector.size() - 1)
48  {
49  return myVector.size();
50  }
51  std::swap(myVector[index], myVector.back());
52  myVector.pop_back();
53  return index;
54  }
55 
72  template<typename T>
73  typename std::vector<T>::size_type
74  swapRemove(std::vector<T> & myVector,
75  typename std::vector<T>::iterator & it)
76  {
77  return swapRemove(myVector, it - myVector.begin());
78  }
79 
94  template<typename T>
95  typename std::vector<T>::size_type
96  swapRemoveFirst(std::vector<T> & myVector, const T & element)
97  {
98  auto it = std::find(myVector.begin(), myVector.end(), element);
99  if(it == myVector.end())
100  {
101  return myVector.size();
102  }
103  return swapRemove(myVector, it);
104  }
105 
120  template<typename T>
121  typename std::vector<T>::size_type
122  swapRemove(std::vector<T> & myVector, const T & element)
123  {
124  auto it = std::find(myVector.begin(), myVector.end(), element);
125  typename std::vector<T>::size_type index = myVector.size();
126  while(it != myVector.end())
127  {
128  index = swapRemove(myVector, it);
129  it = std::find(myVector.begin() + index, myVector.end(), element);
130  }
131  return index;
132  }
133 
134 
135 
136 
137  }
138 }
139 
140 
141 #endif /* __DIADES__UTILS__VECTORTOOLS__HH */
142 
std::vector< T >::size_type swapRemoveFirst(std::vector< T > &myVector, const T &element)
Definition: VectorTools.hh:96
Namespace of the Diades project.
std::vector< T >::size_type swapRemove(std::vector< T > &myVector, typename std::vector< T >::size_type index)
Definition: VectorTools.hh:35