22 #include "ns3/fatal-error.h"
35 m_currentVectorBitSize (0),
49 : m_nixVector (o.m_nixVector),
51 m_currentVectorBitSize (o.m_currentVectorBitSize),
52 m_totalBitSize (o.m_totalBitSize)
91 if (numberOfBits > 32)
93 NS_FATAL_ERROR (
"Can't add more than 32 bits to a nix-vector at one time");
119 uint32_t tempBits = newBits;
153 m_currentVectorBitSize += numberOfBits;
163 if (numberOfBits > 32)
165 NS_FATAL_ERROR (
"Can't extract more than 32 bits to a nix-vector at one time");
168 uint32_t vectorIndex = 0;
169 uint32_t extractedBits = 0;
172 if (numberOfBits > totalRemainingBits)
174 NS_FATAL_ERROR (
"You've tried to extract too many bits of the Nix-vector, " <<
this <<
". NumberBits: "
175 << numberOfBits <<
" Remaining: " << totalRemainingBits);
178 if (numberOfBits <= 0)
180 NS_FATAL_ERROR (
"You've specified a number of bits for Nix-vector <= 0!");
187 vectorIndex = ((totalRemainingBits-1) / 32);
193 if ((numberOfBits-1) > ((totalRemainingBits-1) % 32))
195 extractedBits =
m_nixVector.at (vectorIndex) << (32 - (totalRemainingBits % 32));
196 extractedBits = extractedBits >> ((32 - (totalRemainingBits % 32))
197 - (numberOfBits - (totalRemainingBits % 32)));
199 >> (32 - (numberOfBits - (totalRemainingBits % 32))));
201 return extractedBits;
206 extractedBits =
m_nixVector.at (vectorIndex) << (32 - (totalRemainingBits % 32));
207 extractedBits = extractedBits >> (32 - (numberOfBits));
209 return extractedBits;
216 uint32_t totalSizeInBytes = 0;
220 return totalSizeInBytes;
227 uint32_t* p = buffer;
230 if (size + 4 <= maxSize)
241 if (size + 4 <= maxSize)
253 if (size + 4 <= maxSize)
265 if (size + 4 <= maxSize)
284 const uint32_t* p = buffer;
285 uint32_t sizeCheck = size - 4;
302 while (sizeCheck > 0)
314 return (sizeCheck != 0) ? 0 : 1;
322 std::vector<uint32_t>::const_reverse_iterator rIter;
325 uint32_t numBits =
BitCount (*rIter);
370 uint32_t bitCount = 0;
372 if (numberOfNeighbors < 2)
378 for (numberOfNeighbors -= 1; numberOfNeighbors != 0; numberOfNeighbors >>= 1)
392 for (; bitCount > 0; bitCount--)
400 for (; bitCount > 1; bitCount--)
409 os << decimalNum % 2;
427 if ((uint32_t)(
sizeof (uint32_t)*8) > bitCount)
429 for (uint32_t i = ((
sizeof (uint32_t)*8)-bitCount); i > 0; i--)
439 os << decimalNum % 2;
#define NS_LOG_FUNCTION(parameters)
Neighbor-index data structure for nix-vector routing.
Ptr< NixVector > Copy(void) const
NixVector & operator=(const NixVector &o)
#define NS_ASSERT(condition)
#define NS_LOG_COMPONENT_DEFINE(name)
#define NS_FATAL_ERROR(msg)
fatal error handling
uint32_t GetRemainingBits(void)
uint32_t ExtractNeighborIndex(uint32_t numberOfBits)
void PrintDec2BinNix(uint32_t, uint32_t, std::ostream &os) const
void PrintDec2BinNixFill(uint32_t, uint32_t, std::ostream &os) const
uint32_t Serialize(uint32_t *buffer, uint32_t maxSize) const
void DumpNixVector(std::ostream &os) const
uint32_t GetSerializedSize(void) const
std::ostream & operator<<(std::ostream &os, const Angles &a)
std::vector< uint32_t > NixBits_t
uint32_t Deserialize(const uint32_t *buffer, uint32_t size)
void AddNeighborIndex(uint32_t newBits, uint32_t numberOfBits)
uint32_t m_currentVectorBitSize
uint32_t BitCount(uint32_t numberOfNeighbors) const