ceventheap.h Source File

API: ceventheap.h Source File
API
ceventheap.h
1//==========================================================================
2// CEVENTHEAP.H - part of
3// OMNeT++/OMNEST
4// Discrete System Simulation in C++
5//
6//==========================================================================
7
8/*--------------------------------------------------------------*
9 Copyright (C) 1992-2017 Andras Varga
10 Copyright (C) 2006-2017 OpenSim Ltd.
11
12 This file is distributed WITHOUT ANY WARRANTY. See the file
13 `license' for details on this and other legal matters.
14*--------------------------------------------------------------*/
15
16#ifndef __OMNETPP_CEVENTHEAP_H
17#define __OMNETPP_CEVENTHEAP_H
18
19#include "cfutureeventset.h"
20
21namespace omnetpp {
22
35class SIM_API cEventHeap : public cFutureEventSet
36{
37 private:
38 // heap data structure
39 cEvent **heap = nullptr; // heap array (heap[0] always empty)
40 int heapLength = 0; // number of elements on the heap
41 int heapCapacity = 0; // allocated size of the heap[] array
42 eventnumber_t insertCount = 0; // counts insertions; needed because heap's insert is not stable (does not keep order)
43
44 // circular buffer for events scheduled for the current simtime (quite frequent); acts as FIFO
45 cEvent **cb = nullptr; // size of the circular buffer
46 int cbsize = 4; // always power of 2
47 int cbhead = 0, cbtail = 0; // cbhead is inclusive, cbtail is exclusive
48 bool useCb = true; // for disabling cb
49
50 private:
51 void copy(const cEventHeap& other);
52
53 // internal: restore heap
54 void shiftup(int from=1);
55
56 int cblength() const {return (cbtail-cbhead) & (cbsize-1);}
57 cEvent *cbget(int k) {return cb[(cbhead+k) & (cbsize-1)];}
58 void cbgrow();
59
60 void heapInsert(cEvent *event);
61 void cbInsert(cEvent *event);
62 void flushCb();
63
64 public:
65 // internal:
66 bool getUseCb() const {return useCb;}
67 void setUseCb(bool b) {ASSERT(cbhead==cbtail); useCb = b;}
68
69 // utility function for checking heap sanity
70 virtual void checkHeap();
71
72 public:
75
79 cEventHeap(const cEventHeap& msgq);
80
84 cEventHeap(const char *name=nullptr, int initialCapacity=128);
85
89 virtual ~cEventHeap();
90
97
100
105 virtual cEventHeap *dup() const override {return new cEventHeap(*this);}
106
111 virtual std::string str() const override;
112
117 virtual void forEachChild(cVisitor *v) override;
118
119 // no parsimPack() and parsimUnpack()
121
124
127 virtual void insert(cEvent *event) override;
128
133 virtual cEvent *peekFirst() const override;
134
139 virtual cEvent *removeFirst() override;
140
144 virtual void putBackFirst(cEvent *event) override;
145
150 virtual cEvent *remove(cEvent *event) override;
151
155 virtual bool isEmpty() const override {return cbhead==cbtail && heapLength==0;}
156
160 virtual void clear() override;
162
165
169 virtual int getLength() const override {return cblength() + heapLength;}
170
177 virtual cEvent *get(int k) override;
178
183 virtual void sort() override;
184};
185
186} // namespace omnetpp
187
188
189#endif
190
virtual void insert(cEvent *event) override
virtual bool isEmpty() const override
Definition ceventheap.h:155
cEventHeap(const cEventHeap &msgq)
virtual cEvent * peekFirst() const override
virtual void putBackFirst(cEvent *event) override
virtual cEvent * removeFirst() override
virtual void clear() override
virtual cEventHeap * dup() const override
Definition ceventheap.h:105
virtual cEvent * remove(cEvent *event) override
virtual int getLength() const override
Definition ceventheap.h:169
cEventHeap(const char *name=nullptr, int initialCapacity=128)
virtual void sort() override
virtual void forEachChild(cVisitor *v) override
virtual std::string str() const override
virtual cEvent * get(int k) override
cEventHeap & operator=(const cEventHeap &other)
Represents an event in the discrete event simulator.
Definition cevent.h:47
cFutureEventSet(const char *name=nullptr)
Definition cfutureeventset.h:40
Enables traversing the tree of (cObject-rooted) simulation objects.
Definition cvisitor.h:57
int64_t eventnumber_t
Sequence number of events during the simulation. Events are numbered from one. (Event number zero is ...
Definition simkerneldefs.h:78