00001 // $Header: /local/reps/Gaudi/GaudiKernel/GaudiKernel/NTupleImplementation.h,v 1.7 2006/12/10 20:29:17 leggett Exp $ 00002 #ifndef GAUDIKERNEL_NTUPLEIMP_H 00003 #define GAUDIKERNEL_NTUPLEIMP_H 00004 00005 // Framework include files 00006 #include "NTuple.h" 00007 00008 // Forward declarations 00009 class INTupleSvc; 00010 class IConversionSvc; 00011 00012 namespace NTuple { 00013 // Concrete N tuple class definition 00014 class TupleImp : public Tuple { 00015 protected: 00017 ItemContainer m_items; 00019 bool m_isBooked; 00021 std::string m_title; 00023 ISelectStatement* m_pSelector; 00025 char* m_buffer; 00027 INTupleSvc* m_ntupleSvc; 00029 IConversionSvc* m_cnvSvc; 00030 private: 00032 TupleImp(const TupleImp&) ; 00033 00034 public: 00036 virtual INTupleItem* i_find(const std::string& name) const; 00037 public: 00039 TupleImp( const std::string& title); 00041 virtual ~TupleImp(); 00043 ItemContainer& items() { 00044 return m_items; 00045 } 00047 const ItemContainer& items() const { 00048 return m_items; 00049 } 00051 virtual const std::string& title() const { 00052 return m_title; 00053 } 00055 virtual const INTupleItem* find(const std::string& name) const { 00056 return i_find(name); 00057 } 00059 virtual INTupleItem* find(const std::string& name) { 00060 return i_find(name); 00061 } 00063 char* buffer() { 00064 return m_buffer; 00065 } 00067 const char* buffer() const { 00068 return m_buffer; 00069 } 00071 IConversionSvc* conversionService() const { 00072 return m_cnvSvc; 00073 } 00075 void setConversionService( IConversionSvc* svc ) { 00076 m_cnvSvc = svc; 00077 } 00079 INTupleSvc* tupleService() const { 00080 return m_ntupleSvc; 00081 } 00083 void setTupleService( INTupleSvc* svc ) { 00084 m_ntupleSvc = svc; 00085 } 00087 virtual StatusCode attachSelector(ISelectStatement* sel); 00089 virtual ISelectStatement* selector(); 00091 virtual void setBuffer(char* buff); 00093 virtual void reset(); 00095 virtual StatusCode add(INTupleItem* item); 00097 virtual StatusCode remove(INTupleItem* item); 00099 virtual StatusCode remove(const std::string& name); 00101 virtual StatusCode write(); 00103 virtual StatusCode writeRecord(); 00105 virtual StatusCode read(); 00107 virtual StatusCode readRecord(); 00109 virtual StatusCode save(); 00110 00111 }; // end class definition: Tuple 00112 00113 00114 // Concrete column wise N tuple class definition 00115 class ColumnWiseTuple : public TupleImp { 00116 public: 00118 ColumnWiseTuple(const std::string& title ) : TupleImp(title) { 00119 } 00121 virtual ~ColumnWiseTuple() { 00122 } 00124 virtual const CLID& clID() const { 00125 return ColumnWiseTuple::classID(); 00126 } 00128 static const CLID& classID() { 00129 return CLID_ColumnWiseTuple; 00130 } 00131 }; // end class definition: ColumnWiseTuple 00132 00133 // Concrete column wise N tuple class definition 00134 class RowWiseTuple : public TupleImp { 00135 public: 00137 RowWiseTuple( const std::string& title ) : TupleImp(title) { 00138 } 00140 virtual ~RowWiseTuple() { 00141 } 00143 virtual const CLID& clID() const { 00144 return RowWiseTuple::classID(); 00145 } 00147 static const CLID& classID() { 00148 return CLID_RowWiseTuple; 00149 } 00150 }; // end class definition: RowWiseTuple 00151 } // end name space NTuple 00152 00153 #endif // GAUDIKERNEL_NTUPLEIMP_H