OMNeT++ Simulation Library  5.4.1
cpacketqueue.h
1 //==========================================================================
2 // CPACKETQUEUE.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_CPACKETQUEUE_H
17 #define __OMNETPP_CPACKETQUEUE_H
18 
19 #include "cqueue.h"
20 #include "cpacket.h"
21 
22 namespace omnetpp {
23 
24 
33 class SIM_API cPacketQueue : public cQueue
34 {
35  private:
36  int64_t bitLength;
37 
38  private:
39  void copy(const cPacketQueue& other);
40  virtual void insert(cObject *obj) override;
41  virtual void insertBefore(cObject *where, cObject *obj) override;
42  virtual void insertAfter(cObject *where, cObject *obj) override;
43  virtual cObject *remove(cObject *obj) override;
44 
45  protected:
46  // internal
47  void addLength(cPacket *pkt);
48  cPacket *checkPacket(cObject *obj);
49 
50  public:
56  cPacketQueue(const char *name=nullptr, CompareFunc cmp=nullptr);
57 
63  cPacketQueue(const cPacketQueue& queue);
64 
72  cPacketQueue& operator=(const cPacketQueue& queue);
74 
77 
83  virtual cPacketQueue *dup() const override {return new cPacketQueue(*this);}
84 
89  virtual std::string str() const override;
90 
96  virtual void parsimPack(cCommBuffer *buffer) const override;
97 
103  virtual void parsimUnpack(cCommBuffer *buffer) override;
105 
113  virtual void insert(cPacket *pkt);
114 
120  virtual void insertBefore(cPacket *where, cPacket *pkt);
121 
128  virtual void insertAfter(cPacket *where, cPacket *pkt);
129 
135  virtual cPacket *remove(cPacket *pkt);
136 
141  virtual cPacket *pop() override;
142 
147  virtual void clear() override;
149 
156  int64_t getBitLength() const {return bitLength;}
157 
162  int64_t getByteLength() const {return (bitLength+7)>>3;}
163 
169  virtual cPacket *front() const override {return (cPacket *)cQueue::front();}
170 
176  virtual cPacket *back() const override {return (cPacket *)cQueue::back();}
177 
183  virtual cPacket *get(int i) const override {return (cPacket *)cQueue::get(i);}
185 };
186 
187 } // namespace omnetpp
188 
189 
190 #endif
191 
Root of the OMNeT++ class hierarchy. cObject is a lightweight class without any data members...
Definition: cobject.h:58
virtual cPacketQueue * dup() const override
Definition: cpacketqueue.h:83
int64_t getBitLength() const
Definition: cpacketqueue.h:156
virtual cPacket * back() const override
Definition: cpacketqueue.h:176
virtual cObject * front() const
A subclass of cMessage to represent packets, frames, datagrams, application messages, and similar data.
Definition: cpacket.h:52
Buffer for the communications layer of parallel simulation.
Definition: ccommbuffer.h:41
virtual cObject * back() const
int(* CompareFunc)(cObject *a, cObject *b)
Function for comparing two cObjects, used for example by cQueue.
Definition: cqueue.h:34
Queue class for objects derived from cObject.
Definition: cqueue.h:55
Definition: cabstracthistogram.h:21
virtual cPacket * front() const override
Definition: cpacketqueue.h:169
int64_t getByteLength() const
Definition: cpacketqueue.h:162
virtual cObject * get(int i) const
A queue class specialized for cPacket objects.
Definition: cpacketqueue.h:33