#ifndef __JDAQTRIGGERCOUNTER__ #define __JDAQTRIGGERCOUNTER__ #include "km3net-dataformat/online/JDAQRoot.hh" /** * \author mdejong */ namespace KM3NETDAQ { /** * 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: friend size_t getSizeof<JDAQTriggerCounter>(); friend JReader& operator>>(JReader&, JDAQTriggerCounter&); friend JWriter& operator<<(JWriter&, const JDAQTriggerCounter&); /** * 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; } /** * Get DAQ trigger counter. * * \return DAQ trigger counter */ const JDAQTriggerCounter& getDAQTriggerCounter() const { return static_cast<const JDAQTriggerCounter&>(*this); } /** * 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 = counter; } /** * Increment trigger counter. * * \return counter value */ JTriggerCounter_t next() { return trigger_counter++; } ClassDef(JDAQTriggerCounter,1); protected: JTriggerCounter_t trigger_counter; }; /** * Equal operator for DAQ trigger counters. * * \param first trigger counter * \param second trigger counter * \result true if first trigger counter equal to second; else false */ inline bool operator==(const JDAQTriggerCounter& first, const JDAQTriggerCounter& second) { return (first.getCounter() == second.getCounter()); } /** * Not-equal operator for DAQ trigger counters. * * \param first trigger counter * \param second trigger counter * \result true if first trigger counter not equal to second; else false */ inline bool operator!=(const JDAQTriggerCounter& first, const JDAQTriggerCounter& second) { return !(first == second); } } #endif