Helios++
Helios software for LiDAR simulations
DynSequencer.h
1 #ifndef _DYN_SEQUENCER_H_
2 
3 #include <scene/dynamic/DynSequence.h>
4 
5 #include <string>
6 #include <unordered_map>
7 #include <vector>
8 #include <memory>
9 
10 using std::string;
11 using std::unordered_map;
12 using std::vector;
13 using std::shared_ptr;
14 
24 template <typename T>
25 class DynSequencer {
26 private:
27  // *** SERIALIZATION *** //
28  // *********************** //
29  friend class boost::serialization::access;
36  template <typename Archive>
37  void serialize(Archive &ar, const unsigned int version){
38  ar &dynseqs;
39  ar &start;
40  ar &current;
41  }
42 
43 protected:
44  // *** ATTRIBUTES *** //
45  // ******************** //
49  unordered_map<string, shared_ptr<DynSequence<T>>> dynseqs;
53  shared_ptr<DynSequence<T>> start;
57  shared_ptr<DynSequence<T>> current;
58 public:
59  // *** CONSTRUCTION / DESTRUCTION *** //
60  // ************************************ //
64  DynSequencer() : start(nullptr), current(nullptr) {}
65  virtual ~DynSequencer() {}
66 
67  // *** DYNAMIC SEQUENCING *** //
68  // ***************************** //
73  virtual vector<shared_ptr<T>> nextStep();
78  virtual inline bool hasNextStep() {return current != nullptr;}
79 
80  // *** GETTERs and SETTERs *** //
81  // ***************************** //
90  void add(shared_ptr<DynSequence<T>> dynseq);
95  inline void remove(string const & id) {dynseqs.erase(dynseqs.find(id));}
101  shared_ptr<DynSequence<T>> get(string const &id);
109  inline bool has(string const &id)
110  {return dynseqs.find(id) != dynseqs.end();}
114  inline void clear() {dynseqs.clear();}
115 };
116 
117 #include <scene/dynamic/DynSequencer.tpp>
118 #define _DYN_SEQUENCER_H_
119 #endif
Dynamic sequence is a set of elements that must be applied during dynamic simulations to provide dyna...
Definition: DynSequence.h:37
Dynamic sequencer handles dynamic sequences in a sequential fashion.
Definition: DynSequencer.h:25
bool has(string const &id)
Check if the dynamic sequencer has a dynamic sequence with given identifier.
Definition: DynSequencer.h:109
void add(shared_ptr< DynSequence< T >> dynseq)
Add the dynamic sequence to the sequencer.
shared_ptr< DynSequence< T > > start
The start dynamic sequence.
Definition: DynSequencer.h:53
shared_ptr< DynSequence< T > > get(string const &id)
Get the dynamic sequence with given identifier.
DynSequencer()
Default constructor for the dynamic sequencer.
Definition: DynSequencer.h:64
void serialize(Archive &ar, const unsigned int version)
Serialize a dynamic sequencer to a stream of bytes.
Definition: DynSequencer.h:37
shared_ptr< DynSequence< T > > current
The current dynamic sequence.
Definition: DynSequencer.h:57
void clear()
Remove all dynamic sequences composing the dynamic sequencer.
Definition: DynSequencer.h:114
virtual bool hasNextStep()
Check if the dynamic sequencer supports a next step or not.
Definition: DynSequencer.h:78
unordered_map< string, shared_ptr< DynSequence< T > > > dynseqs
The dynamic sequences handled by the dynamic sequencer.
Definition: DynSequencer.h:49
void remove(string const &id)
Remove the dynamic sequence with given identifier.
Definition: DynSequencer.h:95
virtual vector< shared_ptr< T > > nextStep()
Handle next sequential behavior.