#ifndef DBIROWSTREAM_H #define DBIROWSTREAM_H /** * * $Id: IDbiRowStream.hxx,v 1.1 2011/01/18 05:49:20 finch Exp $ * * \class COMET::IDbiRowStream * * * \brief * Concept I/O buffer for a row of a table. * * \brief * Purpose This forms the base class COMET::for IDbiInRowStream (input) * and IDbiWriter (input) * * Contact: A.Finch@lancaster.ac.uk * * */ #include #include "IDbiFieldType.hxx" namespace COMET { class IDbiTableMetaData; } namespace COMET { class IDbiRowStream { public: // Constructors and destructors. IDbiRowStream(const IDbiTableMetaData* metaData); virtual ~IDbiRowStream(); // State testing member functions virtual const IDbiFieldType& ColFieldType(UInt_t col) const; virtual string ColName(UInt_t col) const; virtual const IDbiFieldType& CurColFieldType() const; virtual string CurColName() const; virtual UInt_t CurColNum() const { return fCurCol;} Bool_t HasEpoch() const; Bool_t HasRowCounter() const { return fHasRowCounter; } Bool_t IsVLDTable() const { return fIsVLDTable; } virtual UInt_t NumCols() const; virtual string TableName() const; virtual string TableNameTc() const; virtual const IDbiTableMetaData* MetaData() const { return fMetaData; } // State changing member functions virtual void DecrementCurCol() { fCurCol = (fCurCol <= 1) ? 1 : fCurCol -1; } // Allow IncrementCurCol to step off end (to catch attempt to read // too much data) virtual void IncrementCurCol() { ++fCurCol; } protected: virtual void ClearCurCol() { fCurCol = 1; } private: // Data members /// Current column in query (1..fNumCols) UShort_t fCurCol; /// True if main table has ROW_COUNTER as second column Bool_t fHasRowCounter; /// Owned by IDbiTableProxy const IDbiTableMetaData* fMetaData; /// True if reading data for a *VLD table. Bool_t fIsVLDTable; ClassDef(IDbiRowStream,0) // I/O of a table row. }; }; #endif // DBIROWSTREAM_H