#ifndef TDBIVALIDITYREC_H
#define TDBIVALIDITYREC_H
/**
*
* $Id: IDbiValidityRec.hxx,v 1.1 2011/01/18 05:49:20 finch Exp $
*
* \class COMET::IDbiValidityRec
*
*
* \brief
* Concept A concrete data type corresponding to a single row in
* an auxillary validity range database table.
*
* \brief
* Purpose To resolve ambiguities in the case of multiple matches
* to a query and to record results of validity range trimming due to
* neighbouring database entries.
*
* Contact: A.Finch@lancaster.ac.uk
*
*
*/
#include "IDbi.hxx"
#include "IDbiTableRow.hxx"
#include "IVldRange.hxx"
#include "IVldTimeStamp.hxx"
#include
#include
namespace COMET {
class IDbiBinaryFile;
class IDbiTableProxy;
class IDbiValidityRec;
}
ostream& operator<<(ostream& s, const COMET::IDbiValidityRec& vRec);
namespace COMET {
class IDbiValidityRec : public IDbiTableRow
{
public:
// Constructors and destructors.
IDbiValidityRec(Int_t dbNo = -1, Bool_t isGap = kTRUE);
IDbiValidityRec(const IDbiValidityRec& from);
IDbiValidityRec(const COMET::IVldRange& range,
IDbi::Task task,
Int_t aggNo,
UInt_t seqNo,
Int_t dbNo = -1,
Bool_t isGap = kFALSE,
COMET::IVldTimeStamp time = COMET::IVldTimeStamp(),
UInt_t epoch = 0);
virtual ~IDbiValidityRec();
// State testing member functions
virtual IDbiTableRow* CreateTableRow() const {
return new IDbiValidityRec; }
Int_t GetAggregateNo() const { return fAggregateNo; }
COMET::IVldTimeStamp GetCreationDate() const { return fCreationDate; }
UInt_t GetDbNo() const { return fDbNo; }
UInt_t GetEpoch() const { return fEpoch; }
COMET::IVldTimeStamp GetInsertDate() const { return fInsertDate; }
IDbi::Task GetTask() const { return fTask; }
std::string GetL2CacheName() const;
UInt_t GetSeqNo() const { return fSeqNo; }
const IDbiTableProxy* GetTableProxy() const { return fTableProxy; }
const COMET::IVldRange& GetVldRange() const { return fVldRange;}
Bool_t HasExpired(const IDbiValidityRec& other) const;
Bool_t HasExpired(const COMET::IVldContext& vc,
const IDbi::Task& task) const;
Bool_t IsCompatible(const COMET::IVldContext& vc,
const IDbi::Task& task) const;
Bool_t IsGap() const { return fIsGap; }
Bool_t IsHigherPriority(const IDbiValidityRec& that,
Bool_t useCreationDate = false) const;
static std::string GetL2CacheName(UInt_t seqLo, UInt_t seqHi, COMET::IVldTimeStamp ts);
// State changing member functions
void AndTimeWindow(const COMET::IVldTimeStamp& start,
const COMET::IVldTimeStamp& end);
void SetAggregateNo(Int_t aggNo) { fAggregateNo = aggNo; }
void SetDbNo(Int_t dbNo) { fDbNo = dbNo; }
void SetEpoch(UInt_t epoch) { fEpoch = epoch; }
void SetTableProxy(const IDbiTableProxy* tp) { fTableProxy = tp; }
void SetTimeWindow(const COMET::IVldTimeStamp& start,
const COMET::IVldTimeStamp& end);
void SetVldRange(const COMET::IVldRange& range) { fVldRange=range;}
void Trim(const COMET::IVldTimeStamp& queryTime,
const IDbiValidityRec& other);
// I/O member functions
virtual void Fill(IDbiInRowStream& rs,
const IDbiValidityRec* vrec);
virtual void Store(IDbiOutRowStream& ors,
const IDbiValidityRec* vrec) const;
void Streamer(IDbiBinaryFile& file);
private:
// Data members
/// Aggregate number or:-
/// -1 Non-aggregated data or multiple aggregates
/// -2 undefined aggregates
Int_t fAggregateNo;
/// Creation date
COMET::IVldTimeStamp fCreationDate;
/// Cascade no. of source db =-1 unknown
Int_t fDbNo;
/// Insertion date
COMET::IVldTimeStamp fInsertDate;
/// kTRUE if corresponds to a gap.
Bool_t fIsGap;
/// Task number
IDbi::Task fTask;
/// Sequence number or 0 if compound.
Int_t fSeqNo;
/// IDbiTableProxy that filled this (if any).
const IDbiTableProxy* fTableProxy;
/// Validity range of record.
COMET::IVldRange fVldRange;
/// Calibration Epoch
UInt_t fEpoch;
/// Reality (for possible, but improbable future use)
UInt_t fReality;
ClassDef(IDbiValidityRec,0) // Validity range table row.
};
};
#endif // TDBIVALIDITYREC_H