src/common/buffer.cc
changeset 4708 b251fb79becb
parent 4518 31f2881aa214
child 5261 7ccbdea36ec8
     1.1 --- a/src/common/buffer.cc	Mon Jun 08 16:43:21 2009 +0200
     1.2 +++ b/src/common/buffer.cc	Thu Aug 13 09:36:16 2009 +0200
     1.3 @@ -20,6 +20,7 @@
     1.4  #include "buffer.h"
     1.5  #include "ns3/assert.h"
     1.6  #include "ns3/log.h"
     1.7 +#include "ns3/fatal-error.h"
     1.8  #include <iostream>
     1.9  
    1.10  NS_LOG_COMPONENT_DEFINE ("Buffer");
    1.11 @@ -646,25 +647,25 @@
    1.12  void
    1.13  Buffer::CopyData(std::ostream *os, uint32_t size) const
    1.14  {
    1.15 -  if (size == GetSize ())
    1.16 +  if (size > 0)
    1.17      {
    1.18 -      // fast path
    1.19 -      os->write((const char*)(m_data->m_data + m_start), m_zeroAreaStart-m_start);
    1.20 -      char zero = 0;
    1.21 -      for (uint32_t i = 0; i < m_zeroAreaEnd - m_zeroAreaStart; ++i)
    1.22 -        {
    1.23 -          os->write (&zero, 1);
    1.24 -        }
    1.25 -      os->write ((const char*)(m_data->m_data + m_zeroAreaStart), m_end - m_zeroAreaEnd);
    1.26 -    }
    1.27 -  else
    1.28 -    {
    1.29 -      // slow path
    1.30 -      Buffer::Iterator i = Begin ();
    1.31 -      while (!i.IsEnd () && size > 0)
    1.32 -        {
    1.33 -          char byte = i.ReadU8 ();
    1.34 -          os->write (&byte, 1);
    1.35 +      uint32_t tmpsize = std::min (m_zeroAreaStart-m_start, size);
    1.36 +      os->write((const char*)(m_data->m_data + m_start), tmpsize);
    1.37 +      if (size > tmpsize) 
    1.38 +        { 
    1.39 +          size -= m_zeroAreaStart-m_start;
    1.40 +          tmpsize = std::min (m_zeroAreaEnd - m_zeroAreaStart, size);
    1.41 +          char zero = 0;
    1.42 +          for (uint32_t i = 0; i < tmpsize; ++i)
    1.43 +            {
    1.44 +              os->write (&zero, 1);
    1.45 +            }
    1.46 +          if (size > tmpsize)
    1.47 +            {
    1.48 +              size -= tmpsize;
    1.49 +              tmpsize = std::min (m_end - m_zeroAreaEnd, size);
    1.50 +              os->write ((const char*)(m_data->m_data + m_zeroAreaStart), tmpsize); 
    1.51 +            }
    1.52          }
    1.53      }
    1.54  }