#ifndef FACT_DimDescriptionService #define FACT_DimDescriptionService #include #include #include class Time; class DimService; class DimDescriptionService { static int fCount; /// Counter to count the number of instatiations static DimService *fService; /// Pointer to the DimService distributing the desscriptions static std::string fData; /// Data to be distributed with the service std::string fDescription; /// Local storage for the applied description public: DimDescriptionService(const std::string &name, const std::string &format); virtual ~DimDescriptionService(); std::string GetDescription() const { return fDescription; } }; #include "dis.hxx" class DimDescribedService : public DimDescriptionService, public DimService { public: template DimDescribedService(const std::string &name, const T &val, const char *desc) : DimDescriptionService(name.c_str(), desc), DimService(name.c_str(), const_cast(val)) { setQuality(0); } template DimDescribedService(const std::string &name, const char *format, const T &val, const char *desc) : DimDescriptionService(name.c_str(), desc), DimService(name.c_str(), format, const_cast(&val), sizeof(T)) { setQuality(0); } DimDescribedService(const std::string &name, const char *format, const char *desc) : DimDescriptionService(name.c_str(), desc), DimService(name.c_str(), format, (void*)NULL, 0) { setQuality(0); // FIXME: compare number of ; with number of | } void setData(const void *ptr, size_t sz) { DimService::setData(const_cast(ptr), sz); } template void setData(const std::vector &data) { setData(data.data(), data.size()*sizeof(T)); } template void setData(const std::array &data) { setData(data.data(), N*sizeof(T)); } void setTime(const Time &t); void setTime(); int Update(); int Update(const Time &t); int Update(const std::string &data); int Update(const char *data); template int Update(const T &data) { setData(&data, sizeof(T)); return Update(); } template int Update(const std::vector &data) { setData(data); return Update(); } template int Update(const std::array &data) { setData(data); return Update(); } // FIXME: Implement callback with boost::function instead of Pointer to this }; #endif