23#ifndef SLICE_RING_BUFFER_H
24#define SLICE_RING_BUFFER_H
75 void add_spike(
const long rel_delivery,
const long stamp,
const double ps_offset,
const double weight );
115 bool accumulate_simultaneous,
118 bool& end_of_refract );
136 SpikeInfo(
long stamp,
double ps_offset,
double weight );
150 std::vector< std::vector< SpikeInfo > >
queue_;
162 assert(
static_cast< size_t >( idx ) <
queue_.size() );
163 assert( ps_offset >= 0 );
185 bool accumulate_simultaneous,
188 bool& end_of_refract )
190 end_of_refract =
false;
191 if (
deliver_->empty() or refract_ <= deliver_->back() )
198 end_of_refract =
true;
209 else if (
deliver_->back().stamp_ == req_stamp )
212 ps_offset =
deliver_->back().ps_offset_;
216 if ( accumulate_simultaneous )
232 assert(
deliver_->back().stamp_ > req_stamp );
239 , ps_offset_( ps_offset )
247 return stamp_ == b.stamp_ ? ps_offset_ > b.ps_offset_ : stamp_ < b.stamp_;
253 return not( *
this > b );
259 return stamp_ == b.stamp_ ? ps_offset_ < b.ps_offset_ : stamp_ > b.stamp_;
long get_slice_modulo(long d)
Index to slice-based buffer.
Definition event_delivery_manager.h:537
Queue for all spikes arriving into a neuron.
Definition slice_ring_buffer.h:63
void discard_events()
Discard all events in current slice.
Definition slice_ring_buffer.cpp:81
SliceRingBuffer()
Definition slice_ring_buffer.cpp:32
bool get_next_spike(const long req_stamp, bool accumulate_simultaneous, double &ps_offset, double &weight, bool &end_of_refract)
Return next spike.
Definition slice_ring_buffer.h:184
void prepare_delivery()
Prepare for spike delivery in current slice by sorting.
Definition slice_ring_buffer.cpp:71
std::vector< SpikeInfo > * deliver_
slot to deliver from
Definition slice_ring_buffer.h:153
std::vector< std::vector< SpikeInfo > > queue_
entire queue, one slot per min_delay block within max_delay
Definition slice_ring_buffer.h:150
void clear()
Clear buffer.
Definition slice_ring_buffer.cpp:62
void add_spike(const long rel_delivery, const long stamp, const double ps_offset, const double weight)
Add spike to queue.
Definition slice_ring_buffer.h:159
SpikeInfo refract_
pseudo-event for return from refractoriness
Definition slice_ring_buffer.h:155
void add_refractory(const long stamp, const double ps_offset)
Add refractory event to queue.
Definition slice_ring_buffer.h:169
void resize()
Resize the buffer according to min_delay and max_delay.
Definition slice_ring_buffer.cpp:38
EventDeliveryManager event_delivery_manager
Definition kernel_manager.h:241
Namespace for the NEST simulation kernel.
Definition beta_normalization_factor.h:33
KernelManager & kernel()
Definition kernel_manager.h:311
Information about spike.
Definition slice_ring_buffer.h:135
double ps_offset_
Definition slice_ring_buffer.h:145
bool operator<=(const SpikeInfo &b) const
Definition slice_ring_buffer.h:251
bool operator<(const SpikeInfo &b) const
Definition slice_ring_buffer.h:245
double weight_
Definition slice_ring_buffer.h:146
long stamp_
Definition slice_ring_buffer.h:144
bool operator>(const SpikeInfo &b) const
Definition slice_ring_buffer.h:257
SpikeInfo(long stamp, double ps_offset, double weight)
Definition slice_ring_buffer.h:237