NexusCPP  3.5.0
nxfinalizer.h
Go to the documentation of this file.
1 //*****************************************************************************
17 //*****************************************************************************
18 
19 #pragma once
20 
21 #include <list>
22 #include <yat/threading/Mutex.h>
23 #include <yat/threading/Pulser.h>
24 #include <yat/any/GenericContainer.h>
25 
26 namespace nxcpp
27 {
28 
29 const std::size_t kDEFAULT_PULSER_PERIOD = 3000;
30 
31 // Forward declaration
32 class DataStreamer;
33 
34 //-----------------------------------------------------------------------------
36 //-----------------------------------------------------------------------------
38 {
39 public:
40 
41  typedef struct Entry
42  {
45 
50  yat::Container *data_holder;
51 
53  Entry () : data_streamer(0), data_holder(0) {}
54 
56  Entry (Entry& src) : data_streamer(src.data_streamer), data_holder(src.data_holder)
57  { src.data_streamer = 0; src.data_holder = 0; }
58 
60  void operator= (Entry& src)
61  { data_streamer = src.data_streamer; src.data_streamer = 0; data_holder = src.data_holder; src.data_holder = 0; }
62 
64  ~Entry () { delete data_streamer; delete data_holder; }
65  } Entry;
66 
67  //-------------------------------------------------------
69 
70  //-------------------------------------------------------
71  virtual ~NexusDataStreamerFinalizer();
72 
76  void start(std::size_t period_ms = kDEFAULT_PULSER_PERIOD);
77 
79  void stop();
80 
82  void push(Entry* e);
83 
84 private:
85  //--------------------------------------------------------
86  typedef std::list<Entry*> Entries;
87  typedef Entries::iterator EntriesIterator;
88  typedef Entries::const_iterator EntriesConstIterator;
89  //--------------------------------------------------------
90  void pulse(yat::Thread::IOArg arg);
91  //--------------------------------------------------------
92  void initialize(const std::size_t period_ms);
93  void terminate();
94  //--------------------------------------------------------
95  inline bool initialized() const { return m_pulser != 0; }
96  //--------------------------------------------------------
97  yat::Pulser* m_pulser;
98  Entries m_entries;
99  yat::Mutex m_entries_mutex;
100  std::size_t m_period_ms;
101 };
102 
103 }
#define NEXUSCPP_DECL
Definition: nxfile.h:67
~Entry()
d-tor
Definition: nxfinalizer.h:64
Entry(Entry &src)
Copy c-tot.
Definition: nxfinalizer.h:56
Definition: nxdebug.h:31
nxcpp::DataStreamer * data_streamer
The nexuscpp::DataStreamer to finalize.
Definition: nxfinalizer.h:44
Definition: nxfinalizer.h:41
const std::size_t kDEFAULT_PULSER_PERIOD
Definition: nxfinalizer.h:29
NexusDataStreamerFinalizer.
Definition: nxfinalizer.h:37
Definition: nxbuffer.h:173
yat::Container * data_holder
Definition: nxfinalizer.h:50
Entry()
default c-tor
Definition: nxfinalizer.h:53