QGlobalWriter.hh

Go to the documentation of this file.
00001 #ifndef _Q_GLOBAL_WRITER_HH_
00002 #define _Q_GLOBAL_WRITER_HH_
00003 
00027 #include "QCuore.hh"
00028 #include "QNamed.hh"
00029 #include "QError.hh"
00030 #include "QMessage.hh"
00031 #include "QGlobalRWFactory.hh"
00032 #include <string>
00033 
00034 
00035 namespace Cuore {class QObject;}
00036 using namespace Cuore;
00037 
00038 
00039 class QGlobalWriter : public QNamed
00040 {
00041     public:
00043         QGlobalWriter(const std::string& name) : QNamed(name) {}
00044 
00046         virtual ~QGlobalWriter() {}
00047 
00049         virtual void SetQObject(const std::string& name, const QObject* obj);
00050 
00052         virtual void SetTObject(const std::string& name, TObject* obj);
00053 
00055         virtual void SetDouble(const std::string& name, double obj);
00056 
00058         virtual void SetInt(const std::string& name, int obj);
00059 
00061         virtual void SetFloat(const std::string& name, float obj);
00062 
00064         virtual void SetBool(const std::string& name, bool obj );
00065 
00067         virtual void SetString(const std::string& name, const std::string& obj);
00068 
00069     protected:
00070 
00072         virtual QError Open(const std::string& filename, const std::string& opt = "") = 0;
00073 
00075         virtual QError Close() = 0;
00076 
00077         friend class QGlobalWriterDispatcher;
00078 };
00079 
00085 class QGlobalWriterFactory {
00086     public:
00087         QGlobalWriterFactory(const std::string& name, const std::string& ext) {fName = name; fExt = ext;}
00088         const std::string& GetName() const { return fName;} 
00089         const std::string& GetExt() const { return fExt;} 
00090         virtual ~QGlobalWriterFactory() {};
00091     private: 
00092         virtual QGlobalWriter* Create() = 0;
00093         std::string fName;
00094         std::string fExt;
00095         friend class QGlobalRWFactory;
00096 };
00097 
00098 
00099 #define CREATE_GOLBAL_WRITER_IMPL(clazz, ext) \
00100     class clazz ## Factory: public QGlobalWriterFactory{\
00101         public:\
00102         clazz ## Factory() : QGlobalWriterFactory(#clazz,ext) {}\
00103         QGlobalWriter *Create(){ return new clazz; }\
00104     };
00105 
00106 #define REGISTER_GLOBAL_WRITER(clazz, ext) \
00107     CREATE_GOLBAL_WRITER_IMPL(clazz, ext);\
00108     extern "C" void registerInFactory ## clazz() {\
00109         QGlobalWriterFactory* pt = new clazz ## Factory;\
00110         QGlobalRWFactory::GetInstance().RegisterGlobalWriter(pt);\
00111     }
00112 
00113 #endif

Generated on Tue Nov 16 10:49:57 2010 for CUORE Software by  doxygen 1.5.6