Diana Software
QGlobalWriter.hh
Go to the documentation of this file.
1 #ifndef _Q_GLOBAL_WRITER_HH_
2 #define _Q_GLOBAL_WRITER_HH_
27 #include "QDiana.hh"
28 #include "QNamed.hh"
29 #include "QError.hh"
30 #include "QMessage.hh"
31 #include "QDemangle.hh"
32 #include "QGlobalRWFactory.hh"
33 #include <string>
34 
35 
36 namespace Diana {class QObject;}
37 
38 
39 class QGlobalWriter : public QNamed
40 {
41  public:
43  QGlobalWriter(const std::string& name) : QNamed(name) {}
44 
46  virtual ~QGlobalWriter() {}
47 
49  template<class Q> QError Set(const std::string& name, const Q& obj, const std::string& descr = "")
50  {
51  return SetQObject(name,Demangle(obj),&obj,descr);
52  }
53 
54  protected:
55  virtual QError SetQObject(const std::string& name, const std::string& className, const Diana::QObject* obj, const std::string& descr) = 0;
56 
58  virtual QError Open(const std::string& filename, const std::string& opt = "") = 0;
59 
61  virtual QError Close() = 0;
62 
64 };
65 
72  public:
73  QGlobalWriterFactory(const std::string& name, const std::string& ext) {fName = name; fExt = ext;}
74  const std::string& GetName() const { return fName;}
75  const std::string& GetExt() const { return fExt;}
76  virtual ~QGlobalWriterFactory() {};
77  private:
78  virtual QGlobalWriter* Create() = 0;
79  std::string fName;
80  std::string fExt;
81  friend class QGlobalRWFactory;
82 };
83 
84 
85 #define CREATE_GOLBAL_WRITER_IMPL(clazz, ext) \
86  class clazz ## Factory: public QGlobalWriterFactory{\
87  public:\
88  clazz ## Factory() : QGlobalWriterFactory(#clazz,ext) {}\
89  QGlobalWriter *Create(){ return new clazz; }\
90  };
91 
92 #define REGISTER_GLOBAL_WRITER(clazz, ext) \
93  CREATE_GOLBAL_WRITER_IMPL(clazz, ext);\
94  extern "C" void registerInFactory ## clazz() {\
95  QGlobalWriterFactory* pt = new clazz ## Factory;\
96  QGlobalRWFactory::GetInstance().RegisterGlobalWriter(pt);\
97  }
98 
99 #endif
std::string Demangle(const C &obj, int firstChar=0)
Definition: QDemangle.hh:12
error class with error type and description
Definition: QError.hh:115
This class take care of plugin registration and creation.
Class that returns a pointer to the writer matching the given input filename.
abstract factory for QGlobalWriter.
const std::string & GetName() const
QGlobalWriterFactory(const std::string &name, const std::string &ext)
const std::string & GetExt() const
virtual QGlobalWriter * Create()=0
virtual ~QGlobalWriterFactory()
Abstract class for global writers.
QGlobalWriter(const std::string &name)
constructor
virtual ~QGlobalWriter()
destructor
QError Set(const std::string &name, const Q &obj, const std::string &descr="")
Set QObject, owned by the caller, - leave it undeclared if you can't implement it.
virtual QError Open(const std::string &filename, const std::string &opt="")=0
Open file, called by QGlobalWriterDispatcher.
virtual QError Close()=0
Close file, called by QGlobalWriterDispatcher.
virtual QError SetQObject(const std::string &name, const std::string &className, const Diana::QObject *obj, const std::string &descr)=0
base class for anything that has a name
Definition: QNamed.hh:14
base class for objects handled by QEvent and QGlobalDataManager.
Definition: QObject.hh:76
the Diana namespace is needed because sometimes we use Qt libraries, that use same class names of our...