src/common/buffer.cc
author src/devices/wifi/Federico Maguolo <maguolof@dei.unipd.it>
Fri, 21 Mar 2008 04:51:36 +0100
changeset 2678 22aa62a108ed
parent 1504 36ecc970ba96
child 2792 2854c5a3795b
permissions -rw-r--r--
Composite and Jakes propagation loss models.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
     3
 * Copyright (c) 2005,2006,2007 INRIA
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
#include "buffer.h"
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
    21
#include "ns3/assert.h"
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
    22
#include "ns3/log.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include <iostream>
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
    24
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
    25
NS_LOG_COMPONENT_DEFINE ("Buffer");
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
    27
#define LOG_INTERNAL_STATE(y)                                                                    \
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
    28
NS_LOG_LOGIC (y << "start="<<m_start<<", end="<<m_end<<", zero start="<<m_zeroAreaStart<<              \
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    29
          ", zero end="<<m_zeroAreaEnd<<", count="<<m_data->m_count<<", size="<<m_data->m_size<<   \
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    30
          ", dirty start="<<m_data->m_dirtyStart<<", dirty end="<<m_data->m_dirtyEnd)
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    31
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    32
#ifdef BUFFER_HEURISTICS
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    33
#define HEURISTICS(x) x
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    34
#else
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    35
#define HEURISTICS(x)
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    36
#endif
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    37
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
    38
//#define PRINT_STATS 1
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    39
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
    40
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    42
/**
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    43
 * This data structure is variable-sized through its last member whose size
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    44
 * is determined at allocation time and stored in the m_size field.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    45
 *
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    46
 * The so-called "dirty area" describes the area in the buffer which
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    47
 * has been reserved and used by a user. Multiple Buffer instances
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    48
 * may reference the same BufferData object instance and may
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    49
 * reference different parts of the underlying byte buffer. The
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    50
 * "dirty area" is union of all the areas referenced by the Buffer
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    51
 * instances which reference the same BufferData instance.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    52
 * New user data can be safely written only outside of the "dirty
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    53
 * area" if the reference count is higher than 1 (that is, if
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    54
 * more than one Buffer instance references the same BufferData).
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    55
 */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    56
struct BufferData {
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    57
  /* The reference count of an instance of this data structure.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    58
   * Each buffer which references an instance holds a count.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    59
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    60
  uint32_t m_count;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    61
  /* the size of the m_data field below.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    62
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    63
  uint32_t m_size;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    64
  /* offset from the start of the m_data field below to the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    65
   * start of the area in which user bytes were written.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    66
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    67
  uint32_t m_dirtyStart;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    68
  /* offset from the start of the m_data field below to the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    69
   * end of the area in which user bytes were written.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    70
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    71
  uint32_t m_dirtyEnd;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    72
  /* The real data buffer holds _at least_ one byte.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    73
   * Its real size is stored in the m_size field.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    74
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    75
  uint8_t m_data[1];
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    76
};
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    77
class BufferDataList : public std::vector<struct BufferData*>
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    78
{
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    79
public:
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    80
  ~BufferDataList ();
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    81
};
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    83
static struct BufferData *BufferAllocate (uint32_t reqSize);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    84
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    85
static void BufferDeallocate (struct BufferData *data);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    86
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    87
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    88
} // namespace ns3
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    89
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    90
namespace ns3 {
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    91
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    92
#ifdef BUFFER_HEURISTICS
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    93
static uint32_t g_recommendedStart = 0;
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
    94
static uint64_t g_nAddNoRealloc = 0;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
    95
static uint64_t g_nAddRealloc = 0;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    96
static BufferDataList  g_freeList;
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
    97
static uint32_t g_maxSize = 0;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
    98
static uint64_t g_nAllocs = 0;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
    99
static uint64_t g_nCreates = 0;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   100
#endif /* BUFFER_HEURISTICS */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   101
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   102
BufferDataList::~BufferDataList ()
957
426b85bab45f fix bug 57
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 943
diff changeset
   103
{
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   104
#ifdef PRINT_STATS
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   105
#ifdef BUFFER_HEURISTICS
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   106
  double efficiency;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   107
  efficiency = g_nAllocs;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   108
  efficiency /= g_nCreates;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   109
  std::cout <<"buffer free list efficiency="<<efficiency<<" (lower is better)" << std::endl;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   110
  std::cout <<"buffer free list max size="<<g_maxSize<<std::endl;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   111
  std::cout <<"buffer free list recommended start="<<g_recommendedStart<<std::endl;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   112
  double addEfficiency;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   113
  addEfficiency = g_nAddRealloc;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   114
  addEfficiency /= g_nAddNoRealloc;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   115
  std::cout <<"buffer add efficiency=" << addEfficiency << " (lower is better)"<<std::endl;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   116
  //std::cout <<"n add reallocs="<< g_nAddRealloc << std::endl;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   117
  //std::cout <<"n add no reallocs="<< g_nAddNoRealloc << std::endl;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   118
#endif /* BUFFER_HEURISTICS */
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   119
#endif /* PRINT_STATS */
957
426b85bab45f fix bug 57
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 943
diff changeset
   120
  for (BufferDataList::iterator i = begin ();
426b85bab45f fix bug 57
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 943
diff changeset
   121
       i != end (); i++)
426b85bab45f fix bug 57
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 943
diff changeset
   122
    {
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   123
      BufferDeallocate (*i);
957
426b85bab45f fix bug 57
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 943
diff changeset
   124
    }
426b85bab45f fix bug 57
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 943
diff changeset
   125
}
426b85bab45f fix bug 57
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 943
diff changeset
   126
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   127
struct BufferData *
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   128
BufferAllocate (uint32_t reqSize)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   130
  if (reqSize == 0) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   131
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   132
      reqSize = 1;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   133
    }
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   134
  NS_ASSERT (reqSize >= 1);
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   135
  uint32_t size = reqSize - 1 + sizeof (struct BufferData);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   136
  uint8_t *b = new uint8_t [size];
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   137
  struct BufferData *data = reinterpret_cast<struct BufferData*>(b);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   138
  data->m_size = reqSize;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   139
  data->m_count = 1;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   140
  return data;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
void
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   144
BufferDeallocate (struct BufferData *data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   146
  NS_ASSERT (data->m_count == 0);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   147
  uint8_t *buf = reinterpret_cast<uint8_t *> (data);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   148
  delete [] buf;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
}
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   150
#ifdef BUFFER_HEURISTICS
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
void
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   152
Buffer::Recycle (struct BufferData *data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
{
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   154
  NS_ASSERT (data->m_count == 0);
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   155
  g_maxSize = std::max (g_maxSize, data->m_size);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   156
  /* feed into free list */
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   157
  if (data->m_size < g_maxSize ||
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   158
      g_freeList.size () > 1000)
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   159
    {
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   160
      BufferDeallocate (data);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   161
    }
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   162
  else
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   163
    {
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   164
      g_freeList.push_back (data);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   165
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   168
BufferData *
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   169
Buffer::Create (uint32_t dataSize)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   171
  /* try to find a buffer correctly sized. */
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   172
  g_nCreates++;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   173
  while (!g_freeList.empty ()) 
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   174
    {
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   175
      struct BufferData *data = g_freeList.back ();
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   176
      g_freeList.pop_back ();
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   177
      if (data->m_size >= dataSize) 
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   178
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   179
          data->m_count = 1;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   180
          return data;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   181
        }
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   182
      BufferDeallocate (data);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   183
    }
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   184
  g_nAllocs++;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   185
  struct BufferData *data = BufferAllocate (dataSize);
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   186
  NS_ASSERT (data->m_count == 1);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   187
  return data;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
#else
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
void
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   191
Buffer::Recycle (struct BufferData *data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   193
  NS_ASSERT (data->m_count == 0);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   194
  BufferDeallocate (data);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   197
BufferData *
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   198
Buffer::Create (uint32_t size)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   200
  return BufferAllocate (size);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   201
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
#endif
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   204
Buffer::Buffer ()
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   205
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   206
  Initialize (0);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   207
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   208
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   209
Buffer::Buffer (uint32_t dataSize)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   210
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   211
  Initialize (dataSize);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   212
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   213
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   214
bool
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   215
Buffer::CheckInternalState (void) const
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   216
{
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   217
  bool offsetsOk = 
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   218
    m_start <= m_zeroAreaStart &&
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   219
    m_zeroAreaStart <= m_zeroAreaEnd &&
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   220
    m_zeroAreaEnd <= m_end;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   221
  bool dirtyOk =
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   222
    m_start >= m_data->m_dirtyStart &&
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   223
    m_end <= m_data->m_dirtyEnd;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   224
  bool internalSizeOk = m_end - (m_zeroAreaEnd - m_zeroAreaStart) <= m_data->m_size &&
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   225
    m_start <= m_data->m_size &&
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   226
    m_zeroAreaStart <= m_data->m_size;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   227
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   228
  NS_ASSERT (offsetsOk);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   229
  NS_ASSERT (dirtyOk);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   230
  NS_ASSERT (internalSizeOk);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   231
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   232
  return m_data->m_count > 0 && offsetsOk && dirtyOk && 
1479
4992b6de33e6 it is possible to zeroAreaStart to be bigger than the data buffer size
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1478
diff changeset
   233
    internalSizeOk;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   234
}
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   235
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   236
void
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   237
Buffer::Initialize (uint32_t zeroSize)
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   238
{
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   239
  m_data = Buffer::Create (0);
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   240
#ifdef BUFFER_HEURISTICS
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   241
  m_start = std::min (m_data->m_size, g_recommendedStart);
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   242
  m_maxZeroAreaStart = m_start;
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   243
#else
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   244
  m_start = 0;
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   245
#endif /* BUFFER_HEURISTICS */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   246
  m_zeroAreaStart = m_start;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   247
  m_zeroAreaEnd = m_zeroAreaStart + zeroSize;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   248
  m_end = m_zeroAreaEnd;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   249
  m_data->m_dirtyStart = m_start;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   250
  m_data->m_dirtyEnd = m_end;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   251
  NS_ASSERT (CheckInternalState ());
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   252
}
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   253
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   254
Buffer::Buffer (Buffer const&o)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   255
  : m_data (o.m_data),
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   256
#ifdef BUFFER_HEURISTICS
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   257
    m_maxZeroAreaStart (o.m_zeroAreaStart),
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   258
#endif
1473
6c6af702f501 add Buffer::m_zeroAreaStart
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1471
diff changeset
   259
    m_zeroAreaStart (o.m_zeroAreaStart),
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   260
    m_zeroAreaEnd (o.m_zeroAreaEnd),
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   261
    m_start (o.m_start),
1470
34de85128b54 Buffer::m_size -> Buffer::m_end
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1469
diff changeset
   262
    m_end (o.m_end)
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   263
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   264
  m_data->m_count++;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   265
  NS_ASSERT (CheckInternalState ());
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   266
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   267
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   268
Buffer &
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   269
Buffer::operator = (Buffer const&o)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   270
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   271
  NS_ASSERT (CheckInternalState ());
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   272
  if (m_data != o.m_data) 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   273
    {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   274
      // not assignment to self.
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   275
      m_data->m_count--;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   276
      if (m_data->m_count == 0) 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   277
        {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   278
          Recycle (m_data);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   279
        }
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   280
      m_data = o.m_data;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   281
      m_data->m_count++;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   282
    }
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   283
  HEURISTICS (
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   284
  g_recommendedStart = std::max (g_recommendedStart, m_maxZeroAreaStart);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   285
  m_maxZeroAreaStart = o.m_maxZeroAreaStart;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   286
  );
1473
6c6af702f501 add Buffer::m_zeroAreaStart
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1471
diff changeset
   287
  m_zeroAreaStart = o.m_zeroAreaStart;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   288
  m_zeroAreaEnd = o.m_zeroAreaEnd;
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   289
  m_start = o.m_start;
1470
34de85128b54 Buffer::m_size -> Buffer::m_end
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1469
diff changeset
   290
  m_end = o.m_end;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   291
  NS_ASSERT (CheckInternalState ());
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   292
  return *this;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   293
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   294
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   295
Buffer::~Buffer ()
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   296
{
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   297
  HEURISTICS (g_recommendedStart = std::max (g_recommendedStart, m_maxZeroAreaStart));
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   298
  m_data->m_count--;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   299
  if (m_data->m_count == 0) 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   300
    {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   301
      Recycle (m_data);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   302
    }
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   303
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   304
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   305
uint32_t 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   306
Buffer::GetSize (void) const
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   307
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   308
  NS_ASSERT (CheckInternalState ());
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   309
  return m_end - m_start;
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   310
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   311
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   312
Buffer::Iterator 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   313
Buffer::Begin (void) const
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   314
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   315
  NS_ASSERT (CheckInternalState ());
1463
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   316
  return Buffer::Iterator (this);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   317
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   318
Buffer::Iterator 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   319
Buffer::End (void) const
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   320
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   321
  NS_ASSERT (CheckInternalState ());
1463
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   322
  return Buffer::Iterator (this, false);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   323
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   324
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   325
uint32_t
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   326
Buffer::GetInternalSize (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   327
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   328
  return m_zeroAreaStart - m_start + m_end - m_zeroAreaEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   329
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   330
uint32_t
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   331
Buffer::GetInternalEnd (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   332
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   333
  return m_end - (m_zeroAreaEnd - m_zeroAreaStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   334
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   335
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   336
void 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   337
Buffer::AddAtStart (uint32_t start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   338
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   339
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   340
  bool isDirty = m_data->m_count > 1 && m_start > m_data->m_dirtyStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   341
  if (m_start >= start && !isDirty)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   342
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   343
      /* enough space in the buffer and not dirty. 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   344
       * To add: |..|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   345
       * Before: |*****---------***|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   346
       * After:  |***..---------***|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   347
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   348
      NS_ASSERT (m_data->m_count == 1 || m_start == m_data->m_dirtyStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   349
      m_start -= start;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   350
      HEURISTICS (g_nAddNoRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   351
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   352
#if 0
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   353
  // the following is an optimization
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   354
  else if (m_start >= start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   355
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   356
      struct BufferData *newData = Buffer::Create (m_data->m_size);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   357
      memcpy (newData->m_data + m_start, m_data->m_data + m_start, GetInternalSize ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   358
      m_data->m_count--;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   359
      if (m_data->m_count == 0)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   360
        {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   361
          Buffer::Recycle (m_data);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   362
        }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   363
      m_data = newData;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   364
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   365
      m_start -= start;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   366
      HEURISTICS (g_nAddRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   367
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   368
  else
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   369
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   370
      NS_ASSERT (m_start < start);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   371
#else
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   372
  else
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   373
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   374
#endif
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   375
      uint32_t newSize = GetInternalSize () + start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   376
      struct BufferData *newData = Buffer::Create (newSize);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   377
      memcpy (newData->m_data + start, m_data->m_data + m_start, GetInternalSize ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   378
      m_data->m_count--;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   379
      if (m_data->m_count == 0)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   380
        {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   381
          Buffer::Recycle (m_data);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   382
        }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   383
      m_data = newData;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   384
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   385
      int32_t delta = start - m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   386
      m_start = 0;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   387
      m_zeroAreaStart += delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   388
      m_zeroAreaEnd += delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   389
      m_end += delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   390
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   391
      HEURISTICS (g_nAddRealloc++);
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   392
    }
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   393
  HEURISTICS (m_maxZeroAreaStart = std::max (m_maxZeroAreaStart, m_zeroAreaStart));
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   394
  // update dirty area
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   395
  m_data->m_dirtyStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   396
  m_data->m_dirtyEnd = m_end;
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
   397
  LOG_INTERNAL_STATE ("add start=" << start << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   398
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   399
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   400
void 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   401
Buffer::AddAtEnd (uint32_t end)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   402
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   403
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   404
  bool isDirty = m_data->m_count > 1 && m_end < m_data->m_dirtyEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   405
  if (GetInternalEnd () + end <= m_data->m_size && !isDirty)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   406
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   407
      /* enough space in buffer and not dirty
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   408
       * Add:    |...|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   409
       * Before: |**----*****|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   410
       * After:  |**----...**|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   411
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   412
      NS_ASSERT (m_data->m_count == 1 || m_end == m_data->m_dirtyEnd);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   413
      m_end += end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   414
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   415
      HEURISTICS (g_nAddNoRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   416
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   417
#if 0
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   418
  // this is an optimization
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   419
  else if (GetInternalEnd () + end > m_data->m_size)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   420
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   421
      struct BufferData *newData = Buffer::Create (newSize);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   422
      memcpy (newData->m_data + m_start, m_data->m_data + m_start, GetInternalSize ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   423
      m_data->m_count--;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   424
      if (m_data->m_count == 0) 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   425
        {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   426
          Buffer::Recycle (m_data);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   427
        }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   428
      m_data = newData;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   429
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   430
      m_end += end;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   431
      HEURISTICS (g_nAddRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   432
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   433
#endif
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   434
  else
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   435
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   436
      uint32_t newSize = GetInternalSize () + end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   437
      struct BufferData *newData = Buffer::Create (newSize);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   438
      memcpy (newData->m_data, m_data->m_data + m_start, GetInternalSize ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   439
      m_data->m_count--;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   440
      if (m_data->m_count == 0) 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   441
        {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   442
          Buffer::Recycle (m_data);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   443
        }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   444
      m_data = newData;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   445
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   446
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   447
      m_zeroAreaStart -= m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   448
      m_zeroAreaEnd -= m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   449
      m_end -= m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   450
      m_start = 0;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   451
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   452
      m_end += end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   453
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   454
      HEURISTICS (g_nAddRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   455
    } 
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   456
  HEURISTICS (m_maxZeroAreaStart = std::max (m_maxZeroAreaStart, m_zeroAreaStart));
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   457
  // update dirty area
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   458
  m_data->m_dirtyStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   459
  m_data->m_dirtyEnd = m_end;
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
   460
  LOG_INTERNAL_STATE ("add end=" << end << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   461
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   462
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   463
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   464
void 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   465
Buffer::RemoveAtStart (uint32_t start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   466
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   467
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   468
  uint32_t newStart = m_start + start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   469
  if (newStart <= m_zeroAreaStart)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   470
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   471
      /* only remove start of buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   472
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   473
      m_start = newStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   474
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   475
  else if (newStart <= m_zeroAreaEnd)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   476
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   477
      /* remove start of buffer _and_ start of zero area
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   478
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   479
      uint32_t delta = newStart - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   480
      m_start = m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   481
      m_zeroAreaEnd -= delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   482
      m_end -= delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   483
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   484
  else if (newStart <= m_end)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   485
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   486
      /* remove start of buffer, complete zero area, and part
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   487
       * of end of buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   488
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   489
      NS_ASSERT (m_end >= start);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   490
      uint32_t zeroSize = m_zeroAreaEnd - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   491
      m_start = newStart - zeroSize;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   492
      m_end -= zeroSize;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   493
      m_zeroAreaStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   494
      m_zeroAreaEnd = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   495
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   496
  else 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   497
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   498
      /* remove all buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   499
      m_end -= m_zeroAreaEnd - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   500
      m_start = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   501
      m_zeroAreaEnd = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   502
      m_zeroAreaStart = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   503
    }
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   504
  HEURISTICS (m_maxZeroAreaStart = std::max (m_maxZeroAreaStart, m_zeroAreaStart));
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
   505
  LOG_INTERNAL_STATE ("rem start=" << start << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   506
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   507
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   508
void 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   509
Buffer::RemoveAtEnd (uint32_t end)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   510
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   511
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   512
  uint32_t newEnd = m_end - std::min (end, m_end - m_start);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   513
  if (newEnd > m_zeroAreaEnd)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   514
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   515
      /* remove part of end of buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   516
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   517
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   518
  else if (newEnd > m_zeroAreaStart)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   519
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   520
      /* remove end of buffer, part of zero area */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   521
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   522
      m_zeroAreaEnd = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   523
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   524
  else if (newEnd > m_start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   525
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   526
      /* remove end of buffer, zero area, part of start of buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   527
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   528
      m_zeroAreaEnd = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   529
      m_zeroAreaStart = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   530
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   531
  else
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   532
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   533
      /* remove all buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   534
      m_end = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   535
      m_zeroAreaEnd = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   536
      m_zeroAreaStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   537
    }
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   538
  HEURISTICS (m_maxZeroAreaStart = std::max (m_maxZeroAreaStart, m_zeroAreaStart));
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
   539
  LOG_INTERNAL_STATE ("rem end=" << end << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   540
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   541
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   542
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   543
Buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   544
Buffer::CreateFragment (uint32_t start, uint32_t length) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   545
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   546
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   547
  uint32_t zeroStart = m_zeroAreaStart - m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   548
  uint32_t zeroEnd = zeroStart + m_zeroAreaEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   549
  if (m_zeroAreaEnd != 0 &&
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   550
      start + length > zeroStart &&
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   551
      start <= zeroEnd) 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   552
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   553
      TransformIntoRealBuffer ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   554
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   555
  Buffer tmp = *this;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   556
  tmp.RemoveAtStart (start);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   557
  tmp.RemoveAtEnd (GetSize () - (start + length));
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   558
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   559
  return tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   560
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   561
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   562
Buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   563
Buffer::CreateFullCopy (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   564
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   565
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   566
  if (m_zeroAreaEnd != 0) 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   567
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   568
      Buffer tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   569
      tmp.AddAtStart (m_zeroAreaEnd - m_zeroAreaStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   570
      tmp.Begin ().WriteU8 (0, m_zeroAreaEnd - m_zeroAreaStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   571
      uint32_t dataStart = m_zeroAreaStart - m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   572
      tmp.AddAtStart (dataStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   573
      tmp.Begin ().Write (m_data->m_data+m_start, dataStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   574
      uint32_t dataEnd = m_end - m_zeroAreaEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   575
      tmp.AddAtEnd (dataEnd);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   576
      Buffer::Iterator i = tmp.End ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   577
      i.Prev (dataEnd);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   578
      i.Write (m_data->m_data+m_zeroAreaStart,dataEnd);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   579
      return tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   580
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   581
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   582
  return *this;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   583
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   584
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   585
void
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   586
Buffer::TransformIntoRealBuffer (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   587
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   588
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   589
  Buffer tmp = CreateFullCopy ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   590
  *const_cast<Buffer *> (this) = tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   591
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   592
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   593
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   594
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   595
uint8_t const*
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   596
Buffer::PeekData (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   597
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   598
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   599
  TransformIntoRealBuffer ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   600
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   601
  return m_data->m_data + m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   602
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   603
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   604
/******************************************************
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   605
 *            The buffer iterator below.
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   606
 ******************************************************/
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   607
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   608
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   609
Buffer::Iterator::Iterator ()
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   610
  : m_zeroStart (0),
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   611
    m_zeroEnd (0),
1465
752e84e2f00a rewrite Iterator::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1464
diff changeset
   612
    m_dataStart (0),
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   613
    m_dataEnd (0),
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   614
    m_current (0),
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   615
    m_data (0)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   616
{}
1463
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   617
Buffer::Iterator::Iterator (Buffer const*buffer)
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   618
{
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   619
  Construct (buffer);
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   620
  m_current = m_dataStart;
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   621
}
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   622
Buffer::Iterator::Iterator (Buffer const*buffer, bool dummy)
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   623
{
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   624
  Construct (buffer);
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   625
  m_current = m_dataEnd;
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   626
}
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   627
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   628
void
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   629
Buffer::Iterator::Construct (const Buffer *buffer)
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   630
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   631
  m_zeroStart = buffer->m_zeroAreaStart;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   632
  m_zeroEnd = buffer->m_zeroAreaEnd;
1467
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   633
  m_dataStart = buffer->m_start;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   634
  m_dataEnd = buffer->m_end;
1467
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   635
  m_data = buffer->m_data->m_data;
1463
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   636
}
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   637
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   638
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   639
Buffer::Iterator::Next (void)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   640
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   641
  NS_ASSERT (m_current + 1 <= m_dataEnd);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   642
  m_current++;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   643
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   644
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   645
Buffer::Iterator::Prev (void)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   646
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   647
  NS_ASSERT (m_current >= 1);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   648
  m_current--;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   649
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   650
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   651
Buffer::Iterator::Next (uint32_t delta)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   652
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   653
  NS_ASSERT (m_current + delta <= m_dataEnd);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   654
  m_current += delta;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   655
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   656
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   657
Buffer::Iterator::Prev (uint32_t delta)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   658
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   659
  NS_ASSERT (m_current >= delta);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   660
  m_current -= delta;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   661
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   662
uint32_t
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   663
Buffer::Iterator::GetDistanceFrom (Iterator const &o) const
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   664
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   665
  NS_ASSERT (m_data == o.m_data);
1464
0d52ddfda61b simplify Iterator::GetDistanceFrom method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1463
diff changeset
   666
  int32_t diff = m_current - o.m_current;
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   667
  if (diff < 0)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   668
    {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   669
      return -diff;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   670
    }
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   671
  else
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   672
    {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   673
      return diff;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   674
    }
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   675
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   676
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   677
bool 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   678
Buffer::Iterator::IsEnd (void) const
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   679
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   680
  return m_current == m_dataEnd;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   681
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   682
bool 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   683
Buffer::Iterator::IsStart (void) const
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   684
{
1465
752e84e2f00a rewrite Iterator::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1464
diff changeset
   685
  return m_current == m_dataStart;
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   686
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   687
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   688
bool 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   689
Buffer::Iterator::CheckNoZero (uint32_t start, uint32_t end) const
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   690
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   691
  bool ok = true;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   692
  for (uint32_t i = start; i < end; i++)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   693
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   694
      if (!Check (i))
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   695
        {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   696
          ok = false;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   697
        }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   698
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   699
  return ok;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   700
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   701
bool 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   702
Buffer::Iterator::Check (uint32_t i) const
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   703
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   704
  return i >= m_dataStart && 
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   705
    !(i >= m_zeroStart && i < m_zeroEnd) &&
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   706
    i <= m_dataEnd;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   707
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   708
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   709
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   710
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   711
Buffer::Iterator::Write (Iterator start, Iterator end)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   712
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   713
  NS_ASSERT (start.m_data == end.m_data);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   714
  NS_ASSERT (start.m_current <= end.m_current);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   715
  NS_ASSERT (start.m_zeroStart == end.m_zeroStart);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   716
  NS_ASSERT (start.m_zeroEnd == end.m_zeroEnd);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   717
  NS_ASSERT (m_data != start.m_data);
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   718
  uint32_t size = end.m_current - start.m_current;
1467
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   719
  Iterator cur = start;
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   720
  for (uint32_t i = 0; i < size; i++)
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   721
    {
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   722
      uint8_t data = cur.ReadU8 ();
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   723
      WriteU8 (data);
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   724
    }
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   725
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   726
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   727
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   728
Buffer::Iterator::WriteU16 (uint16_t data)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   729
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   730
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   731
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   732
  WriteU8 (data & 0xff);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   733
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   734
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   735
Buffer::Iterator::WriteU32 (uint32_t data)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   736
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   737
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   738
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   739
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   740
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   741
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   742
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   743
  WriteU8 (data & 0xff);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   744
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   745
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   746
Buffer::Iterator::WriteU64 (uint64_t data)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   747
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   748
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   749
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   750
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   751
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   752
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   753
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   754
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   755
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   756
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   757
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   758
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   759
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   760
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   761
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   762
  WriteU8 (data & 0xff);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   763
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   764
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   765
Buffer::Iterator::WriteHtonU16 (uint16_t data)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   766
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   767
  WriteU8 ((data >> 8) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   768
  WriteU8 ((data >> 0) & 0xff);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   769
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   770
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   771
Buffer::Iterator::WriteHtonU32 (uint32_t data)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   772
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   773
  WriteU8 ((data >> 24) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   774
  WriteU8 ((data >> 16) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   775
  WriteU8 ((data >> 8) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   776
  WriteU8 ((data >> 0) & 0xff);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   777
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   778
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   779
Buffer::Iterator::WriteHtonU64 (uint64_t data)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   780
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   781
  WriteU8 ((data >> 56) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   782
  WriteU8 ((data >> 48) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   783
  WriteU8 ((data >> 40) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   784
  WriteU8 ((data >> 32) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   785
  WriteU8 ((data >> 24) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   786
  WriteU8 ((data >> 16) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   787
  WriteU8 ((data >> 8) & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   788
  WriteU8 ((data >> 0) & 0xff);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   789
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   790
void 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   791
Buffer::Iterator::Write (uint8_t const*buffer, uint32_t size)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   792
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   793
  for (uint32_t i = 0; i < size; i++)
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   794
    {
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   795
      WriteU8 (buffer[i]);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   796
    }
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   797
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   798
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   799
uint16_t 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   800
Buffer::Iterator::ReadU16 (void)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   801
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   802
  uint8_t byte0 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   803
  uint8_t byte1 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   804
  uint16_t data = byte1;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   805
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   806
  data |= byte0;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   807
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   808
  return data;
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   809
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   810
uint32_t 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   811
Buffer::Iterator::ReadU32 (void)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   812
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   813
  uint8_t byte0 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   814
  uint8_t byte1 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   815
  uint8_t byte2 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   816
  uint8_t byte3 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   817
  uint32_t data = byte3;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   818
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   819
  data |= byte2;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   820
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   821
  data |= byte1;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   822
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   823
  data |= byte0;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   824
  return data;
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   825
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   826
uint64_t 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   827
Buffer::Iterator::ReadU64 (void)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   828
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   829
  uint8_t byte0 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   830
  uint8_t byte1 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   831
  uint8_t byte2 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   832
  uint8_t byte3 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   833
  uint8_t byte4 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   834
  uint8_t byte5 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   835
  uint8_t byte6 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   836
  uint8_t byte7 = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   837
  uint32_t data = byte7;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   838
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   839
  data |= byte6;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   840
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   841
  data |= byte5;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   842
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   843
  data |= byte4;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   844
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   845
  data |= byte3;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   846
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   847
  data |= byte2;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   848
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   849
  data |= byte1;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   850
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   851
  data |= byte0;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   852
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   853
  return data;
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   854
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   855
uint16_t 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   856
Buffer::Iterator::ReadNtohU16 (void)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   857
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   858
  uint16_t retval = 0;
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   859
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   860
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   861
  retval |= ReadU8 ();
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   862
  return retval;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   863
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   864
uint32_t 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   865
Buffer::Iterator::ReadNtohU32 (void)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   866
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   867
  uint32_t retval = 0;
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   868
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   869
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   870
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   871
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   872
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   873
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   874
  retval |= ReadU8 ();
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   875
  return retval;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   876
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   877
uint64_t 
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   878
Buffer::Iterator::ReadNtohU64 (void)
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   879
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   880
  uint64_t retval = 0;
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   881
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   882
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   883
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   884
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   885
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   886
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   887
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   888
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   889
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   890
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   891
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   892
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   893
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   894
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   895
  retval |= ReadU8 ();
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   896
  return retval;
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   897
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   898
void 
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   899
Buffer::Iterator::Read (uint8_t *buffer, uint32_t size)
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   900
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   901
  for (uint32_t i = 0; i < size; i++)
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   902
    {
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   903
      buffer[i] = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   904
    }
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   905
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   906
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   907
#ifndef BUFFER_USE_INLINE
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   908
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   909
void 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   910
Buffer::Iterator::WriteU8  (uint8_t  data)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   911
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   912
  if (m_current < m_dataStart)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   913
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   914
      // XXX trying to write outside of data area
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   915
      NS_ASSERT (false);
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   916
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   917
  else if (m_current < m_zeroStart)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   918
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   919
      m_data[m_current] = data;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   920
      m_current++;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   921
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   922
  else if (m_current < m_zeroEnd)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   923
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   924
      // XXX trying to write in zero area
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   925
      NS_ASSERT (false);
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   926
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   927
  else if (m_current < m_dataEnd)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   928
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   929
      m_data[m_current - (m_zeroEnd-m_zeroStart)] = data;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   930
      m_current++;      
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   931
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   932
  else 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   933
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   934
      // XXX trying to write outside of data area
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   935
      NS_ASSERT (false);
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   936
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   937
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   938
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   939
void 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   940
Buffer::Iterator::WriteU8 (uint8_t  data, uint32_t len)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   941
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   942
  for (uint32_t i = 0; i < len; i++)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   943
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   944
      WriteU8 (data);
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   945
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   946
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   947
1489
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   948
uint8_t  
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   949
Buffer::Iterator::ReadU8 (void)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   950
{
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   951
  if (m_current < m_dataStart)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   952
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   953
      // XXX trying to read from outside of data area
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   954
      NS_ASSERT (false);
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   955
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   956
  else if (m_current < m_zeroStart)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   957
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   958
      uint8_t data = m_data[m_current];
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   959
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   960
      return data;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   961
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   962
  else if (m_current < m_zeroEnd)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   963
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   964
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   965
      return 0;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   966
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   967
  else if (m_current < m_dataEnd)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   968
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   969
      uint8_t data = m_data[m_current - (m_zeroEnd-m_zeroStart)];
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   970
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   971
      return data;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   972
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   973
  else 
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   974
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   975
      // XXX trying to read from outside of data area
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   976
      NS_ASSERT (false);
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   977
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   978
  // to quiet compiler.
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   979
  return 0;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   980
}
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   981
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   982
#endif /* BUFFER_USE_INLINE */
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   983
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   984
} // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   985
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   986
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   987
#ifdef RUN_SELF_TESTS
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   988
14
6dd7d31c6fc3 replace yans include with ns3 include
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
   989
#include "ns3/test.h"
943
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
   990
#include "ns3/random-variable.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   991
#include <iomanip>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   992
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   993
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   994
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   995
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   996
class BufferTest: public Test {
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   997
private:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   998
  bool EnsureWrittenBytes (Buffer b, uint32_t n, uint8_t array[]);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   999
public:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1000
  virtual bool RunTests (void);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1001
  BufferTest ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1002
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1003
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1004
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1005
BufferTest::BufferTest ()
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1006
  : Test ("Buffer") {}
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1007
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1008
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 110
diff changeset
  1009
BufferTest::EnsureWrittenBytes (Buffer b, uint32_t n, uint8_t array[])
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1010
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1011
  bool success = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1012
  uint8_t *expected = array;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1013
  uint8_t const*got;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1014
  got = b.PeekData ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1015
  for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1016
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1017
      if (got[j] != expected[j]) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1018
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1019
          success = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1020
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1021
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1022
  if (!success) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1023
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1024
      Failure () << "Buffer -- ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1025
      Failure () << "expected: n=";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1026
      Failure () << n << ", ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1027
      Failure ().setf (std::ios::hex, std::ios::basefield);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1028
      for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1029
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1030
          Failure () << (uint16_t)expected[j] << " ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1031
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1032
      Failure ().setf (std::ios::dec, std::ios::basefield);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1033
      Failure () << "got: ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1034
      Failure ().setf (std::ios::hex, std::ios::basefield);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1035
      for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1036
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1037
          Failure () << (uint16_t)got[j] << " ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1038
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1039
      Failure () << std::endl;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1040
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1041
  return success;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1042
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1043
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1044
/* Note: works only when variadic macros are
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1045
 * available which is the case for gcc.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1046
 * XXX
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1047
 */
134
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1048
#define ENSURE_WRITTEN_BYTES(buffer, n, ...)     \
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1049
  {                                              \
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1050
  uint8_t bytes[] = {__VA_ARGS__};             \
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1051
  if (!EnsureWrittenBytes (buffer, n , bytes)) \
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1052
    {                                          \
943
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1053
      result = false;                          \
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1054
    }                                          \
134
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1055
  }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1056
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1057
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 110
diff changeset
  1058
BufferTest::RunTests (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1059
{
943
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1060
  bool result = true;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1061
  Buffer buffer;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1062
  Buffer::Iterator i;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1063
  buffer.AddAtStart (6);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1064
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1065
  i.WriteU8 (0x66);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1066
  ENSURE_WRITTEN_BYTES (buffer, 1, 0x66);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1067
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1068
  i.WriteU8 (0x67);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1069
  ENSURE_WRITTEN_BYTES (buffer, 1, 0x67);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1070
  i.WriteHtonU16 (0x6568);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1071
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1072
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x67, 0x65, 0x68);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1073
  i.WriteHtonU16 (0x6369);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1074
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x63, 0x69, 0x68);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1075
  i.WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1076
  ENSURE_WRITTEN_BYTES (buffer, 6, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1077
  buffer.AddAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1078
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1079
  i.WriteU16 (0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1080
  ENSURE_WRITTEN_BYTES (buffer, 8, 0, 0, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1081
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1082
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1083
  i.Next (8);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1084
  i.WriteU16 (0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1085
  ENSURE_WRITTEN_BYTES (buffer, 10, 0, 0, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1086
  buffer.RemoveAtStart (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1087
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1088
  ENSURE_WRITTEN_BYTES (buffer, 7, 0x69, 0xde, 0xad, 0xbe, 0xaf, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1089
  buffer.RemoveAtEnd (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1090
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1091
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x69, 0xde, 0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1092
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1093
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1094
  i.WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1095
  ENSURE_WRITTEN_BYTES (buffer, 4, 0xff, 0x69, 0xde, 0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1096
  buffer.AddAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1097
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1098
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1099
  i.WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1100
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1101
  uint16_t saved = i.ReadU16 ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1102
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1103
  i.WriteHtonU16 (0xff00);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1104
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1105
  if (i.ReadNtohU16 () != 0xff00) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1106
    {
943
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1107
      result = false;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1108
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1109
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1110
  i.WriteU16 (saved);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1111
  ENSURE_WRITTEN_BYTES (buffer, 5, 0xff, 0x69, 0xde, 0xad, 0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1112
  Buffer o = buffer;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1113
  ENSURE_WRITTEN_BYTES (o, 5, 0xff, 0x69, 0xde, 0xad, 0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1114
  o.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1115
  i = o.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1116
  i.WriteU8 (0xfe);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1117
  ENSURE_WRITTEN_BYTES (o, 6, 0xfe, 0xff, 0x69, 0xde, 0xad, 0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1118
  buffer.AddAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1119
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1120
  i.WriteU8 (0xfd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1121
  i.WriteU8 (0xfd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1122
  ENSURE_WRITTEN_BYTES (o, 6, 0xfe, 0xff, 0x69, 0xde, 0xad, 0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1123
  ENSURE_WRITTEN_BYTES (buffer, 7, 0xfd, 0xfd, 0xff, 0x69, 0xde, 0xad, 0xff);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1124
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1125
  // test self-assignment
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1126
  {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1127
      Buffer a = o;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1128
      a = a;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1129
  }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1130
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1131
  // test Remove start.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1132
  buffer = Buffer (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1133
  ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1134
  buffer.RemoveAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1135
  ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1136
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1137
  buffer.Begin ().WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1138
  ENSURE_WRITTEN_BYTES (buffer, 5, 0xff, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1139
  buffer.RemoveAtStart(3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1140
  ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1141
  buffer.AddAtStart (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1142
  buffer.Begin ().WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1143
  ENSURE_WRITTEN_BYTES (buffer, 6,  0xde, 0xad, 0xbe, 0xaf, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1144
  buffer.RemoveAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1145
  ENSURE_WRITTEN_BYTES (buffer, 4,  0xbe, 0xaf, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1146
  buffer.AddAtEnd (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1147
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1148
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1149
  i.WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1150
  ENSURE_WRITTEN_BYTES (buffer, 8,  0xbe, 0xaf, 0, 0, 0xde, 0xad, 0xbe, 0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1151
  buffer.RemoveAtStart (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1152
  ENSURE_WRITTEN_BYTES (buffer, 3,  0xad, 0xbe, 0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1153
  // test Remove end
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1154
  buffer = Buffer (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1155
  ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1156
  buffer.RemoveAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1157
  ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1158
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1159
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1160
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1161
  i.WriteU8 (0xab);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1162
  i.WriteU8 (0xac);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1163
  ENSURE_WRITTEN_BYTES (buffer, 6, 0, 0, 0, 0, 0xab, 0xac);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1164
  buffer.RemoveAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1165
  ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0xab);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1166
  buffer.RemoveAtEnd (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1167
  ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1168
  buffer.AddAtEnd (6);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1169
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1170
  i.Next (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1171
  i.WriteU8 (0xac);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1172
  i.WriteU8 (0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1173
  i.WriteU8 (0xae);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1174
  i.WriteU8 (0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1175
  i.WriteU8 (0xba);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1176
  i.WriteU8 (0xbb);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1177
  ENSURE_WRITTEN_BYTES (buffer, 8, 0, 0, 0xac, 0xad, 0xae, 0xaf, 0xba, 0xbb);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1178
  buffer.AddAtStart (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1179
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1180
  i.WriteU8 (0x30);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1181
  i.WriteU8 (0x31);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1182
  i.WriteU8 (0x32);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1183
  ENSURE_WRITTEN_BYTES (buffer, 11, 0x30, 0x31, 0x32, 0, 0, 0xac, 0xad, 0xae, 0xaf, 0xba, 0xbb);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1184
  buffer.RemoveAtEnd (9);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1185
  ENSURE_WRITTEN_BYTES (buffer, 2, 0x30, 0x31);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1186
  buffer = Buffer (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1187
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1188
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1189
  i.Next (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1190
  i.WriteHtonU16 (0xabcd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1191
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1192
  buffer.Begin ().WriteU8 (0x21);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1193
  ENSURE_WRITTEN_BYTES (buffer, 6, 0x21, 0, 0, 0, 0xab, 0xcd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1194
  buffer.RemoveAtEnd (8);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1195
  if (buffer.GetSize () != 0) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1196
    {
943
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1197
      result = false;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1198
    }
436
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1199
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1200
  buffer = Buffer (6);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1201
  buffer.AddAtStart (9);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1202
  buffer.AddAtEnd (3);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1203
  i = buffer.End ();
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1204
  i.Prev (1);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1205
  i.WriteU8 (1, 1);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1206
780
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1207
  buffer = Buffer (6);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1208
  buffer.AddAtStart (3);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1209
  buffer.RemoveAtEnd (8);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1210
  buffer.AddAtEnd (4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1211
  i = buffer.End ();
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1212
  i.Prev (4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1213
  i.WriteU8 (1, 4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1214
898
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1215
  buffer = Buffer (1);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1216
  buffer.AddAtEnd (100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1217
  i = buffer.End ();
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1218
  i.Prev (100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1219
  i.WriteU8 (1, 100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1220
1471
267e2ebc28e4 make Buffer::m_end really represent the end of the data rather than its size
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1470
diff changeset
  1221
#if 0
1468
9e55ab1bac62 add failing testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1467
diff changeset
  1222
  buffer = Buffer (10);  
1469
6927ae233f2e add testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1468
diff changeset
  1223
  ENSURE_WRITTEN_BYTES (buffer, 10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
1468
9e55ab1bac62 add failing testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1467
diff changeset
  1224
  buffer.Begin ().WriteU8 (1);
9e55ab1bac62 add failing testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1467
diff changeset
  1225
  ENSURE_WRITTEN_BYTES (buffer, 10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
1471
267e2ebc28e4 make Buffer::m_end really represent the end of the data rather than its size
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1470
diff changeset
  1226
#endif
1468
9e55ab1bac62 add failing testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1467
diff changeset
  1227
943
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1228
  // Bug #54
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1229
  {
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1230
    const uint32_t actualSize = 72602;
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1231
    const uint32_t chunkSize = 67624;
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1232
    UniformVariable bytesRng (0, 256);
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1233
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1234
    Buffer inputBuffer;
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1235
    Buffer outputBuffer;
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1236
    
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1237
    inputBuffer.AddAtEnd (actualSize);
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1238
    {
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1239
      Buffer::Iterator iter = inputBuffer.Begin ();
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1240
      for (uint32_t i = 0; i < actualSize; i++)
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1241
        iter.WriteU8 (static_cast<uint8_t> (bytesRng.GetValue ()));
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1242
    }
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1243
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1244
    outputBuffer.AddAtEnd (chunkSize);
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1245
    Buffer::Iterator iter = outputBuffer.End ();
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1246
    iter.Prev (chunkSize);
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1247
    iter.Write (inputBuffer.PeekData (), chunkSize);
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1248
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1249
    NS_TEST_ASSERT (memcmp (inputBuffer.PeekData (), outputBuffer.PeekData (), chunkSize) == 0);
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1250
  }
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1251
ee1433c176f8 Buffer::Iterator::Write (buffer, size) should have a uint32_t parameter, not
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 898
diff changeset
  1252
  return result;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1253
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1254
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1255
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1256
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
  1257
static BufferTest gBufferTest;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1258
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
  1259
} // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1260
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1261
#endif /* RUN_SELF_TESTS */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1262
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1263