Helios++
Helios software for LiDAR simulations
CNRIndexPermuter.hpp
1 #ifndef _SURFACEINSPECTOR_MATHS_PERMUTERS_CNRINDEXPERMUTER_HPP_
2 #define _SURFACEINSPECTOR_MATHS_PERMUTERS_CNRINDEXPERMUTER_HPP_
3 
4 #include <surfaceinspector/maths/permuters/IPermuter.hpp>
5 
7 
8 namespace SurfaceInspector { namespace maths{ namespace permuters {
9 
16 template <typename T>
17 class CNRIndexPermuter : public IPermuter<T>{
18 protected:
19  // *** ATTRIBUTES *** //
20  // ******************** //
24  T n;
28  T k;
33  T max;
41  vector<T> indices;
46 
47 public:
48  // *** CONSTRUCTION / DESTRUCTION *** //
49  // ************************************ //
57  virtual ~CNRIndexPermuter() = default;
58 
59  // *** IPERMUTER *** //
60  // ******************* //
64  inline void start() {indices.clear(); current=0;}
68  bool hasNext() {return current < max;}
72  vector<T> next();
76  inline vector<T> get() {return indices;}
77 };
78 
79 }}}
80 
81 #include <maths/permuters/CNRIndexPermuter.tpp>
82 
83 #endif
Permuter of Combinations with No Repetition (CNR) for indices.
Definition: CNRIndexPermuter.hpp:17
CNRIndexPermuter(T n, T k)
Build a permuter for combinations with no repetitions of indices selecting .
void start()
Definition: CNRIndexPermuter.hpp:64
bool hasNext()
Definition: CNRIndexPermuter.hpp:68
T n
How many indices there are, so it defines a range .
Definition: CNRIndexPermuter.hpp:24
T max
How many combinations without repetitions, , there exist.
Definition: CNRIndexPermuter.hpp:33
T current
Index of current permutation.
Definition: CNRIndexPermuter.hpp:37
vector< T > indices
Current indices permutation.
Definition: CNRIndexPermuter.hpp:41
T k
How many indices are selected for each permutation.
Definition: CNRIndexPermuter.hpp:28
T stopIndex
Index to be used as stop condition.
Definition: CNRIndexPermuter.hpp:45
vector< T > get()
Definition: CNRIndexPermuter.hpp:76
Permuter interface provides methods to iterate over different permutation configurations....
Definition: IPermuter.hpp:24