fix bug where extracting nix with exact number of remaining bits as a full vector entry failed
1.1 --- a/src/common/nix-vector.cc Wed Jul 29 13:51:06 2009 -0400
1.2 +++ b/src/common/nix-vector.cc Wed Aug 05 11:28:01 2009 -0400
1.3 @@ -174,15 +174,13 @@
1.4
1.5 if (numberOfBits > totalRemainingBits)
1.6 {
1.7 - std::cout << "You've tried to extract too many bits of the Nix-vector, " << this << ". NumberBits: "
1.8 - << numberOfBits << " Remaining: " << totalRemainingBits << std::endl;
1.9 - exit (1);
1.10 + NS_FATAL_ERROR ("You've tried to extract too many bits of the Nix-vector, " << this << ". NumberBits: "
1.11 + << numberOfBits << " Remaining: " << totalRemainingBits);
1.12 }
1.13
1.14 if (numberOfBits <= 0)
1.15 {
1.16 - std::cout << "You've specified a number of bits for Nix-vector <= 0!" << std::endl;
1.17 - exit (1);
1.18 + NS_FATAL_ERROR ("You've specified a number of bits for Nix-vector <= 0!");
1.19 }
1.20
1.21 // First determine where in the NixVector
1.22 @@ -195,7 +193,7 @@
1.23 // span multiple vector entries
1.24 if (vectorIndex > 0) // we could span more than one
1.25 {
1.26 - if (numberOfBits > (totalRemainingBits % 32)) // we do span more than one
1.27 + if ((numberOfBits-1) > ((totalRemainingBits-1) % 32)) // we do span more than one
1.28 {
1.29
1.30 extractedBits = m_nixVector.at (vectorIndex) << (32 - (totalRemainingBits % 32));
2.1 --- a/src/common/packet.cc Wed Jul 29 13:51:06 2009 -0400
2.2 +++ b/src/common/packet.cc Wed Aug 05 11:28:01 2009 -0400
2.3 @@ -140,6 +140,7 @@
2.4 m_metadata (m_globalUid, 0),
2.5 m_refCount (1)
2.6 {
2.7 + m_nixVector = 0;
2.8 m_globalUid++;
2.9 }
2.10
2.11 @@ -148,8 +149,8 @@
2.12 m_byteTagList (o.m_byteTagList),
2.13 m_packetTagList (o.m_packetTagList),
2.14 m_metadata (o.m_metadata),
2.15 - m_refCount (1),
2.16 - m_nixVector (o.m_nixVector)
2.17 + m_nixVector (o.m_nixVector),
2.18 + m_refCount (1)
2.19 {}
2.20
2.21 Packet &
2.22 @@ -174,6 +175,7 @@
2.23 m_metadata (m_globalUid, size),
2.24 m_refCount (1)
2.25 {
2.26 + m_nixVector = 0;
2.27 m_globalUid++;
2.28 }
2.29 Packet::Packet (uint8_t const*buffer, uint32_t size)
2.30 @@ -183,6 +185,7 @@
2.31 m_metadata (m_globalUid, size),
2.32 m_refCount (1)
2.33 {
2.34 + m_nixVector = 0;
2.35 m_globalUid++;
2.36 m_buffer.AddAtStart (size);
2.37 Buffer::Iterator i = m_buffer.Begin ();
2.38 @@ -196,7 +199,9 @@
2.39 m_packetTagList (packetTagList),
2.40 m_metadata (metadata),
2.41 m_refCount (1)
2.42 -{}
2.43 +{
2.44 + m_nixVector = 0;
2.45 +}
2.46
2.47 Ptr<Packet>
2.48 Packet::CreateFragment (uint32_t start, uint32_t length) const
3.1 --- a/src/common/packet.h Wed Jul 29 13:51:06 2009 -0400
3.2 +++ b/src/common/packet.h Wed Aug 05 11:28:01 2009 -0400
3.3 @@ -532,9 +532,9 @@
3.4 ByteTagList m_byteTagList;
3.5 PacketTagList m_packetTagList;
3.6 PacketMetadata m_metadata;
3.7 + Ptr<NixVector> m_nixVector;
3.8 mutable uint32_t m_refCount;
3.9 static uint32_t m_globalUid;
3.10 - Ptr<NixVector> m_nixVector;
3.11 };
3.12
3.13 std::ostream& operator<< (std::ostream& os, const Packet &packet);