00001
00018 #ifndef ROOTIOCNVSVC_H
00019 #define ROOTIOCNVSVC_H
00020
00021 #include "GaudiKernel/ConversionSvc.h"
00022 #include "GaudiKernel/IPersistencySvc.h"
00023
00024 #include "RootIOSvc/IRootIOSvc.h"
00025 #include "RootIOSvc/RootInputStream.h"
00026 #include "RootIOSvc/RootOutputStream.h"
00027 #include "RootIOSvc/RootIOAddress.h"
00028
00029 #include <string>
00030 #include <map>
00031
00032 class IDataManagerSvc;
00033
00034 class RootIOCnvSvc : public ConversionSvc,
00035 virtual public IRootIOSvc
00036 {
00037 public:
00038 RootIOCnvSvc(const std::string& name, ISvcLocator* svc);
00039 virtual ~RootIOCnvSvc();
00040
00041
00042 virtual StatusCode initialize();
00043 virtual StatusCode reinitialize();
00044 virtual StatusCode finalize();
00045 virtual StatusCode queryInterface(const InterfaceID& riid, void** ppint);
00046
00047
00048
00049 #if 0
00050 virtual StatusCode createObj(IOpaqueAddress* addr, DataObject*& obj);
00051 virtual StatusCode fillObjRefs(IOpaqueAddress* addr, DataObject* obj);
00052 #endif
00053
00056 virtual StatusCode createAddress(long svc_type,
00057 const CLID& clid,
00058 const std::string* par,
00059 const unsigned long* ip,
00060 IOpaqueAddress*& newAddr);
00061
00063 virtual IDataProviderSvc* dataSvc() { return m_dataSvc; }
00064
00066 virtual IDataManagerSvc* dataMgrSvc() { return m_dataMgr; }
00067
00068
00069
00072 virtual StatusCode createAddress(DataObject* obj,
00073 RootOutputAddress*& newAddr);
00074
00078 RootOutputStream* outputStream(const RootOutputAddress& roa);
00079
00081 const std::string& outputFilename(const std::string& tespath);
00082
00084 void associateOutput(const char* filename, const char* streamname);
00085
00086 FileMap fileMap();
00087
00091 RootInputStream* inputStream(const RootInputAddress& ria);
00092
00094 InputStreamMap& inputStreams() { return m_inputStreamMap; }
00095
00099 std::vector<std::string> inputFilenames(const std::string& tespath);
00100
00102 bool isReadoutForced() const;
00103
00104 protected:
00105
00106 StatusCode doInitialize();
00107
00112 std::map<std::string,std::string> m_outputFileMap;
00113 std::map<std::string,RootOutputStream*> m_outputStreamMap;
00114
00117 std::string m_defaultOutputFilename;
00118
00125 std::map<std::string,std::vector<std::string> > m_inputFileMap;
00126 InputStreamMap m_inputStreamMap;
00127 void initializeInputStream(const std::string& path,
00128 const std::string& filename);
00129 void initializeInputStream(const std::string& path,
00130 const std::vector<std::string>& filename_list);
00131
00134 std::vector<std::string> m_defaultInputFilenames;
00135
00137 std::string m_dataSvcName;
00138 IDataProviderSvc* m_dataSvc;
00139 IDataManagerSvc* m_dataMgr;
00140 private:
00141
00145 bool m_forceReadout;
00146 };
00147
00148 #endif // ROOTIOCNVSVC_H