| # Gaudi Framework, version v20r3
Generated: 24 Nov 2008

# HCWNTupleCnv.h

Go to the documentation of this file.

    00001 // $Header: /local/reps/Gaudi/HbookCnv/src/HCWNTupleCnv.h,v 1.3 2006/11/30 14:59:27 mato Exp $
    00002 #ifndef HBOOKCNV_HCWNTUPLECNV_H
    00003 #define HBOOKCNV_HCWNTUPLECNV_H 1
    00004
    00005
    00006 // Include files
    00007 #include "HNTupleCnv.h"
    00008
    00009
    00010 // Forward declarations
    00011 template <class TYPE> class CnvFactory;
    00012
    00013
    00014 //====================================================================
    00015 //  Column wise NTuple converter class definition
    00016 //--------------------------------------------------------------------
    00017 //
    00018 //  Package    : HbookCnv ( The LHCb Offline System)
    00019 //  Author     : M.Frank
    00020 //
    00021 //====================================================================
    00022
    00023
    00024 namespace HbookCnv {
    00025
    00048   class HCWNTupleCnv : public HNTupleCnv   {
    00049
    00051     friend class CnvFactory<HCWNTupleCnv>;
    00052
    00053   public:
    00055     static const CLID& classID()    {
    00056       return CLID_ColumnWiseTuple;
    00057     }
    00059     HCWNTupleCnv( ISvcLocator* svc ) : HNTupleCnv(svc, classID())    {
    00060     }
    00062     virtual ~HCWNTupleCnv()   {
    00063     }
    00064   protected:
    00066     virtual StatusCode load( long id, INTuple*& refpObject );
    00068     virtual StatusCode book(long idh, const std::string& location, INTuple* pObject);
    00070     virtual StatusCode declare(long idh, INTuple* pObject);
    00072     virtual StatusCode writeData(long idh, INTuple* pObject);
    00074     virtual StatusCode readData(long idh, INTuple* pObject, long ievt);
    00075     template <class T>
    00076     size_t saveItem(char* target, const T* src, size_t len)   {
    00077       long* tar = (long*)target;
    00078       for ( size_t i = 0; i < len; i++ )   {
    00079         *(tar++) = long( *(src++));
    00080       }
    00081       return sizeof(long)*len;
    00082     }
    00083     template <class T>
    00084     size_t loadItem(char* src, T* tar, size_t len)   {
    00085       long* s = (long*)src;
    00086       for ( size_t i = 0; i < len; i++ )   {
    00087         *(tar++) = T( *(s++));
    00088       }
    00089       return sizeof(long)*len;
    00090     }
    00091     size_t loadItem(char* src, bool* tar, size_t len)   {
    00092       long* s = (long*)src;
    00093       for ( size_t i = 0; i < len; i++ )   {
    00094         *(tar++) = (*(s++)) ? true : false;
    00095       }
    00096       return sizeof(long)*len;
    00097     }
    00098     size_t loadItem(char* src, float* target, size_t len)   {
    00099       memcpy(target, src, sizeof(float)*len);
    00100       return sizeof(float)*len;
    00101     }
    00102     size_t loadItem(char* src, double* target, size_t len)   {
    00103       memcpy(target, src, sizeof(double)*len);
    00104       return sizeof(double)*len;
    00105     }
    00106     size_t loadItem(char* src, long* target, size_t len)   {
    00107       memcpy(target, src, sizeof(long)*len);
    00108       return sizeof(long)*len;
    00109     }
    00110     size_t loadItem(char* src, unsigned long* target, size_t len)   {
    00111       memcpy(target, src, sizeof(unsigned long)*len);
    00112       return sizeof(unsigned long)*len;
    00113     }
    00114
    00115     size_t saveItem(char* target, float* src, size_t len)   {
    00116       memcpy(target, src, sizeof(float)*len);
    00117       return sizeof(float)*len;
    00118     }
    00119     size_t saveItem(char* target, double* src, size_t len)   {
    00120       memcpy(target, src, sizeof(double)*len);
    00121       return sizeof(double)*len;
    00122     }
    00123     size_t saveItem(char* target, long* src, size_t len)   {
    00124       memcpy(target, src, sizeof(long)*len);
    00125       return sizeof(long)*len;
    00126     }
    00127     size_t saveItem(char* target, unsigned long* src, size_t len)   {
    00128       memcpy(target, src, sizeof(unsigned long)*len);
    00129       return sizeof(unsigned long)*len;
    00130     }
    00131
    00132   };
    00133
    00134 }    // namespace HbookCnv
    00135
    00136
    00137 #endif    // HBOOKCNV_HCWNTUPLECNV_H