INET Framework for OMNeT++/OMNEST
inet::physicallayer::MapCommunicationCache Class Reference

#include <MapCommunicationCache.h>

Inheritance diagram for inet::physicallayer::MapCommunicationCache:
inet::physicallayer::CommunicationCacheBase inet::physicallayer::ICommunicationCache inet::IPrintableObject

Classes

class  MapTransmissionCacheEntry
 

Public Member Functions

Radio cache
virtual void addRadio (const IRadio *radio) override
 
virtual void removeRadio (const IRadio *radio) override
 
virtual const IRadiogetRadio (int id) const override
 
virtual void mapRadios (std::function< void(const IRadio *)> f) const override
 
virtual int getNumRadios () const override
 
Transmission cache
virtual void addTransmission (const ITransmission *transmission) override
 
virtual void removeTransmission (const ITransmission *transmission) override
 
virtual const ITransmissiongetTransmission (int id) const override
 
virtual void mapTransmissions (std::function< void(const ITransmission *)> f) const override
 
virtual int getNumTransmissions () const override
 
Interference cache
virtual void removeNonInterferingTransmissions (std::function< void(const ITransmission *transmission)> f) override
 
- Public Member Functions inherited from inet::physicallayer::CommunicationCacheBase
virtual std::vector< const ITransmission * > * computeInterferingTransmissions (const IRadio *radio, const simtime_t startTime, const simtime_t endTime) override
 
virtual const simtime_t getCachedInterferenceEndTime (const ITransmission *transmission) override
 
virtual void setCachedInterferenceEndTime (const ITransmission *transmission, const simtime_t interferenceEndTime) override
 
virtual void removeCachedInterferenceEndTime (const ITransmission *transmission) override
 
virtual const IWirelessSignalgetCachedSignal (const ITransmission *transmission) override
 
virtual void setCachedSignal (const ITransmission *transmission, const IWirelessSignal *signal) override
 
virtual void removeCachedSignal (const ITransmission *transmission) override
 
virtual const IArrivalgetCachedArrival (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedArrival (const IRadio *receiver, const ITransmission *transmission, const IArrival *arrival) override
 
virtual void removeCachedArrival (const IRadio *receiver, const ITransmission *transmission) override
 
virtual const IntervalTree::IntervalgetCachedInterval (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedInterval (const IRadio *receiver, const ITransmission *transmission, const IntervalTree::Interval *interval) override
 
virtual void removeCachedInterval (const IRadio *receiver, const ITransmission *transmission) override
 
virtual const IListeninggetCachedListening (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedListening (const IRadio *receiver, const ITransmission *transmission, const IListening *listening) override
 
virtual void removeCachedListening (const IRadio *receiver, const ITransmission *transmission) override
 
virtual const IReceptiongetCachedReception (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedReception (const IRadio *receiver, const ITransmission *transmission, const IReception *reception) override
 
virtual void removeCachedReception (const IRadio *receiver, const ITransmission *transmission) override
 
virtual const IInterferencegetCachedInterference (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedInterference (const IRadio *receiver, const ITransmission *transmission, const IInterference *interference) override
 
virtual void removeCachedInterference (const IRadio *receiver, const ITransmission *transmission) override
 
virtual const INoisegetCachedNoise (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedNoise (const IRadio *receiver, const ITransmission *transmission, const INoise *noise) override
 
virtual void removeCachedNoise (const IRadio *receiver, const ITransmission *transmission) override
 
virtual const ISnirgetCachedSNIR (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedSNIR (const IRadio *receiver, const ITransmission *transmission, const ISnir *snir) override
 
virtual void removeCachedSNIR (const IRadio *receiver, const ITransmission *transmission) override
 
virtual const IReceptionDecisiongetCachedReceptionDecision (const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part) override
 
virtual void setCachedReceptionDecision (const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part, const IReceptionDecision *receptionDecision) override
 
virtual void removeCachedReceptionDecision (const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part) override
 
virtual const IReceptionResultgetCachedReceptionResult (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedReceptionResult (const IRadio *receiver, const ITransmission *transmission, const IReceptionResult *receptionResult) override
 
virtual void removeCachedReceptionResult (const IRadio *receiver, const ITransmission *transmission) override
 
virtual const IWirelessSignalgetCachedSignal (const IRadio *receiver, const ITransmission *transmission) override
 
virtual void setCachedSignal (const IRadio *receiver, const ITransmission *transmission, const IWirelessSignal *signal) override
 
virtual void removeCachedSignal (const IRadio *receiver, const ITransmission *transmission) override
 
- Public Member Functions inherited from inet::physicallayer::ICommunicationCache
virtual ~ICommunicationCache ()
 
- Public Member Functions inherited from inet::IPrintableObject
virtual ~IPrintableObject ()
 
virtual std::string printToString () const
 
virtual std::string printToString (int level, int evFlags=0) const
 
virtual std::string getInfoStringRepresentation (int evFlags=0) const
 
virtual std::string getDetailStringRepresentation (int evFlags=0) const
 
virtual std::string getDebugStringRepresentation (int evFlags=0) const
 
virtual std::string getTraceStringRepresentation (int evFlags=0) const
 
virtual std::string getCompleteStringRepresentation (int evFlags=0) const
 

Protected Attributes

Cache
std::map< int, RadioCacheEntryradioCache
 Caches intermediate computation results for radios. More...
 
std::map< int, MapTransmissionCacheEntrytransmissionCache
 Caches intermediate computation results for transmissions. More...
 

Cache data structures

virtual RadioCacheEntrygetRadioCacheEntry (const IRadio *radio) override
 
virtual MapTransmissionCacheEntrygetTransmissionCacheEntry (const ITransmission *transmission) override
 
virtual ReceptionCacheEntrygetReceptionCacheEntry (const IRadio *radio, const ITransmission *transmission) override
 
virtual ~MapCommunicationCache ()
 
virtual std::ostream & printToStream (std::ostream &stream, int level, int evFlags=0) const override
 Prints this object to the provided output stream. More...
 

Additional Inherited Members

- Public Types inherited from inet::IPrintableObject
enum  PrintLevel {
  PRINT_LEVEL_TRACE, PRINT_LEVEL_DEBUG, PRINT_LEVEL_DETAIL, PRINT_LEVEL_INFO,
  PRINT_LEVEL_COMPLETE = INT_MIN
}
 
enum  PrintFlag { PRINT_FLAG_FORMATTED = (1 << 0), PRINT_FLAG_MULTILINE = (1 << 1) }
 
Cache data structures

Constructor & Destructor Documentation

◆ ~MapCommunicationCache()

inet::physicallayer::MapCommunicationCache::~MapCommunicationCache ( )
virtual
18 {
19  for (auto& it : transmissionCache)
20  delete it.second.receptionCacheEntries;
21 }

Member Function Documentation

◆ addRadio()

void inet::physicallayer::MapCommunicationCache::addRadio ( const IRadio radio)
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

41 {
42  auto radioCacheEntry = getRadioCacheEntry(radio);
43  radioCacheEntry->radio = radio;
44 }

◆ addTransmission()

void inet::physicallayer::MapCommunicationCache::addTransmission ( const ITransmission transmission)
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

80 {
81  auto transmissionCacheEntry = getTransmissionCacheEntry(transmission);
82  transmissionCacheEntry->transmission = transmission;
83  transmissionCacheEntry->receptionCacheEntries = new std::map<int, ReceptionCacheEntry>();
84 }

◆ getNumRadios()

int inet::physicallayer::MapCommunicationCache::getNumRadios ( ) const
overridevirtual

Reimplemented from inet::physicallayer::CommunicationCacheBase.

75 {
76  return radioCache.size();
77 }

◆ getNumTransmissions()

int inet::physicallayer::MapCommunicationCache::getNumTransmissions ( ) const
overridevirtual

Reimplemented from inet::physicallayer::CommunicationCacheBase.

122 {
123  return transmissionCache.size();
124 }

◆ getRadio()

const IRadio * inet::physicallayer::MapCommunicationCache::getRadio ( int  id) const
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

63 {
64  auto it = radioCache.find(id);
65  return (it == radioCache.end()) ? nullptr : it->second.radio;
66 }

◆ getRadioCacheEntry()

MapCommunicationCache::RadioCacheEntry * inet::physicallayer::MapCommunicationCache::getRadioCacheEntry ( const IRadio radio)
overrideprotectedvirtual

Implements inet::physicallayer::CommunicationCacheBase.

24 {
25  return &radioCache[radio->getId()];
26 }

Referenced by addRadio().

◆ getReceptionCacheEntry()

MapCommunicationCache::ReceptionCacheEntry * inet::physicallayer::MapCommunicationCache::getReceptionCacheEntry ( const IRadio radio,
const ITransmission transmission 
)
overrideprotectedvirtual

Implements inet::physicallayer::CommunicationCacheBase.

34 {
35  MapTransmissionCacheEntry *transmissionCacheEntry = getTransmissionCacheEntry(transmission);
36  auto receptionCacheEntries = transmissionCacheEntry->receptionCacheEntries;
37  return &(*receptionCacheEntries)[radio->getId()];
38 }

◆ getTransmission()

const ITransmission * inet::physicallayer::MapCommunicationCache::getTransmission ( int  id) const
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

110 {
111  auto it = transmissionCache.find(id);
112  return (it == transmissionCache.end()) ? nullptr : it->second.transmission;
113 }

◆ getTransmissionCacheEntry()

MapCommunicationCache::MapTransmissionCacheEntry * inet::physicallayer::MapCommunicationCache::getTransmissionCacheEntry ( const ITransmission transmission)
overrideprotectedvirtual

Implements inet::physicallayer::CommunicationCacheBase.

29 {
30  return &transmissionCache[transmission->getId()];
31 }

Referenced by addTransmission(), and getReceptionCacheEntry().

◆ mapRadios()

void inet::physicallayer::MapCommunicationCache::mapRadios ( std::function< void(const IRadio *)>  f) const
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

69 {
70  for (auto& it : radioCache)
71  f(it.second.radio);
72 }

◆ mapTransmissions()

void inet::physicallayer::MapCommunicationCache::mapTransmissions ( std::function< void(const ITransmission *)>  f) const
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

116 {
117  for (auto& it : transmissionCache)
118  f(it.second.transmission);
119 }

◆ printToStream()

virtual std::ostream& inet::physicallayer::MapCommunicationCache::printToStream ( std::ostream &  stream,
int  level,
int  evFlags = 0 
) const
inlineoverridevirtual

Prints this object to the provided output stream.

Reimplemented from inet::IPrintableObject.

51 { return stream << "MapCommunicationCache"; }

◆ removeNonInterferingTransmissions()

void inet::physicallayer::MapCommunicationCache::removeNonInterferingTransmissions ( std::function< void(const ITransmission *transmission)>  f)
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

127 {
128  int transmissionCount = 0;
129  const simtime_t now = simTime();
130  for (auto it = transmissionCache.begin(); it != transmissionCache.end();) {
131  MapTransmissionCacheEntry& transmissionCacheEntry = it->second;
132  if (transmissionCacheEntry.interferenceEndTime <= now) {
133  if (transmissionCacheEntry.receptionCacheEntries != nullptr) {
134  std::map<int, ReceptionCacheEntry> *receptionCacheEntries = transmissionCacheEntry.receptionCacheEntries;
135  for (auto radioIt = radioCache.cbegin(); radioIt != radioCache.cend(); radioIt++) {
136  const RadioCacheEntry& radioCacheEntry = radioIt->second;
137  auto receptionIt = receptionCacheEntries->find(radioIt->first);
138  if (receptionIt != receptionCacheEntries->cend()) {
139  const ReceptionCacheEntry& receptionCacheEntry = receptionIt->second;
140  const IntervalTree::Interval *interval = receptionCacheEntry.interval;
141  if (interval != nullptr)
142  radioCacheEntry.receptionIntervals->deleteNode(interval);
143  }
144  }
145  delete receptionCacheEntries;
146  transmissionCacheEntry.receptionCacheEntries = nullptr;
147  }
148  f(transmissionCacheEntry.transmission);
149  transmissionCache.erase(it++);
150  transmissionCount++;
151  }
152  else
153  it++;
154  }
155  EV_DEBUG << "Removed " << transmissionCount << " non interfering transmissions\n";
156 }

◆ removeRadio()

void inet::physicallayer::MapCommunicationCache::removeRadio ( const IRadio radio)
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

47 {
48  auto radioId = radio->getId();
49  auto it = radioCache.find(radioId);
50  if (it != radioCache.end())
51  radioCache.erase(it);
52  for (auto& it : transmissionCache) {
53  std::map<int, ReceptionCacheEntry> *receptionCacheEntries = it.second.receptionCacheEntries;
54  if (receptionCacheEntries != nullptr) {
55  auto jt = receptionCacheEntries->find(radioId);
56  if (jt != receptionCacheEntries->end())
57  receptionCacheEntries->erase(jt);
58  }
59  }
60 }

◆ removeTransmission()

void inet::physicallayer::MapCommunicationCache::removeTransmission ( const ITransmission transmission)
overridevirtual

Implements inet::physicallayer::ICommunicationCache.

87 {
88  auto it = transmissionCache.find(transmission->getId());
89  if (it != transmissionCache.end()) {
90  MapTransmissionCacheEntry& transmissionCacheEntry = it->second;
91  std::map<int, ReceptionCacheEntry> *receptionCacheEntries = transmissionCacheEntry.receptionCacheEntries;
92  if (receptionCacheEntries != nullptr) {
93  for (auto& jt : *receptionCacheEntries) {
94  const RadioCacheEntry& radioCacheEntry = radioCache[jt.first];
95  const ReceptionCacheEntry& receptionCacheEntry = jt.second;
96  const IntervalTree::Interval *interval = receptionCacheEntry.interval;
97  if (interval != nullptr)
98  radioCacheEntry.receptionIntervals->deleteNode(interval);
99  }
100  }
101  delete transmissionCacheEntry.receptionCacheEntries;
102  transmissionCacheEntry.receptionCacheEntries = nullptr;
103  transmissionCache.erase(it);
104  }
105  else
106  throw cRuntimeError("Cannot find transmission");
107 }

Member Data Documentation

◆ radioCache

std::map<int, RadioCacheEntry> inet::physicallayer::MapCommunicationCache::radioCache
protected

Caches intermediate computation results for radios.

Referenced by getNumRadios(), getRadio(), getRadioCacheEntry(), mapRadios(), removeNonInterferingTransmissions(), removeRadio(), and removeTransmission().

◆ transmissionCache

std::map<int, MapTransmissionCacheEntry> inet::physicallayer::MapCommunicationCache::transmissionCache
protected

The documentation for this class was generated from the following files:
inet::physicallayer::MapCommunicationCache::transmissionCache
std::map< int, MapTransmissionCacheEntry > transmissionCache
Caches intermediate computation results for transmissions.
Definition: MapCommunicationCache.h:37
inet::physicallayer::MapCommunicationCache::getRadioCacheEntry
virtual RadioCacheEntry * getRadioCacheEntry(const IRadio *radio) override
Definition: MapCommunicationCache.cc:23
inet::physicallayer::MapCommunicationCache::radioCache
std::map< int, RadioCacheEntry > radioCache
Caches intermediate computation results for radios.
Definition: MapCommunicationCache.h:33
inet::physicallayer::MapCommunicationCache::getTransmissionCacheEntry
virtual MapTransmissionCacheEntry * getTransmissionCacheEntry(const ITransmission *transmission) override
Definition: MapCommunicationCache.cc:28