SST 12.1.0
Structural Simulation Toolkit
timeVortexPQ.h
1// Copyright 2009-2022 NTESS. Under the terms
2// of Contract DE-NA0003525 with NTESS, the U.S.
3// Government retains certain rights in this software.
4//
5// Copyright (c) 2009-2022, NTESS
6// All rights reserved.
7//
8// This file is part of the SST software package. For license
9// information, see the LICENSE file in the top level directory of the
10// distribution.
11
12#ifndef SST_CORE_IMPL_TIMEVORTEX_TIMEVORTEXPQ_H
13#define SST_CORE_IMPL_TIMEVORTEX_TIMEVORTEXPQ_H
14
15#include "sst/core/eli/elementinfo.h"
16#include "sst/core/timeVortex.h"
17
18#include <functional>
19#include <queue>
20#include <vector>
21
22namespace SST {
23
24class Output;
25
26namespace IMPL {
27
28/**
29 * Primary Event Queue
30 */
31template <bool TS>
33{
34
35public:
36 // TimeVortexPQ();
37 TimeVortexPQBase(Params& params);
39
40 bool empty() override;
41 int size() override;
42 void insert(Activity* activity) override;
43 Activity* pop() override;
44 Activity* front() override;
45
46 /** Print the state of the TimeVortex */
47 void print(Output& out) const override;
48
49 uint64_t getCurrentDepth() const override { return current_depth; }
50 uint64_t getMaxDepth() const override { return max_depth; }
51
52private:
53 typedef std::priority_queue<Activity*, std::vector<Activity*>, Activity::greater<true, true, true>> dataType_t;
54
55 // Data
56 dataType_t data;
57 uint64_t insertOrder;
58
59 // Stats about usage
60 uint64_t max_depth;
61
62 // Need current depth to be atomic if we are thread safe
63 typename std::conditional<TS, std::atomic<uint64_t>, uint64_t>::type current_depth;
64
65 CACHE_ALIGNED(SST::Core::ThreadSafe::Spinlock, slock);
66};
67
68
69} // namespace IMPL
70} // namespace SST
71
72#endif // SST_CORE_IMPL_TIMEVORTEX_TIMEVORTEXPQ_H
Class to use as the greater than operator for STL functions or sorting algorithms (used if you want t...
Definition: activity.h:103
Base class for all Activities in the SST Event Queue.
Definition: activity.h:46
Definition: threadsafe.h:122
Primary Event Queue.
Definition: timeVortexPQ.h:33
void print(Output &out) const override
Print the state of the TimeVortex.
Definition: timeVortexPQ.cc:99
bool empty() override
Returns true if the queue is empty.
Definition: timeVortexPQ.cc:44
int size() override
Returns the number of activities in the queue.
Definition: timeVortexPQ.cc:54
Activity * front() override
Returns the next activity.
Definition: timeVortexPQ.cc:89
Activity * pop() override
Remove and return the next activity.
Definition: timeVortexPQ.cc:76
void insert(Activity *activity) override
Insert a new activity into the queue.
Definition: timeVortexPQ.cc:64
Output object provides consistent method for outputting data to stdout, stderr and/or sst debug file.
Definition: output.h:52
Parameter store.
Definition: params.h:56
Primary Event Queue.
Definition: timeVortex.h:26