src/common/buffer.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 23 Apr 2008 09:11:55 -0700
changeset 3032 77a8e808c341
parent 3031 c34e9d31a75d
child 3035 644bfc099992
permissions -rw-r--r--
add adjustment report to overloaded Buffer::AddAtEnd method
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
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   336
int32_t
1486
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
{
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   339
  int32_t delta;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   340
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   341
  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
   342
  if (m_start >= start && !isDirty)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   343
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   344
      /* enough space in the buffer and not dirty. 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   345
       * To add: |..|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   346
       * Before: |*****---------***|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   347
       * After:  |***..---------***|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   348
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   349
      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
   350
      m_start -= start;
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   351
      delta = 0;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   352
      HEURISTICS (g_nAddNoRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   353
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   354
  else
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
      uint32_t newSize = GetInternalSize () + start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   357
      struct BufferData *newData = Buffer::Create (newSize);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   358
      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
   359
      m_data->m_count--;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   360
      if (m_data->m_count == 0)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   361
        {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   362
          Buffer::Recycle (m_data);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   363
        }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   364
      m_data = newData;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   365
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   366
      delta = start - m_start;
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   367
      m_start += delta;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   368
      m_zeroAreaStart += delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   369
      m_zeroAreaEnd += delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   370
      m_end += delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   371
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   372
      m_start -= start;
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   373
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   374
      HEURISTICS (g_nAddRealloc++);
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   375
    }
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   376
  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
   377
  // update dirty area
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   378
  m_data->m_dirtyStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   379
  m_data->m_dirtyEnd = m_end;
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
   380
  LOG_INTERNAL_STATE ("add start=" << start << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   381
  NS_ASSERT (CheckInternalState ());
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   382
  return delta;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   383
}
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   384
int32_t
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   385
Buffer::AddAtEnd (uint32_t end)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   386
{
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   387
  int32_t delta;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   388
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   389
  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
   390
  if (GetInternalEnd () + end <= m_data->m_size && !isDirty)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   391
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   392
      /* enough space in buffer and not dirty
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   393
       * Add:    |...|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   394
       * Before: |**----*****|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   395
       * After:  |**----...**|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   396
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   397
      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
   398
      m_end += end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   399
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   400
      delta = 0;
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   401
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   402
      HEURISTICS (g_nAddNoRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   403
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   404
  else
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   405
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   406
      uint32_t newSize = GetInternalSize () + end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   407
      struct BufferData *newData = Buffer::Create (newSize);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   408
      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
   409
      m_data->m_count--;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   410
      if (m_data->m_count == 0) 
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
          Buffer::Recycle (m_data);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   413
        }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   414
      m_data = newData;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   415
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   416
      delta = -m_start;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   417
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   418
      m_zeroAreaStart += delta;
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   419
      m_zeroAreaEnd += delta;
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   420
      m_end += delta;
3031
c34e9d31a75d make the code more consistent across AddAtStart and AddAtEnd
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3030
diff changeset
   421
      m_start += delta;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   422
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   423
      m_end += end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   424
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   425
      HEURISTICS (g_nAddRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   426
    } 
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   427
  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
   428
  // update dirty area
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   429
  m_data->m_dirtyStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   430
  m_data->m_dirtyEnd = m_end;
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
   431
  LOG_INTERNAL_STATE ("add end=" << end << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   432
  NS_ASSERT (CheckInternalState ());
3030
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   433
7cfe0542dff5 report the adjustment delta in Buffer::AddAtEnd and Buffer::AddAtStart.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3029
diff changeset
   434
  return delta;
1486
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
3032
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3031
diff changeset
   437
int32_t
2992
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   438
Buffer::AddAtEnd (const Buffer &o)
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   439
{
3032
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3031
diff changeset
   440
  int32_t orgStart = m_start;
2993
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   441
  if (m_end == m_zeroAreaEnd &&
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   442
      o.m_start == o.m_zeroAreaStart &&
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   443
      o.m_zeroAreaEnd - o.m_zeroAreaStart > 0)
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   444
    {
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   445
      /**
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   446
       * This is an optimization which kicks in when
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   447
       * we attempt to aggregate two buffers which contain
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   448
       * adjacent zero areas.
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   449
       */
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   450
      uint32_t zeroSize = o.m_zeroAreaEnd - o.m_zeroAreaStart;
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   451
      m_zeroAreaEnd += zeroSize;
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   452
      m_end = m_zeroAreaEnd;
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   453
      uint32_t endData = o.m_end - o.m_zeroAreaEnd;
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   454
      AddAtEnd (endData);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   455
      Buffer::Iterator dst = End ();
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   456
      dst.Prev (endData);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   457
      Buffer::Iterator src = o.End ();
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   458
      src.Prev (endData);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   459
      dst.Write (src, o.End ());
3032
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3031
diff changeset
   460
      return m_start - orgStart;
2993
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   461
    }
2992
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   462
  Buffer dst = CreateFullCopy ();
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   463
  Buffer src = o.CreateFullCopy ();
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   464
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   465
  dst.AddAtEnd (src.GetSize ());
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   466
  Buffer::Iterator destStart = dst.End ();
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   467
  destStart.Prev (src.GetSize ());
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   468
  destStart.Write (src.Begin (), src.End ());
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   469
  *this = dst;
3032
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3031
diff changeset
   470
  return m_start - orgStart;
2992
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   471
}
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   472
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   473
void 
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   474
Buffer::RemoveAtStart (uint32_t start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   475
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   476
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   477
  uint32_t newStart = m_start + start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   478
  if (newStart <= m_zeroAreaStart)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   479
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   480
      /* only remove start of buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   481
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   482
      m_start = newStart;
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_zeroAreaEnd)
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 _and_ start of zero area
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   487
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   488
      uint32_t delta = newStart - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   489
      m_start = m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   490
      m_zeroAreaEnd -= delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   491
      m_end -= delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   492
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   493
  else if (newStart <= m_end)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   494
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   495
      /* 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
   496
       * of end of buffer 
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
      NS_ASSERT (m_end >= start);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   499
      uint32_t zeroSize = m_zeroAreaEnd - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   500
      m_start = newStart - zeroSize;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   501
      m_end -= zeroSize;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   502
      m_zeroAreaStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   503
      m_zeroAreaEnd = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   504
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   505
  else 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   506
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   507
      /* remove all buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   508
      m_end -= m_zeroAreaEnd - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   509
      m_start = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   510
      m_zeroAreaEnd = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   511
      m_zeroAreaStart = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   512
    }
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   513
  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
   514
  LOG_INTERNAL_STATE ("rem start=" << start << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   515
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   516
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   517
void 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   518
Buffer::RemoveAtEnd (uint32_t end)
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
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   521
  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
   522
  if (newEnd > m_zeroAreaEnd)
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
      /* remove part of end of buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   525
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   526
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   527
  else if (newEnd > m_zeroAreaStart)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   528
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   529
      /* remove end of buffer, part of zero area */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   530
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   531
      m_zeroAreaEnd = newEnd;
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
  else if (newEnd > m_start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   534
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   535
      /* 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
   536
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   537
      m_zeroAreaEnd = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   538
      m_zeroAreaStart = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   539
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   540
  else
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
      /* remove all buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   543
      m_end = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   544
      m_zeroAreaEnd = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   545
      m_zeroAreaStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   546
    }
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   547
  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
   548
  LOG_INTERNAL_STATE ("rem end=" << end << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   549
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   550
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   551
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   552
Buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   553
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
   554
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   555
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   556
  Buffer tmp = *this;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   557
  tmp.RemoveAtStart (start);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   558
  tmp.RemoveAtEnd (GetSize () - (start + length));
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   559
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   560
  return tmp;
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
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   563
Buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   564
Buffer::CreateFullCopy (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   565
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   566
  NS_ASSERT (CheckInternalState ());
2991
9a3ed582d153 kill unused code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2792
diff changeset
   567
  if (m_zeroAreaEnd - m_zeroAreaStart != 0) 
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   568
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   569
      Buffer tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   570
      tmp.AddAtStart (m_zeroAreaEnd - m_zeroAreaStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   571
      tmp.Begin ().WriteU8 (0, m_zeroAreaEnd - m_zeroAreaStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   572
      uint32_t dataStart = m_zeroAreaStart - m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   573
      tmp.AddAtStart (dataStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   574
      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
   575
      uint32_t dataEnd = m_end - m_zeroAreaEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   576
      tmp.AddAtEnd (dataEnd);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   577
      Buffer::Iterator i = tmp.End ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   578
      i.Prev (dataEnd);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   579
      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
   580
      return tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   581
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   582
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   583
  return *this;
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
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   586
void
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   587
Buffer::TransformIntoRealBuffer (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   588
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   589
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   590
  Buffer tmp = CreateFullCopy ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   591
  *const_cast<Buffer *> (this) = tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   592
  NS_ASSERT (CheckInternalState ());
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
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   596
uint8_t const*
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   597
Buffer::PeekData (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   598
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   599
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   600
  TransformIntoRealBuffer ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   601
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   602
  return m_data->m_data + m_start;
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
/******************************************************
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   606
 *            The buffer iterator below.
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
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   609
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
   610
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
   611
  : 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
   612
    m_zeroEnd (0),
1465
752e84e2f00a rewrite Iterator::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1464
diff changeset
   613
    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
   614
    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
   615
    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
   616
    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
   617
{}
1463
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   618
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
   619
{
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   620
  Construct (buffer);
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   621
  m_current = m_dataStart;
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   622
}
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   623
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
   624
{
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   625
  Construct (buffer);
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   626
  m_current = m_dataEnd;
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
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   629
void
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   630
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
   631
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   632
  m_zeroStart = buffer->m_zeroAreaStart;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   633
  m_zeroEnd = buffer->m_zeroAreaEnd;
1467
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   634
  m_dataStart = buffer->m_start;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   635
  m_dataEnd = buffer->m_end;
1467
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   636
  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
   637
}
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
   638
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
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
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
   641
{
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
  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
   643
  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
   644
}
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
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
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
   647
{
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
  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
   649
  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
   650
}
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
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
   652
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
   653
{
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
  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
   655
  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
   656
}
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
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
   658
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
   659
{
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
  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
   661
  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
   662
}
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
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
   664
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
   665
{
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
   666
  NS_ASSERT (m_data == o.m_data);
1464
0d52ddfda61b simplify Iterator::GetDistanceFrom method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1463
diff changeset
   667
  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
   668
  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
   669
    {
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
      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
   671
    }
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
  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
   673
    {
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
      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
   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
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
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
   679
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
   680
{
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
  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
   682
}
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
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
   684
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
   685
{
1465
752e84e2f00a rewrite Iterator::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1464
diff changeset
   686
  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
   687
}
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
   688
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   689
bool 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   690
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
   691
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   692
  bool ok = true;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   693
  for (uint32_t i = start; i < end; i++)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   694
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   695
      if (!Check (i))
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   696
        {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   697
          ok = false;
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
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   700
  return ok;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   701
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   702
bool 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   703
Buffer::Iterator::Check (uint32_t i) const
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   704
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   705
  return i >= m_dataStart && 
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   706
    !(i >= m_zeroStart && i < m_zeroEnd) &&
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   707
    i <= m_dataEnd;
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
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   710
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
   711
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
   712
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
   713
{
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_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
   715
  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
   716
  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
   717
  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
   718
  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
   719
  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
   720
  Iterator cur = start;
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   721
  for (uint32_t i = 0; i < size; i++)
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   722
    {
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   723
      uint8_t data = cur.ReadU8 ();
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   724
      WriteU8 (data);
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   725
    }
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
   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
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
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
   729
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
   730
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   731
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   732
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   733
  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
   734
}
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
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
   736
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
   737
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   738
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   739
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   740
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   741
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   742
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   743
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   744
  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
   745
}
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
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
   747
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
   748
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   749
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   750
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   751
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   752
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   753
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   754
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   755
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   756
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   757
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   758
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   759
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   760
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   761
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   762
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   763
  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
   764
}
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
void 
2792
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   766
Buffer::Iterator::WriteHtolsbU16 (uint16_t data)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   767
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   768
  WriteU8 ((data >> 0) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   769
  WriteU8 ((data >> 8) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   770
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   771
void 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   772
Buffer::Iterator::WriteHtolsbU32 (uint32_t data)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   773
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   774
  WriteU8 ((data >> 0) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   775
  WriteU8 ((data >> 8) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   776
  WriteU8 ((data >> 16) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   777
  WriteU8 ((data >> 24) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   778
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   779
void 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   780
Buffer::Iterator::WriteHtolsbU64 (uint64_t data)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   781
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   782
  WriteU8 ((data >> 0) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   783
  WriteU8 ((data >> 8) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   784
  WriteU8 ((data >> 16) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   785
  WriteU8 ((data >> 24) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   786
  WriteU8 ((data >> 32) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   787
  WriteU8 ((data >> 40) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   788
  WriteU8 ((data >> 48) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   789
  WriteU8 ((data >> 54) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   790
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   791
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   792
void 
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
   793
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
   794
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   795
  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
   796
  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
   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
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
   799
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
   800
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   801
  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
   802
  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
   803
  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
   804
  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
   805
}
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
   806
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
   807
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
   808
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   809
  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
   810
  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
   811
  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
   812
  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
   813
  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
   814
  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
   815
  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
   816
  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
   817
}
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
   818
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
   819
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
   820
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   821
  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
   822
    {
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   823
      WriteU8 (buffer[i]);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   824
    }
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
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
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
   828
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
   829
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   830
  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
   831
  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
   832
  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
   833
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   834
  data |= byte0;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   835
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   836
  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
   837
}
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
   838
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
   839
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
   840
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   841
  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
   842
  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
   843
  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
   844
  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
   845
  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
   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
  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
   853
}
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
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
   855
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
   856
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   857
  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
   858
  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
   859
  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
   860
  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
   861
  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
   862
  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
   863
  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
   864
  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
   865
  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
   866
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   867
  data |= byte6;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   868
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   869
  data |= byte5;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   870
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   871
  data |= byte4;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   872
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   873
  data |= byte3;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   874
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   875
  data |= byte2;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   876
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   877
  data |= byte1;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   878
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   879
  data |= byte0;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   880
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   881
  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
   882
}
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
   883
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
   884
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
   885
{
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
   886
  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
   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 ();
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
   890
  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
   891
}
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
   892
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
   893
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
   894
{
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
   895
  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
   896
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   897
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   898
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   899
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   900
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   901
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   902
  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
   903
  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
   904
}
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
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
   906
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
   907
{
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
   908
  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
   909
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   910
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   911
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   912
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   913
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   914
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   915
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   916
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   917
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   918
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   919
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   920
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   921
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   922
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   923
  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
   924
  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
   925
}
2792
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   926
uint16_t 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   927
Buffer::Iterator::ReadLsbtohU16 (void)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   928
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   929
  uint8_t byte0 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   930
  uint8_t byte1 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   931
  uint16_t data = byte1;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   932
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   933
  data |= byte0;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   934
  return data;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   935
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   936
uint32_t 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   937
Buffer::Iterator::ReadLsbtohU32 (void)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   938
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   939
  uint8_t byte0 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   940
  uint8_t byte1 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   941
  uint8_t byte2 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   942
  uint8_t byte3 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   943
  uint32_t data = byte3;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   944
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   945
  data |= byte2;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   946
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   947
  data |= byte1;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   948
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   949
  data |= byte0;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   950
  return data;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   951
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   952
uint64_t 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   953
Buffer::Iterator::ReadLsbtohU64 (void)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   954
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   955
  uint8_t byte0 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   956
  uint8_t byte1 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   957
  uint8_t byte2 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   958
  uint8_t byte3 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   959
  uint8_t byte4 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   960
  uint8_t byte5 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   961
  uint8_t byte6 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   962
  uint8_t byte7 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   963
  uint32_t data = byte7;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   964
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   965
  data |= byte6;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   966
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   967
  data |= byte5;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   968
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   969
  data |= byte4;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   970
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   971
  data |= byte3;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   972
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   973
  data |= byte2;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   974
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   975
  data |= byte1;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   976
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   977
  data |= byte0;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   978
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   979
  return data;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   980
}
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
   981
void 
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   982
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
   983
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   984
  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
   985
    {
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   986
      buffer[i] = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   987
    }
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
   988
}
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
   989
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   990
#ifndef BUFFER_USE_INLINE
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   991
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   992
void 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   993
Buffer::Iterator::WriteU8  (uint8_t  data)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   994
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   995
  if (m_current < m_dataStart)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   996
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   997
      // XXX trying to write outside of data area
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   998
      NS_ASSERT (false);
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   999
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1000
  else if (m_current < m_zeroStart)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1001
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1002
      m_data[m_current] = data;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1003
      m_current++;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1004
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1005
  else if (m_current < m_zeroEnd)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1006
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1007
      // XXX trying to write in zero area
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1008
      NS_ASSERT (false);
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1009
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1010
  else if (m_current < m_dataEnd)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1011
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1012
      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
  1013
      m_current++;      
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1014
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1015
  else 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1016
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1017
      // XXX trying to write outside of data area
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1018
      NS_ASSERT (false);
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1019
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1020
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1021
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1022
void 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1023
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
  1024
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1025
  for (uint32_t i = 0; i < len; i++)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1026
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1027
      WriteU8 (data);
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1028
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1029
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1030
1489
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1031
uint8_t  
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1032
Buffer::Iterator::ReadU8 (void)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1033
{
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1034
  if (m_current < m_dataStart)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1035
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1036
      // XXX trying to read from outside of data area
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1037
      NS_ASSERT (false);
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1038
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1039
  else if (m_current < m_zeroStart)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1040
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1041
      uint8_t data = m_data[m_current];
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1042
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1043
      return data;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1044
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1045
  else if (m_current < m_zeroEnd)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1046
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1047
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1048
      return 0;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1049
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1050
  else if (m_current < m_dataEnd)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1051
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1052
      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
  1053
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1054
      return data;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1055
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1056
  else 
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1057
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1058
      // XXX trying to read from outside of data area
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1059
      NS_ASSERT (false);
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1060
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1061
  // to quiet compiler.
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1062
  return 0;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1063
}
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
  1064
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1065
#endif /* BUFFER_USE_INLINE */
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
  1066
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
  1067
} // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1068
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1069
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1070
#ifdef RUN_SELF_TESTS
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1071
14
6dd7d31c6fc3 replace yans include with ns3 include
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
  1072
#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
  1073
#include "ns3/random-variable.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1074
#include <iomanip>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1075
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
  1076
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
  1077
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1078
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1079
class BufferTest: public Test {
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1080
private:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1081
  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
  1082
public:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1083
  virtual bool RunTests (void);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1084
  BufferTest ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1085
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1086
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1087
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1088
BufferTest::BufferTest ()
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1089
  : Test ("Buffer") {}
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1090
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1091
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 110
diff changeset
  1092
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
  1093
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1094
  bool success = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1095
  uint8_t *expected = array;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1096
  uint8_t const*got;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1097
  got = b.PeekData ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1098
  for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1099
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1100
      if (got[j] != expected[j]) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1101
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1102
          success = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1103
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1104
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1105
  if (!success) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1106
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1107
      Failure () << "Buffer -- ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1108
      Failure () << "expected: n=";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1109
      Failure () << n << ", ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1110
      Failure ().setf (std::ios::hex, std::ios::basefield);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1111
      for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1112
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1113
          Failure () << (uint16_t)expected[j] << " ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1114
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1115
      Failure ().setf (std::ios::dec, std::ios::basefield);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1116
      Failure () << "got: ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1117
      Failure ().setf (std::ios::hex, std::ios::basefield);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1118
      for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1119
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1120
          Failure () << (uint16_t)got[j] << " ";
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1121
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1122
      Failure () << std::endl;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1123
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1124
  return success;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1125
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1126
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1127
/* Note: works only when variadic macros are
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1128
 * available which is the case for gcc.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1129
 * XXX
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1130
 */
134
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1131
#define ENSURE_WRITTEN_BYTES(buffer, n, ...)     \
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1132
  {                                              \
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1133
  uint8_t bytes[] = {__VA_ARGS__};             \
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1134
  if (!EnsureWrittenBytes (buffer, n , bytes)) \
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1135
    {                                          \
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
  1136
      result = false;                          \
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1137
    }                                          \
134
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1138
  }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1139
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1140
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 110
diff changeset
  1141
BufferTest::RunTests (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1142
{
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
  1143
  bool result = true;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1144
  Buffer buffer;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1145
  Buffer::Iterator i;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1146
  buffer.AddAtStart (6);
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.WriteU8 (0x66);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1149
  ENSURE_WRITTEN_BYTES (buffer, 1, 0x66);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1150
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1151
  i.WriteU8 (0x67);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1152
  ENSURE_WRITTEN_BYTES (buffer, 1, 0x67);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1153
  i.WriteHtonU16 (0x6568);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1154
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1155
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x67, 0x65, 0x68);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1156
  i.WriteHtonU16 (0x6369);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1157
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x63, 0x69, 0x68);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1158
  i.WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1159
  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
  1160
  buffer.AddAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1161
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1162
  i.WriteU16 (0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1163
  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
  1164
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1165
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1166
  i.Next (8);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1167
  i.WriteU16 (0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1168
  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
  1169
  buffer.RemoveAtStart (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1170
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1171
  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
  1172
  buffer.RemoveAtEnd (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1173
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1174
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x69, 0xde, 0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1175
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1176
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1177
  i.WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1178
  ENSURE_WRITTEN_BYTES (buffer, 4, 0xff, 0x69, 0xde, 0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1179
  buffer.AddAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1180
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1181
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1182
  i.WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1183
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1184
  uint16_t saved = i.ReadU16 ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1185
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1186
  i.WriteHtonU16 (0xff00);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1187
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1188
  if (i.ReadNtohU16 () != 0xff00) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1189
    {
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
  1190
      result = false;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1191
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1192
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1193
  i.WriteU16 (saved);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1194
  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
  1195
  Buffer o = buffer;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1196
  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
  1197
  o.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1198
  i = o.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1199
  i.WriteU8 (0xfe);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1200
  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
  1201
  buffer.AddAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1202
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1203
  i.WriteU8 (0xfd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1204
  i.WriteU8 (0xfd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1205
  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
  1206
  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
  1207
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1208
  // test self-assignment
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1209
  {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1210
      Buffer a = o;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1211
      a = a;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1212
  }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1213
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1214
  // test Remove start.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1215
  buffer = Buffer (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1216
  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
  1217
  buffer.RemoveAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1218
  ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1219
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1220
  buffer.Begin ().WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1221
  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
  1222
  buffer.RemoveAtStart(3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1223
  ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1224
  buffer.AddAtStart (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1225
  buffer.Begin ().WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1226
  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
  1227
  buffer.RemoveAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1228
  ENSURE_WRITTEN_BYTES (buffer, 4,  0xbe, 0xaf, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1229
  buffer.AddAtEnd (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1230
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1231
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1232
  i.WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1233
  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
  1234
  buffer.RemoveAtStart (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1235
  ENSURE_WRITTEN_BYTES (buffer, 3,  0xad, 0xbe, 0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1236
  // test Remove end
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1237
  buffer = Buffer (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1238
  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
  1239
  buffer.RemoveAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1240
  ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1241
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1242
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1243
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1244
  i.WriteU8 (0xab);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1245
  i.WriteU8 (0xac);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1246
  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
  1247
  buffer.RemoveAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1248
  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
  1249
  buffer.RemoveAtEnd (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1250
  ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1251
  buffer.AddAtEnd (6);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1252
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1253
  i.Next (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1254
  i.WriteU8 (0xac);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1255
  i.WriteU8 (0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1256
  i.WriteU8 (0xae);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1257
  i.WriteU8 (0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1258
  i.WriteU8 (0xba);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1259
  i.WriteU8 (0xbb);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1260
  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
  1261
  buffer.AddAtStart (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1262
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1263
  i.WriteU8 (0x30);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1264
  i.WriteU8 (0x31);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1265
  i.WriteU8 (0x32);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1266
  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
  1267
  buffer.RemoveAtEnd (9);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1268
  ENSURE_WRITTEN_BYTES (buffer, 2, 0x30, 0x31);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1269
  buffer = Buffer (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1270
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1271
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1272
  i.Next (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1273
  i.WriteHtonU16 (0xabcd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1274
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1275
  buffer.Begin ().WriteU8 (0x21);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1276
  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
  1277
  buffer.RemoveAtEnd (8);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1278
  if (buffer.GetSize () != 0) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1279
    {
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
  1280
      result = false;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1281
    }
436
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1282
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1283
  buffer = Buffer (6);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1284
  buffer.AddAtStart (9);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1285
  buffer.AddAtEnd (3);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1286
  i = buffer.End ();
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1287
  i.Prev (1);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1288
  i.WriteU8 (1, 1);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1289
780
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1290
  buffer = Buffer (6);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1291
  buffer.AddAtStart (3);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1292
  buffer.RemoveAtEnd (8);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1293
  buffer.AddAtEnd (4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1294
  i = buffer.End ();
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1295
  i.Prev (4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1296
  i.WriteU8 (1, 4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1297
898
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1298
  buffer = Buffer (1);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1299
  buffer.AddAtEnd (100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1300
  i = buffer.End ();
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1301
  i.Prev (100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1302
  i.WriteU8 (1, 100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1303
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
  1304
#if 0
1468
9e55ab1bac62 add failing testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1467
diff changeset
  1305
  buffer = Buffer (10);  
1469
6927ae233f2e add testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1468
diff changeset
  1306
  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
  1307
  buffer.Begin ().WriteU8 (1);
9e55ab1bac62 add failing testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1467
diff changeset
  1308
  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
  1309
#endif
1468
9e55ab1bac62 add failing testcase
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1467
diff changeset
  1310
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
  1311
  // 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
  1312
  {
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
  1313
    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
  1314
    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
  1315
    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
  1316
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
  1317
    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
  1318
    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
  1319
    
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
  1320
    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
  1321
    {
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
  1322
      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
  1323
      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
  1324
        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
  1325
    }
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
  1326
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
  1327
    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
  1328
    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
  1329
    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
  1330
    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
  1331
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
  1332
    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
  1333
  }
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
  1334
2993
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1335
  buffer = Buffer (5);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1336
  buffer.AddAtEnd (2);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1337
  i = buffer.End ();
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1338
  i.Prev (2);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1339
  i.WriteU8 (0);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1340
  i.WriteU8 (0x66);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1341
  ENSURE_WRITTEN_BYTES (buffer, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1342
  Buffer frag0 = buffer.CreateFragment (0, 2);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1343
  ENSURE_WRITTEN_BYTES (frag0, 2, 0x00, 0x00);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1344
  Buffer frag1 = buffer.CreateFragment (2, 5);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1345
  ENSURE_WRITTEN_BYTES (frag1, 5, 0x00, 0x00, 0x00, 0x00, 0x66);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1346
  frag0.AddAtEnd (frag1);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1347
  ENSURE_WRITTEN_BYTES (buffer, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1348
  ENSURE_WRITTEN_BYTES (frag0, 7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1349
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
  1350
  return result;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1351
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1352
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1353
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1354
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
  1355
static BufferTest gBufferTest;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1356
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
  1357
} // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1358
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1359
#endif /* RUN_SELF_TESTS */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1360
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1361