INET Framework for OMNeT++/OMNEST
inet::ieee80211::RepeatingFs Class Reference

#include <GenericFrameSequences.h>

Inheritance diagram for inet::ieee80211::RepeatingFs:
inet::ieee80211::IFrameSequence

Public Member Functions

virtual ~RepeatingFs ()
 
 RepeatingFs (IFrameSequence *element, std::function< bool(RepeatingFs *, FrameSequenceContext *)> predicate=nullptr)
 
virtual int getCount ()
 
virtual int getStep ()
 
virtual bool isSequenceApply (FrameSequenceContext *context)
 
virtual void startSequence (FrameSequenceContext *context, int firstStep) override
 
virtual void repeatSequence (FrameSequenceContext *context)
 
virtual IFrameSequenceStepprepareStep (FrameSequenceContext *context) override
 
virtual bool completeStep (FrameSequenceContext *context) override
 
virtual std::string getHistory () const override
 
- Public Member Functions inherited from inet::ieee80211::IFrameSequence
virtual ~IFrameSequence ()
 

Protected Attributes

int count = 0
 
int firstStep = -1
 
int step = -1
 
bool apply = false
 
IFrameSequenceelement
 
std::function< bool(RepeatingFs *, FrameSequenceContext *)> predicate
 
std::vector< std::string > histories
 

Constructor & Destructor Documentation

◆ ~RepeatingFs()

virtual inet::ieee80211::RepeatingFs::~RepeatingFs ( )
inlinevirtual
79 { delete element; }

◆ RepeatingFs()

inet::ieee80211::RepeatingFs::RepeatingFs ( IFrameSequence element,
std::function< bool(RepeatingFs *, FrameSequenceContext *)>  predicate = nullptr 
)
103  :
104  element(element),
106 {
107 }

Member Function Documentation

◆ completeStep()

bool inet::ieee80211::RepeatingFs::completeStep ( FrameSequenceContext context)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

147 {
148  ASSERT(apply);
149  step++;
150  bool complete = element->completeStep(context);
151  histories.at(count - 1) = element->getHistory();
152  return complete;
153 }

◆ getCount()

virtual int inet::ieee80211::RepeatingFs::getCount ( )
inlinevirtual
82 { return count; }

Referenced by inet::ieee80211::HcfFs::hasMoreTxOps().

◆ getHistory()

std::string inet::ieee80211::RepeatingFs::getHistory ( ) const
overridevirtual

Implements inet::ieee80211::IFrameSequence.

156 {
157  ASSERT(step != -1);
158  std::string history;
159  for (int i = 0; i < (int)histories.size(); i++) {
160  auto elementHistory = histories.at(i);
161  if (!elementHistory.empty()) {
162  if (!history.empty())
163  history += " ";
164  history += elementHistory;
165  }
166  }
167  return "{" + history + "}";
168 }

◆ getStep()

virtual int inet::ieee80211::RepeatingFs::getStep ( )
inlinevirtual
83 { return firstStep + step; }

◆ isSequenceApply()

virtual bool inet::ieee80211::RepeatingFs::isSequenceApply ( FrameSequenceContext context)
inlinevirtual
84 { return predicate(this, context); }

Referenced by repeatSequence(), and startSequence().

◆ prepareStep()

IFrameSequenceStep * inet::ieee80211::RepeatingFs::prepareStep ( FrameSequenceContext context)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

132 {
133  if (apply) {
134  auto elementStep = element->prepareStep(context);
135  if (elementStep != nullptr)
136  return elementStep;
137  else {
138  repeatSequence(context);
139  return prepareStep(context);
140  }
141  }
142  else
143  return nullptr;
144 }

◆ repeatSequence()

void inet::ieee80211::RepeatingFs::repeatSequence ( FrameSequenceContext context)
virtual
122 {
123  apply = isSequenceApply(context);
124  if (apply) {
125  count++;
126  element->startSequence(context, firstStep + step);
127  histories.push_back(element->getHistory());
128  }
129 }

Referenced by prepareStep().

◆ startSequence()

void inet::ieee80211::RepeatingFs::startSequence ( FrameSequenceContext context,
int  firstStep 
)
overridevirtual

Implements inet::ieee80211::IFrameSequence.

110 {
111  this->firstStep = firstStep;
112  step = 0;
113  apply = isSequenceApply(context);
114  if (apply) {
115  count = 1;
116  element->startSequence(context, firstStep);
117  histories.push_back(element->getHistory());
118  }
119 }

Member Data Documentation

◆ apply

bool inet::ieee80211::RepeatingFs::apply = false
protected

◆ count

int inet::ieee80211::RepeatingFs::count = 0
protected

◆ element

IFrameSequence* inet::ieee80211::RepeatingFs::element
protected

◆ firstStep

int inet::ieee80211::RepeatingFs::firstStep = -1
protected

Referenced by repeatSequence(), and startSequence().

◆ histories

std::vector<std::string> inet::ieee80211::RepeatingFs::histories
protected

◆ predicate

std::function<bool(RepeatingFs *, FrameSequenceContext *)> inet::ieee80211::RepeatingFs::predicate
protected

◆ step

int inet::ieee80211::RepeatingFs::step = -1
protected

The documentation for this class was generated from the following files:
inet::ieee80211::RepeatingFs::isSequenceApply
virtual bool isSequenceApply(FrameSequenceContext *context)
Definition: GenericFrameSequences.h:84
inet::ieee80211::RepeatingFs::prepareStep
virtual IFrameSequenceStep * prepareStep(FrameSequenceContext *context) override
Definition: GenericFrameSequences.cc:131
inet::ieee80211::RepeatingFs::step
int step
Definition: GenericFrameSequences.h:72
inet::ieee80211::IFrameSequence::startSequence
virtual void startSequence(FrameSequenceContext *context, int step)=0
inet::ieee80211::RepeatingFs::histories
std::vector< std::string > histories
Definition: GenericFrameSequences.h:76
inet::ieee80211::RepeatingFs::firstStep
int firstStep
Definition: GenericFrameSequences.h:71
inet::ieee80211::IFrameSequence::completeStep
virtual bool completeStep(FrameSequenceContext *context)=0
inet::ieee80211::RepeatingFs::count
int count
Definition: GenericFrameSequences.h:70
inet::ieee80211::IFrameSequence::prepareStep
virtual IFrameSequenceStep * prepareStep(FrameSequenceContext *context)=0
inet::ieee80211::RepeatingFs::apply
bool apply
Definition: GenericFrameSequences.h:73
inet::ieee80211::RepeatingFs::element
IFrameSequence * element
Definition: GenericFrameSequences.h:74
inet::ieee80211::RepeatingFs::predicate
std::function< bool(RepeatingFs *, FrameSequenceContext *)> predicate
Definition: GenericFrameSequences.h:75
inet::ieee80211::RepeatingFs::repeatSequence
virtual void repeatSequence(FrameSequenceContext *context)
Definition: GenericFrameSequences.cc:121
inet::ieee80211::IFrameSequence::getHistory
virtual std::string getHistory() const =0