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