| # Gaudi Framework, version v21r10p1 |

Home |  | Generated: 29 Jul 2010

# ConversionSvc.h

Go to the documentation of this file.

    00001 // $Header: /tmp/svngaudi/tmp.jEpFh25751/Gaudi/GaudiKernel/GaudiKernel/ConversionSvc.h,v 1.15 2007/06/01 17:24:21 marcocle 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 #include "GaudiKernel/IDataProviderSvc.h"
    00014
    00015
    00047 class GAUDI_API ConversionSvc: public extends2<Service, IConversionSvc, IAddressCreator>
    00048 {
    00049 public:
    00050   class WorkerEntry {
    00051   private:
    00052     CLID        m_class;
    00053     IConverter* m_converter;
    00054   public:
    00055     WorkerEntry(const CLID& cl, IConverter* cnv)
    00056       : m_class(cl), m_converter(cnv)       {
    00057     }
    00058     WorkerEntry(const WorkerEntry& copy)
    00059       : m_class(copy.m_class), m_converter(copy.m_converter)    {
    00060     }
    00061     WorkerEntry& operator = (const WorkerEntry& copy)   {
    00062       m_class     = copy.m_class;
    00063       m_converter = copy.m_converter;
    00064       return *this;
    00065     }
    00066     virtual ~WorkerEntry()  {
    00067     }
    00068     IConverter*     converter()  {
    00069       return m_converter;
    00070     }
    00071     const CLID&     clID()  const {
    00072       return m_class;
    00073     }
    00074   };
    00075   typedef std::vector<WorkerEntry> Workers;
    00076
    00077   class CnvTest : public std::unary_function<WorkerEntry, bool>   {
    00078   protected:
    00079     const CLID m_test;
    00080   public:
    00081     CnvTest(const CLID& test) : m_test(test)    {
    00082     }
    00083     virtual ~CnvTest()    {
    00084     }
    00085     bool operator()( const WorkerEntry& testee )  {
    00086         return (m_test == testee.clID()) ? true : false;
    00087     }
    00088   };
    00089
    00090 public:
    00091
    00093   virtual StatusCode initialize();
    00094
    00096   virtual StatusCode finalize();
    00097
    00099   virtual long repSvcType() const;
    00100
    00102   const CLID& objType() const;
    00103
    00108   virtual StatusCode setDataProvider(IDataProviderSvc* pService);
    00109
    00113   virtual SmartIF<IDataProviderSvc>& dataProvider()  const;
    00114
    00116   virtual StatusCode setConversionSvc(IConversionSvc* svc);
    00117
    00119   virtual SmartIF<IConversionSvc>& conversionSvc()    const;
    00120
    00122   virtual StatusCode setAddressCreator(IAddressCreator* creator);
    00123
    00125   virtual SmartIF<IAddressCreator>& addressCreator()   const;
    00126
    00128   virtual StatusCode createObj(IOpaqueAddress* pAddress,DataObject*& refpObject);
    00129
    00131   virtual StatusCode fillObjRefs(IOpaqueAddress* pAddress, DataObject* pObject);
    00132
    00134   virtual StatusCode updateObj(IOpaqueAddress* pAddress, DataObject* refpObject);
    00135
    00137   virtual StatusCode updateObjRefs(IOpaqueAddress* pAddress, DataObject* pObject);
    00138
    00140   virtual StatusCode createRep(DataObject* pObject, IOpaqueAddress*& refpAddress);
    00141
    00143   virtual StatusCode fillRepRefs(IOpaqueAddress* pAddress,DataObject* pObject);
    00144
    00146   virtual StatusCode updateRep(IOpaqueAddress* pAddress, DataObject* pObject);
    00147
    00149   virtual StatusCode updateRepRefs(IOpaqueAddress* pAddress, DataObject* pObject);
    00150
    00152   virtual StatusCode addConverter(const CLID& clid);
    00153
    00155   virtual StatusCode addConverter(IConverter* pConverter);
    00156
    00158   virtual StatusCode removeConverter(const CLID& clid);
    00159
    00161   virtual IConverter* converter(const CLID& wanted);
    00162
    00164   virtual StatusCode connectOutput(const std::string& outputFile,
    00165                                    const std::string& openMode);
    00166
    00168   virtual StatusCode connectOutput(const std::string& output);
    00169
    00171   virtual StatusCode commitOutput(const std::string& output, bool do_commit);
    00172
    00174   virtual StatusCode createAddress( long svc_type,
    00175                                     const CLID& clid,
    00176                                     const std::string* par,
    00177                                     const unsigned long* ip,
    00178                                     IOpaqueAddress*& refpAddress);
    00179
    00181   virtual StatusCode convertAddress( const IOpaqueAddress* pAddress,
    00182                                      std::string& refAddress);
    00183
    00185   virtual StatusCode createAddress( long svc_type,
    00186                                     const CLID& clid,
    00187                                     const std::string& refAddress,
    00188                                     IOpaqueAddress*& refpAddress);
    00189
    00191   virtual StatusCode updateServiceState(IOpaqueAddress* pAddress);
    00192
    00194   ConversionSvc(const std::string& name, ISvcLocator* svc, long type);
    00195
    00196 protected:
    00198   virtual ~ConversionSvc();
    00199
    00201   virtual IConverter* createConverter(long typ, const CLID& clid, const ICnvFactory* fac);
    00202
    00204   virtual StatusCode configureConverter(long typ, const CLID& clid, IConverter* cnv);
    00205
    00207   virtual StatusCode initializeConverter(long typ, const CLID& clid, IConverter* cnv);
    00208
    00210   virtual StatusCode activateConverter(long typ, const CLID& clid, IConverter* cnv);
    00211
    00213   virtual void loadConverter(DataObject* pObject);
    00214
    00216   virtual SmartIF<IAddressCreator>& addressCreator()   {
    00217     return m_addressCreator;
    00218   }
    00219
    00220 protected:
    00221   StatusCode makeCall( int typ,
    00222                        bool ignore_add,
    00223                        bool ignore_obj,
    00224                        bool update,
    00225                        IOpaqueAddress*& pAddress,
    00226                        DataObject*& pObject);
    00227
    00229   mutable SmartIF<IDataProviderSvc>   m_dataSvc;
    00231   mutable SmartIF<IAddressCreator>    m_addressCreator;
    00233   mutable SmartIF<IConversionSvc>     m_cnvSvc;
    00235   long                m_type;
    00237   Workers*            m_workers;
    00238
    00239 private:
    00241   ConversionSvc(const ConversionSvc&);
    00243   ConversionSvc& operator= (const ConversionSvc&);
    00244 };
    00245 #endif // GAUDIKERNEL_CONVERSIONSVC_H