#ifndef __JDAQTRIGGERCOUNTER__ #define __JDAQTRIGGERCOUNTER__ #include "JIO/JSerialisable.hh" #include "JDAQ/JDAQRoot.hh" namespace KM3NETDAQ { namespace { using JIO::JReader; using JIO::JWriter; } /** * Type definition of trigger counter. */ typedef unsigned long long int JTriggerCounter_t; /** * Auxiliary class to count triggers. */ class JDAQTriggerCounter { private: /** * Constructor. * * \param counter counter value */ JDAQTriggerCounter(const JTriggerCounter_t counter) { this->trigger_counter = counter; } public: /** * Default constructor. * * This constructor increments the counter of the unique instance * of this class and stores the result in this object. */ JDAQTriggerCounter() { trigger_counter = getInstance().next(); } /** * Virtual destructor. */ virtual ~JDAQTriggerCounter() {} /** * Get reference to unique instance of this class object. * * \return reference to this class object */ static JDAQTriggerCounter& getInstance() { static JDAQTriggerCounter counter(0); return counter; } /** * Reset counter of unique instance of this class object. */ static void reset() { getInstance().trigger_counter = 0; } /** * Get trigger counter. * * \return counter value */ JTriggerCounter_t getCounter() const { return trigger_counter; } /** * Set trigger counter. * * \param counter counter value */ void setCounter(const JTriggerCounter_t counter) { this->trigger_counter = trigger_counter; } /** * Increment trigger counter. * * \return counter value */ JTriggerCounter_t next() { return trigger_counter++; } /** * Read JDAQTriggerCounter from input. * * \param in JReader * \param counter JDAQTriggerCounter * \return JReader */ friend inline JReader& operator>>(JReader& in, JDAQTriggerCounter& counter) { in >> counter.trigger_counter; return in; } /** * Write JDAQTriggerCounter to output. * * \param out JWriter * \param counter JDAQTriggerCounter * \return JWriter */ friend inline JWriter& operator<<(JWriter& out, const JDAQTriggerCounter& counter) { out << counter.trigger_counter; return out; } /** * Get size of object. * * \return number of bytes */ static int sizeOf() { return sizeof(JTriggerCounter_t); } ClassDef(JDAQTriggerCounter,1); protected: JTriggerCounter_t trigger_counter; }; } #endif