///////////////////////////////////////////////////////////////////////////// // delay.h // // SIMLIB version: 2.18 // Date: 2004-01-25 // // Copyright (c) 1998-2004 Petr Peringer // // This library is licensed under GNU Library GPL. See the file COPYING. // // // This is the interface for delay blocks // // WARNING: needs some testing --- this is the prototype // #ifndef __SIMLIB_H # error "delay.h: 19: you must include simlib.h first" #endif #if __SIMLIB__ < 0x0213 # error "delay.h: 22: requires SIMLIB version 2.13 and higher" #endif //////////////////////////////////////////////////////////////////////////// // class Delay --- continuous signal delay blocks // class Delay : public aContiBlock1 { Delay(const Delay&); // disable copy ctor void operator= (const Delay&); // disable assignment protected: // status public: //## repair #ifdef SIMLIB_public_Delay_Buffer struct Buffer { // INTERFACE: memory for delayed signal virtual void put(double value, double time) = 0; virtual double get(double time) = 0; // with interpolation virtual void clear() = 0; // initialize buffer virtual ~Buffer() {}; }; #else struct Buffer; // memory for delayed signal #endif protected: //## repair double last_time; // last output (for optimization) double last_value; Buffer *buffer; // memory for past values protected: // parameters double dt; // delay time (should be > MaxStep)???### double initval; // initial value public: // interface Delay(Input i, double dt, double initvalue=0); // dt > MaxStep ~Delay(); void Init(); // initialize delay block void Sample(); // sample input (called automatically) virtual double Value(); // output of delay block double Set(double newDT); // change delay time (EXPERIMENTAL) }; // class Delay // end