12#ifndef SST_CORE_IMPL_TIMEVORTEX_TIMEVORTEXBINNEDMAP_H
13#define SST_CORE_IMPL_TIMEVORTEX_TIMEVORTEXBINNEDMAP_H
15#include "sst/core/threadsafe.h"
19#include <sst/core/timeVortex.h>
38 for (
auto x : pool ) {
46 pool.push_back(
new T());
48 auto ret = pool.back();
53 void insert(T* item) { pool.push_back(item); }
60class TimeVortexBinnedMapBase :
public TimeVortex
69 std::vector<Activity*> activities;
82 for (
auto x : activities ) {
87 inline SimTime_t getSortTime() {
return sort_time; }
88 inline void setSortTime(SimTime_t time) { sort_time = time; }
94 if ( TS ) tu_lock.lock();
95 activities.push_back(act);
97 if ( TS ) tu_lock.unlock();
103 if ( 0 == activities.size() )
return nullptr;
104 if ( !sorted ) sort();
105 auto ret = activities.back();
106 activities.pop_back();
113 if ( 0 == activities.size() )
return nullptr;
114 if ( !sorted ) sort();
115 return activities.back();
120 inline bool operator<(
const TimeUnit& rhs) {
return this->sort_time < rhs.sort_time; }
127 inline bool operator()(
const TimeUnit* lhs,
const TimeUnit* rhs) {
return lhs->sort_time > rhs->sort_time; }
130 inline bool operator()(
const TimeUnit& lhs,
const TimeUnit& rhs) {
return lhs.sort_time > rhs.sort_time; }
139 bool empty()
override;
149 uint64_t getCurrentDepth()
const override {
return current_depth; }
150 uint64_t getMaxDepth()
const override {
return max_depth; }
155 TimeUnit* current_time_unit;
157 using mapType_t = std::map<SimTime_t, TimeUnit*>;
161 std::conditional_t<TS, std::atomic<uint64_t>, uint64_t> insertOrder;
162 std::conditional_t<TS, std::atomic<uint64_t>, uint64_t> current_depth;
Base class for all Activities in the SST Event Queue.
Definition activity.h:46
Definition threadsafe.h:132
Definition timeVortexBinnedMap.h:31
To use with STL priority queues, that order in reverse.
Definition timeVortexBinnedMap.h:124
bool operator()(const TimeUnit *lhs, const TimeUnit *rhs)
Compare pointers.
Definition timeVortexBinnedMap.h:127
bool operator()(const TimeUnit &lhs, const TimeUnit &rhs)
Compare references.
Definition timeVortexBinnedMap.h:130
Primary Event Queue.
Definition timeVortexBinnedMap.h:61
bool empty() override
Returns true if the queue is empty.
Definition timeVortexBinnedMap.cc:63
Activity * pop() override
Remove and return the next activity.
Definition timeVortexBinnedMap.cc:127
int size() override
Returns the number of activities in the queue.
Definition timeVortexBinnedMap.cc:73
Activity * front() override
Returns the next activity.
Definition timeVortexBinnedMap.cc:151
void print(Output &out) const override
Print the state of the TimeVortex.
Definition timeVortexBinnedMap.cc:166
void insert(Activity *activity) override
Insert a new activity into the queue.
Definition timeVortexBinnedMap.cc:80
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition output.h:54
Parameter store.
Definition params.h:58