View | Details | Raw Unified | Return to bug 639
Collapse All | Expand All

(-)a/src/common/buffer.cc (-18 / +19 lines)
 Lines 20-25    Link Here 
20
#include "buffer.h"
20
#include "buffer.h"
21
#include "ns3/assert.h"
21
#include "ns3/assert.h"
22
#include "ns3/log.h"
22
#include "ns3/log.h"
23
#include "ns3/fatal-error.h"
23
#include <iostream>
24
#include <iostream>
24
25
25
NS_LOG_COMPONENT_DEFINE ("Buffer");
26
NS_LOG_COMPONENT_DEFINE ("Buffer");
 Lines 646-670    Link Here 
646
void
647
void
647
Buffer::CopyData(std::ostream *os, uint32_t size) const
648
Buffer::CopyData(std::ostream *os, uint32_t size) const
648
{
649
{
649
  if (size == GetSize ())
650
  if (size > 0)
650
    {
651
    {
651
      // fast path
652
      uint32_t tmpsize = std::min (m_zeroAreaStart-m_start, size);
652
      os->write((const char*)(m_data->m_data + m_start), m_zeroAreaStart-m_start);
653
      os->write((const char*)(m_data->m_data + m_start), tmpsize);
653
      char zero = 0;
654
      if (size > tmpsize) 
654
      for (uint32_t i = 0; i < m_zeroAreaEnd - m_zeroAreaStart; ++i)
655
        { 
655
        {
656
          size -= m_zeroAreaStart-m_start;
656
          os->write (&zero, 1);
657
          tmpsize = std::min (m_zeroAreaEnd - m_zeroAreaStart, size);
657
        }
658
          char zero = 0;
658
      os->write ((const char*)(m_data->m_data + m_zeroAreaStart), m_end - m_zeroAreaEnd);
659
          for (uint32_t i = 0; i < tmpsize; ++i)
659
    }
660
            {
660
  else
661
              os->write (&zero, 1);
661
    {
662
            }
662
      // slow path
663
          if (size > tmpsize)
663
      Buffer::Iterator i = Begin ();
664
            {
664
      while (!i.IsEnd () && size > 0)
665
              size -= tmpsize;
665
        {
666
              tmpsize = std::min (m_end - m_zeroAreaEnd, size);
666
          char byte = i.ReadU8 ();
667
              os->write ((const char*)(m_data->m_data + m_zeroAreaStart), tmpsize); 
667
          os->write (&byte, 1);
668
            }
668
        }
669
        }
669
    }
670
    }
670
}
671
}
(-)a/src/common/buffer.h (+6 lines)
 Lines 487-492    Link Here 
487
  int32_t GetCurrentStartOffset (void) const;
487
  int32_t GetCurrentStartOffset (void) const;
488
  int32_t GetCurrentEndOffset (void) const;
488
  int32_t GetCurrentEndOffset (void) const;
489
489
490
  /** 
491
   * Copy the specified amount of data from the buffer to the given output stream.
492
   * 
493
   * @param os the output stream
494
   * @param size the maximum amount of bytes to copy. If zero, nothing is copied.
495
   */
490
  void CopyData (std::ostream *os, uint32_t size) const;
496
  void CopyData (std::ostream *os, uint32_t size) const;
491
497
492
  Buffer (Buffer const &o);
498
  Buffer (Buffer const &o);

Return to bug 639