49 listptr->push_back(p);
53 if( listptr->empty() )
Destroy();
57 listptr =
new std::list<Delay*>();
71 if( listptr == 0 )
return;
72 std::list<Delay *>::iterator i;
73 for( i=listptr->begin(); i!=listptr->end(); ++i)
78 if( listptr == 0 )
return;
79 std::list<Delay *>::iterator i;
80 for( i=listptr->begin(); i!=listptr->end(); ++i)
89 #ifndef SIMLIB_public_Delay_Buffer 92 virtual void put(
double value,
double time) = 0;
93 virtual double get(
double time) = 0;
94 virtual void clear() = 0;
111 Pair(
double t,
double v) : time(t), value(v) {}
122 last_insert =
Pair(-2,0);
126 virtual void put(
double value,
double time)
override {
128 #ifndef NO_DELAY_OPTIMIZATION 130 if( last_insert == p )
137 virtual double get(
double time)
override 142 std::deque<Pair>::iterator i;
145 for( n=0, i=buf.begin(); i!=buf.end(); ++i ) {
149 if( p.
time > time )
break;
155 if( p.
time < time ) {
186 Dprintf((
"Delay::Delay(in=%p, dt=%g, ival=%g)", &i, _dt, ival));
226 double oldtime =
Time -
dt;
242 if( newdelay>=0.0 && newdelay<=
Time )
abstract base class for delayed signal samples storage
static void UnRegister(Delay *p)
static void InitAll()
function to initialize all delay objects
void Sample()
sample input (called automatically)
void SIMLIB_error(const enum _ErrEnum N)
print error message and abort program
double Value() override
output of continuous delay block
virtual void put(double value, double time)=0
store value
memory for delayed pairs (Time,value)
void Init()
initialize delay block
Implementation of class CalendarList interface is static - using global functions in SQS namespace...
~Delay()
remove buffer and delay block from list
virtual double get(double time)=0
read interpolated value
virtual void clear() override
initialize buffer
const double & Time
model time (is NOT the block)
static std::list< Delay * > * listptr
list of delay objects – singleton
double dt
Parameter: delay time (should be > MaxStep)
double initval
initial value (used at start)
bool operator==(const ParameterVector &p1, const ParameterVector &p2)
double Set(double newDT)
change delay time (EXPERIMENTAL)
Internal header file for SIMLIB/C++.
static void SampleAll()
function to scan inputs of all delay objects
Simple delay block interface.
Main SIMLIB/C++ interface.
#define INSTALL_HOOK(name, function)
Buffer * buffer
memory for past values
std::deque< Pair > buf
storage for samples
double last_time
memory for delayed signal samples
static void Register(Delay *p)
base for continuous blocks with single input and algebraic loop check
continuous signal delay block
Pair last_insert
last inserted value (for optimization)
virtual void put(double value, double time) override
store value
pair (t,val) for storing in buffer TODO: use std::tuple
virtual void clear()=0
initialize buffer
double last_value
last output value