class TC_VectorDataBase { public: virtual ~TC_VectorDataBase(); virtual int nSamples() const =0; virtual int nDims() const =0; virtual const RD_Vector& first() =0; virtual const RD_Vector& current() =0; virtual const RD_Vector& next() = 0; ... }; // Example: int n = data->nSamples(); RD_Vector sum = data->first(); for (int i=1;i<n;i++) sum += data->next(); RD_Vector mean = sum/n;
Processing data on the fly:
class TC_NormalisedVectorData : public TC_VectorDataBase { public: TC_NormalisedVectorData(const TC_VectorDataBase& data, const TC_VTransformBase& normaliser); TC_VectorDataBase& data(); TC_VTransformBase& normaliser(); virtual int nSamples() const { return data().nSamples(); } virtual int nDims() const { return data().nDims(); } virtual const RD_Vector& first() { _v = data().first(); normaliser().normalise(_v); return _v; } ... };