#ifndef __JDAQPMTIDENTIFIER__ #define __JDAQPMTIDENTIFIER__ #include #include "JIO/JSerialisable.hh" #include "JDAQ/JDAQHeader.hh" #include "JDAQ/JDAQModuleIdentifier.hh" #include "JDAQ/JDAQRoot.hh" namespace KM3NETDAQ { namespace { using JIO::JReader; using JIO::JWriter; } /** * PMT identifier. */ class JDAQPMTIdentifier : public JDAQModuleIdentifier { public: /** * Default constructor. */ JDAQPMTIdentifier() : JDAQModuleIdentifier(), address (0) {} /** * Constructor. * * \param moduleID module identifier * \param pmtAddress PMT address */ JDAQPMTIdentifier(const int moduleID, const int pmtAddress) : JDAQModuleIdentifier(moduleID), address (pmtAddress) {} /** * Get PMT identifier. * * \return PMT identifier */ const JDAQPMTIdentifier& getPMTIdentifier() const { return *this; } /** * Set PMT identifier. * * \param pmt PMT identifier */ void setPMTIdentifier(const JDAQPMTIdentifier& pmt) { *this = pmt; } /** * Get PMT identifier. * * \return PMT identifier */ int getPMTAddress() const { return address; } /** * Read PMTIdentifier from input. * * \param in JReader * \param pmt PMTIdentifier * \return JReader */ friend inline JReader& operator>>(JReader& in, JDAQPMTIdentifier& pmt) { in >> static_cast(pmt); in >> pmt.address; return in; } /** * Write PMTIdentifier to output. * * \param out JWriter * \param pmt PMTIdentifier * \return JWriter */ friend inline JWriter& operator<<(JWriter& out, const JDAQPMTIdentifier& pmt) { out << static_cast(pmt); out << pmt.address; return out; } /** * Get size of object. * * \return number of bytes */ static int sizeOf() { return (JDAQModuleIdentifier::sizeOf() + sizeof(int)); } ClassDefNV(JDAQPMTIdentifier,1); protected: int address; }; /** * Less than operator for PMT identifiers. * * \param first PMT identifier * \param second PMT identifier * \result true if first PMT lower than second PMT; else false */ inline bool operator<(const JDAQPMTIdentifier& first, const JDAQPMTIdentifier& second) { if (std::equal_to()(first,second)) return first.getPMTAddress() < second.getPMTAddress(); return std::less()(first,second); } /** * Equal operator for PMT identifiers. * * \param first PMT identifier * \param second PMT identifier * \result true if first PMT equal second PMT; else false */ inline bool operator==(const JDAQPMTIdentifier& first, const JDAQPMTIdentifier& second) { return (std::equal_to()(first,second) && first.getPMTAddress() == second.getPMTAddress()); } } #endif