Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

ConversionSvc.h

Go to the documentation of this file.
00001 // $Header: /nfs/slac/g/glast/ground/cvs/GaudiKernel/GaudiKernel/ConversionSvc.h,v 1.1.1.1 2001/04/18 18:14:18 tlindner Exp $
00002 #ifndef GAUDIKERNEL_CONVERSIONSVC_H
00003 #define GAUDIKERNEL_CONVERSIONSVC_H 1
00004 
00005 // Include files
00006 #include <vector>
00007 #include <algorithm>
00008 #include <functional>
00009 #include "GaudiKernel/Kernel.h"
00010 #include "GaudiKernel/Service.h"
00011 #include "GaudiKernel/IConversionSvc.h"
00012 #include "GaudiKernel/IAddressCreator.h"
00013 
00014 // forward declarations
00015 class ICnvManager;
00016 class IAddrFactory;
00017 template <class TYPE,class ARG> class SvcFactory2;
00018 
00027 class ConversionSvc  : public Service, 
00028                        virtual public IConversionSvc,
00029                        virtual public IAddressCreator
00030 {
00031   friend class SvcFactory2<ConversionSvc,unsigned char>;
00032 protected:
00033   class ContextEntry {
00034     IConverter*     m_converter;
00035     IOpaqueAddress* m_address;
00036     DataObject*     m_object;
00037   public:
00038     ContextEntry(IConverter* cnv, IOpaqueAddress* addr, DataObject* obj)  {
00039       m_converter  = cnv;
00040       m_address    = addr;
00041       m_object     = obj;
00042     }
00043     ContextEntry(const ContextEntry& copy)  {
00044       m_converter  = copy.m_converter;
00045       m_address    = copy.m_address;
00046       m_object     = copy.m_object;
00047     }  
00048     virtual ~ContextEntry()  {
00049     }
00050     IConverter*      converter()  {
00051       return m_converter;
00052     }
00053     IOpaqueAddress*& address()  {
00054       return m_address;
00055     }
00056     DataObject*&     object()   {
00057       return m_object;
00058     }
00059   };
00060   typedef std::vector<ContextEntry> Context;
00061 public:
00062   class WorkerEntry {
00063   private:
00064     CLID        m_class;
00065     IConverter* m_converter;
00066   public:
00067     WorkerEntry(const CLID& cl, IConverter* cnv) 
00068       : m_class(cl), m_converter(cnv)       {
00069     }
00070     WorkerEntry(const WorkerEntry& copy)
00071       : m_class(copy.m_class), m_converter(copy.m_converter)    {
00072     }
00073     WorkerEntry& operator = (const WorkerEntry& copy)   {
00074       m_class     = copy.m_class;
00075       m_converter = copy.m_converter;
00076       return *this;
00077     }
00078     virtual ~WorkerEntry()  {
00079     }
00080     IConverter*     converter()  {
00081       return m_converter;
00082     }
00083     const CLID&     clID()  const {
00084       return m_class;
00085     }
00086   };
00087   typedef std::vector<WorkerEntry> Workers;
00088 
00089   class CnvTest : public std::unary_function<WorkerEntry, bool>   {
00090   protected:
00091     const CLID m_test;
00092   public:
00093     CnvTest(const CLID& test) : m_test(test)    {
00094     }
00095     virtual ~CnvTest()    {
00096     }
00097     bool operator()( const WorkerEntry& testee )  {
00098         return (m_test == testee.clID()) ? true : false;
00099     }
00100   };
00101 
00102 public:
00103 
00105   virtual StatusCode initialize();
00106 
00108   virtual StatusCode finalize();
00109 
00111   virtual unsigned char repSvcType() const;
00112 
00114   virtual StatusCode updateServiceState(IOpaqueAddress* pAddress);
00115 
00117   virtual StatusCode createObj(IOpaqueAddress* pAddress, DataObject*& refpObject);
00118 
00120   virtual StatusCode updateObj(IOpaqueAddress* pAddress, DataObject* pObject);
00121 
00123   virtual StatusCode updateReps(IDataSelector* pSelector);
00124 
00126   virtual StatusCode createReps(IDataSelector* pSelector);
00127 
00129   virtual StatusCode setStore(IDataProviderSvc* pStore);
00130 
00132   virtual StatusCode addConverter(IConverter* pConverter);
00133 
00136   virtual StatusCode addConverter(const ICnvFactory& refFactory);
00137 
00139   virtual StatusCode removeConverter(const CLID& clid);
00140 
00142   virtual StatusCode connectOutput(const std::string& outputFile);
00143 
00145   virtual StatusCode createAddress(const GenericLinkBase & link, 
00146                                    const std::string& dbName, 
00147                                    const std::string& contName, 
00148                                    const std::string& objName, 
00149                                    IOpaqueAddress*& refpAddress);
00151   virtual StatusCode createAddress(unsigned char type, 
00152                                    const CLID& classId,
00153                                    const std::string& dbName, 
00154                                    const std::string& contName, 
00155                                    int seqId,
00156                                    IOpaqueAddress*& refpAddress);
00158   virtual StatusCode setAddressCreator(IAddressCreator* creator);
00159 
00161   ConversionSvc(const std::string& name, ISvcLocator* svc, unsigned char type);
00162 
00164   virtual StatusCode queryInterface(const IID& riid, void** ppvInterface);
00165 
00166 protected:
00168   virtual ~ConversionSvc();
00169 
00171   virtual IConverter* converter(const CLID& wanted_class);
00172 
00174   virtual const ICnvFactory* findCnvFactory(const CLID& wanted);
00175 
00177   virtual StatusCode initializeConverter(IConverter* cnv);
00178 
00180   virtual IConverter* createConverter(const ICnvFactory& fac);
00181 
00183   virtual IAddressCreator* addressCreator()   {
00184     return m_addressCreator;
00185   }
00186 
00188   virtual void setAddressFactory(const IAddrFactory* pAddrFactory)    {
00189     m_addressFactory = pAddrFactory;
00190   }
00192   ICnvManager* cnvManager()    {
00193     return m_cnvManager;
00194   }
00195 
00196 protected:
00198   IDataProviderSvc*   m_dataSvc;
00200   ICnvManager*        m_cnvManager;
00202   IAddressCreator*    m_addressCreator;
00204   unsigned char       m_type;
00206   const IAddrFactory* m_addressFactory;
00208   Workers*            m_workers;
00209 };
00210 #endif // GAUDIKERNEL_CONVERSIONSVC_H

Generated at Wed Nov 21 12:22:03 2001 by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000