#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