20 #include "wifi-mode.h"
21 #include "ns3/simulator.h"
22 #include "ns3/assert.h"
27 bool operator == (
const WifiMode &a,
const WifiMode &b)
29 return a.GetUid () == b.GetUid ();
31 std::ostream &
operator << (std::ostream & os,
const WifiMode &mode)
33 os << mode.GetUniqueName ();
36 std::istream &
operator >> (std::istream &is, WifiMode &mode)
40 mode = WifiModeFactory::GetFactory ()->Search (str);
48 return item->bandwidth;
60 return item->dataRate;
66 return item->codingRate;
72 return item->constellationSize;
79 return item->uniqueUid;
85 return item->isMandatory;
96 return item->modClass;
108 *
this = WifiModeFactory::GetFactory ()->Search (name);
113 WifiModeFactory::WifiModeFactory ()
125 uint8_t constellationSize)
128 uint32_t uid = factory->AllocateUid (uniqueName);
130 item->uniqueUid = uniqueName;
131 item->modClass = modClass;
135 item->bandwidth = bandwidth;
136 item->dataRate = dataRate;
138 item->codingRate = codingRate;
143 item->phyRate = dataRate * 4 / 3;
146 item->phyRate = dataRate * 3 / 2;
149 item->phyRate = dataRate * 2 / 1;
153 item->phyRate = dataRate;
165 NS_FATAL_ERROR (
"Error in creation of WifiMode named " << uniqueName << std::endl
166 <<
"Code rate must be WIFI_CODE_RATE_UNDEFINED iff Modulation Class is WIFI_MOD_CLASS_DSSS");
169 item->constellationSize = constellationSize;
170 item->isMandatory = isMandatory;
176 WifiModeFactory::Search (std::string name)
178 WifiModeItemList::const_iterator i;
180 for (i = m_itemList.begin (); i != m_itemList.end (); i++)
182 if (i->uniqueUid == name)
193 << name <<
"\". Valid options are:");
194 for (i = m_itemList.begin (); i != m_itemList.end (); i++)
211 WifiModeFactory::AllocateUid (std::string uniqueUid)
214 for (WifiModeItemList::const_iterator i = m_itemList.begin ();
215 i != m_itemList.end (); i++)
217 if (i->uniqueUid == uniqueUid)
223 uint32_t uid = m_itemList.size ();
224 m_itemList.push_back (WifiModeItem ());
228 struct WifiModeFactory::WifiModeItem *
229 WifiModeFactory::Get (uint32_t uid)
232 return &m_itemList[uid];
236 WifiModeFactory::GetFactory (
void)
238 static bool isFirstTime =
true;
239 static WifiModeFactory factory;
242 uint32_t uid = factory.AllocateUid (
"Invalid-WifiMode");
243 WifiModeItem *item = factory.Get (uid);
244 item->uniqueUid =
"Invalid-WifiMode";
249 item->constellationSize = 0;
251 item->isMandatory =
false;
std::istream & operator>>(std::istream &is, Angles &a)
enum WifiModulationClass GetModulationClass() const
#define NS_ASSERT(condition)
represent a single transmission modeA WifiMode is implemented by a single integer which is used to lo...
bool IsMandatory(void) const
#define NS_FATAL_ERROR(msg)
fatal error handling
enum WifiCodeRate GetCodeRate(void) const
std::string GetUniqueName(void) const
static WifiMode CreateWifiMode(std::string uniqueName, enum WifiModulationClass modClass, bool isMandatory, uint32_t bandwidth, uint32_t dataRate, enum WifiCodeRate codingRate, uint8_t constellationSize)
uint32_t GetBandwidth(void) const
std::ostream & operator<<(std::ostream &os, const Angles &a)
uint8_t GetConstellationSize(void) const
uint64_t GetPhyRate(void) const
#define ATTRIBUTE_HELPER_CPP(type)
#define NS_LOG_UNCOND(msg)
create WifiMode class instances and keep track of them.
uint32_t GetUid(void) const
uint64_t GetDataRate(void) const