00001 #ifndef __SPIKEDELAYLINE_H 00002 #define __SPIKEDELAYLINE_H 00003 00004 #include <queue> 00005 00010 namespace Teem 00011 { 00014 class SpikeDelayLine 00015 { 00016 public: 00018 SpikeDelayLine(double theDelay = 2.0); 00020 virtual ~SpikeDelayLine() {} 00021 00026 unsigned step(double dt, bool pushSpike); 00027 00034 unsigned setDelay(double theDelay, bool dumpSpikes = true); 00036 double getDelay() { return delay; } 00037 00039 bool spikeInLine() const { return spikePresent; } 00041 unsigned spikeCount() const { return (intervals.size() == 0) ? (spikePresent ? 1 : 0) : intervals.size() + 1; } 00042 00043 protected: 00044 00046 double delay; 00048 double totalInterval; 00050 double timeSinceLastSpike; 00052 bool spikePresent; 00054 std::queue<double> intervals; 00055 00058 unsigned dumpOldSpikes(); 00059 }; 00060 } 00061 00062 #endif