src/common/buffer.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Sun, 31 Jan 2010 19:18:38 +0100
changeset 5930 f449711db53c
parent 5842 e5571955464f
child 5938 69bcae35bc81
permissions -rw-r--r--
don't call ostream::write too often.
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"
4708
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
    23
#include "ns3/fatal-error.h"
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
    24
#include "ns3/test.h"
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
    25
#include "ns3/random-variable.h"
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
    26
#include <iomanip>
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#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
    28
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
    29
NS_LOG_COMPONENT_DEFINE ("Buffer");
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    31
#define LOG_INTERNAL_STATE(y)                                                                    \
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    32
NS_LOG_LOGIC (y << "start="<<m_start<<", end="<<m_end<<", zero start="<<m_zeroAreaStart<<              \
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    33
          ", zero end="<<m_zeroAreaEnd<<", count="<<m_data->m_count<<", size="<<m_data->m_size<<   \
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    34
          ", dirty start="<<m_data->m_dirtyStart<<", dirty end="<<m_data->m_dirtyEnd)
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    35
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    36
#ifdef BUFFER_HEURISTICS
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    37
#define HEURISTICS(x) x
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    38
#else
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    39
#define HEURISTICS(x)
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    40
#endif
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    41
5930
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    42
namespace {
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    43
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    44
static struct Zeroes
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    45
{
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    46
  Zeroes ()
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    47
    : size (1000)
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    48
  {
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    49
    memset (buffer, 0, size);
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    50
  }
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    51
  char buffer[1000];
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    52
  const uint32_t size;
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    53
} g_zeroes;
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    54
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    55
}
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
    56
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
    57
//#define PRINT_STATS 1
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    58
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
    59
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    61
/**
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    62
 * 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
    63
 * 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
    64
 *
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    65
 * 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
    66
 * 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
    67
 * 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
    68
 * 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
    69
 * "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
    70
 * 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
    71
 * 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
    72
 * 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
    73
 * 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
    74
 */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    75
struct BufferData {
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    76
  /* 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
    77
   * 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
    78
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    79
  uint32_t m_count;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    80
  /* 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
    81
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    82
  uint32_t m_size;
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    83
  /* offset from the start of the m_data field below to the
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    84
   * start of the area in which user bytes were written.
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    85
   */
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    86
  uint32_t m_dirtyStart;
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    87
  /* offset from the start of the m_data field below to the
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    88
   * end of the area in which user bytes were written.
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    89
   */
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    90
  uint32_t m_dirtyEnd;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
    91
  /* 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
    92
   * 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
    93
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    94
  uint8_t m_data[1];
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    95
};
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
    96
typedef std::vector<struct BufferData*> BufferDataList;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    98
static struct BufferData *BufferAllocate (uint32_t reqSize);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
    99
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   100
static void BufferDeallocate (struct BufferData *data);
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
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   103
} // namespace ns3
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   104
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   105
namespace ns3 {
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   106
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   107
#ifdef BUFFER_HEURISTICS
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   108
/* The following macros are pretty evil but they are needed to allow us to
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   109
 * keep track of 3 possible states for the g_freeList variable:
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   110
 *  - uninitialized means that no one has created a buffer yet
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   111
 *    so no one has created the associated free list (it is created
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   112
 *    on-demand when the first buffer is created)
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   113
 *  - initialized means that the free list exists and is valid
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   114
 *  - destroyed means that the static destructors of this compilation unit
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   115
 *    have run so, the free list has been cleared from its content
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   116
 * The key is that in destroyed state, we are careful not re-create it
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   117
 * which is a typical weakness of lazy evaluation schemes which use 
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   118
 * '0' as a special value to indicate both un-initialized and destroyed.
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   119
 * Note that it is important to use '0' as the marker for un-initialized state
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   120
 * because the variable holding this state information is initialized to zero
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   121
 * which the compiler assigns to zero-memory which is initialized to _zero_
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   122
 * before the constructors run so this ensures perfect handling of crazy 
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   123
 * constructor orderings.
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   124
 */
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   125
#define MAGIC_DESTROYED (~(long) 0)
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   126
#define IS_UNINITIALIZED(x) (x == (BufferDataList*)0)
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   127
#define IS_DESTROYED(x) (x == (BufferDataList*)MAGIC_DESTROYED)
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   128
#define IS_INITIALIZED(x) (!IS_UNINITIALIZED(x) && !IS_DESTROYED(x))
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   129
#define DESTROYED ((BufferDataList*)MAGIC_DESTROYED)
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   130
#define UNINITIALIZED ((BufferDataList*)0)
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   131
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
   132
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
   133
static uint64_t g_nAddRealloc = 0;
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   134
static BufferDataList *g_freeList = 0;
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   135
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
   136
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
   137
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
   138
#endif /* BUFFER_HEURISTICS */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   139
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   140
static struct LocalStaticDestructor {
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   141
  LocalStaticDestructor(void)
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   142
  {
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   143
#ifdef PRINT_STATS
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   144
#ifdef BUFFER_HEURISTICS
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   145
    double efficiency;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   146
    efficiency = g_nAllocs;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   147
    efficiency /= g_nCreates;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   148
    std::cout <<"buffer free list efficiency="<<efficiency<<" (lower is better)" << std::endl;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   149
    std::cout <<"buffer free list max size="<<g_maxSize<<std::endl;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   150
    std::cout <<"buffer free list recommended start="<<g_recommendedStart<<std::endl;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   151
    double addEfficiency;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   152
    addEfficiency = g_nAddRealloc;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   153
    addEfficiency /= g_nAddNoRealloc;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   154
    std::cout <<"buffer add efficiency=" << addEfficiency << " (lower is better)"<<std::endl;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   155
    //std::cout <<"n add reallocs="<< g_nAddRealloc << std::endl;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   156
    //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
   157
#endif /* BUFFER_HEURISTICS */
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   158
#endif /* PRINT_STATS */
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   159
    if (IS_INITIALIZED(g_freeList))
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   160
      {
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   161
        for (BufferDataList::iterator i = g_freeList->begin ();
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   162
             i != g_freeList->end (); i++)
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   163
          {
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   164
            BufferDeallocate (*i);
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   165
          }
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   166
        delete g_freeList;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   167
        g_freeList = DESTROYED;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   168
      }
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   169
  }
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   170
} g_localStaticDestructor;
957
426b85bab45f fix bug 57
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 943
diff changeset
   171
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   172
struct BufferData *
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   173
BufferAllocate (uint32_t reqSize)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   175
  if (reqSize == 0) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   176
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   177
      reqSize = 1;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   178
    }
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   179
  NS_ASSERT (reqSize >= 1);
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   180
  uint32_t size = reqSize - 1 + sizeof (struct BufferData);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   181
  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
   182
  struct BufferData *data = reinterpret_cast<struct BufferData*>(b);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   183
  data->m_size = reqSize;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   184
  data->m_count = 1;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   185
  return data;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
void
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   189
BufferDeallocate (struct BufferData *data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   191
  NS_ASSERT (data->m_count == 0);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   192
  uint8_t *buf = reinterpret_cast<uint8_t *> (data);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   193
  delete [] buf;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
}
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   195
#ifdef BUFFER_HEURISTICS
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
void
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   197
Buffer::Recycle (struct BufferData *data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   198
{
286
57e6a2006962 convert use of <cassert> to "ns3/assert.h"
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
   199
  NS_ASSERT (data->m_count == 0);
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   200
  NS_ASSERT (!IS_UNINITIALIZED(g_freeList));
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   201
  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
   202
  /* feed into free list */
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   203
  if (data->m_size < g_maxSize ||
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   204
      IS_DESTROYED(g_freeList) ||
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   205
      g_freeList->size () > 1000)
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   206
    {
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   207
      BufferDeallocate (data);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   208
    }
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   209
  else
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   210
    {
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   211
      NS_ASSERT (IS_INITIALIZED(g_freeList));
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   212
      g_freeList->push_back (data);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   213
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   216
BufferData *
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   217
Buffer::Create (uint32_t dataSize)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   219
  /* 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
   220
  g_nCreates++;
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   221
  if (IS_UNINITIALIZED(g_freeList))
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   222
    {
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   223
      g_freeList = new BufferDataList ();
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   224
    }
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   225
  else if (IS_INITIALIZED(g_freeList))
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   226
    {
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   227
      while (!g_freeList->empty ()) 
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   228
        {
5261
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   229
          struct BufferData *data = g_freeList->back ();
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   230
          g_freeList->pop_back ();
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   231
          if (data->m_size >= dataSize) 
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   232
            {
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   233
              data->m_count = 1;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   234
              return data;
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   235
            }
7ccbdea36ec8 allow --check --valgrind to pass again
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4708
diff changeset
   236
          BufferDeallocate (data);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   237
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   238
    }
1485
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   239
  g_nAllocs++;
e63e2538ba33 print some statistics about free list efficiency
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1481
diff changeset
   240
  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
   241
  NS_ASSERT (data->m_count == 1);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   242
  return data;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
#else
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
void
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   246
Buffer::Recycle (struct BufferData *data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   248
  NS_ASSERT (data->m_count == 0);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   249
  BufferDeallocate (data);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   252
BufferData *
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   253
Buffer::Create (uint32_t size)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   255
  return BufferAllocate (size);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
#endif
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
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
   259
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
   260
{
3160
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   261
  NS_LOG_FUNCTION (this);
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   262
  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
   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
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   265
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
   266
{
3160
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   267
  NS_LOG_FUNCTION (this << dataSize);
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   268
  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
   269
}
d3f2aacbc1d7 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
bool
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   272
Buffer::CheckInternalState (void) const
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   273
{
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   274
  bool offsetsOk = 
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   275
    m_start <= m_zeroAreaStart &&
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   276
    m_zeroAreaStart <= m_zeroAreaEnd &&
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   277
    m_zeroAreaEnd <= m_end;
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   278
  bool dirtyOk =
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   279
    m_start >= m_data->m_dirtyStart &&
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   280
    m_end <= m_data->m_dirtyEnd;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   281
  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
   282
    m_start <= m_data->m_size &&
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   283
    m_zeroAreaStart <= m_data->m_size;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   284
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   285
  bool ok = m_data->m_count > 0 && offsetsOk && dirtyOk && internalSizeOk;
3160
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   286
  if (!ok)
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   287
    {
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   288
      LOG_INTERNAL_STATE ("check " << this << 
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   289
                          ", " << (offsetsOk?"true":"false") << 
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   290
                          ", " << (dirtyOk?"true":"false") << 
3160
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   291
                          ", " << (internalSizeOk?"true":"false") << " ");
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   292
    }
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   293
  return ok;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   294
}
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   295
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   296
void
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   297
Buffer::Initialize (uint32_t zeroSize)
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   298
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   299
  NS_LOG_FUNCTION (this << zeroSize);
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   300
  m_data = Buffer::Create (0);
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   301
#ifdef BUFFER_HEURISTICS
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   302
  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
   303
  m_maxZeroAreaStart = m_start;
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   304
#else
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   305
  m_start = 0;
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   306
#endif /* BUFFER_HEURISTICS */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   307
  m_zeroAreaStart = m_start;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   308
  m_zeroAreaEnd = m_zeroAreaStart + zeroSize;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   309
  m_end = m_zeroAreaEnd;
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   310
  m_data->m_dirtyStart = m_start;
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   311
  m_data->m_dirtyEnd = m_end;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   312
  NS_ASSERT (CheckInternalState ());
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   313
}
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
   314
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   315
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
   316
  : m_data (o.m_data),
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   317
#ifdef BUFFER_HEURISTICS
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   318
    m_maxZeroAreaStart (o.m_zeroAreaStart),
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   319
#endif
1473
6c6af702f501 add Buffer::m_zeroAreaStart
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1471
diff changeset
   320
    m_zeroAreaStart (o.m_zeroAreaStart),
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   321
    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
   322
    m_start (o.m_start),
1470
34de85128b54 Buffer::m_size -> Buffer::m_end
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1469
diff changeset
   323
    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
   324
{
3160
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   325
  NS_LOG_FUNCTION (this << &o);
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
   326
  m_data->m_count++;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   327
  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
   328
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   329
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   330
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
   331
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
   332
{
3160
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   333
  NS_LOG_FUNCTION (this << &o);
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   334
  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
   335
  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
   336
    {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   337
      // 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
   338
      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
   339
      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
   340
        {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   341
          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
   342
        }
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   343
      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
   344
      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
   345
    }
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   346
  HEURISTICS (
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   347
  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
   348
  m_maxZeroAreaStart = o.m_maxZeroAreaStart;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   349
  );
1473
6c6af702f501 add Buffer::m_zeroAreaStart
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1471
diff changeset
   350
  m_zeroAreaStart = o.m_zeroAreaStart;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   351
  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
   352
  m_start = o.m_start;
1470
34de85128b54 Buffer::m_size -> Buffer::m_end
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1469
diff changeset
   353
  m_end = o.m_end;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   354
  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
   355
  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
   356
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   357
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   358
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
   359
{
3160
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   360
  NS_LOG_FUNCTION (this);
ef81365d0a68 more logging code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3158
diff changeset
   361
  NS_ASSERT (CheckInternalState ());
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   362
  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
   363
  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
   364
  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
   365
    {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   366
      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
   367
    }
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   368
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   369
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   370
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
   371
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
   372
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   373
  NS_ASSERT (CheckInternalState ());
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   374
  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
   375
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   376
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   377
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
   378
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
   379
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   380
  NS_ASSERT (CheckInternalState ());
1463
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   381
  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
   382
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   383
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
   384
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
   385
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   386
  NS_ASSERT (CheckInternalState ());
1463
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   387
  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
   388
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   389
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   390
uint32_t
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   391
Buffer::GetInternalSize (void) const
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
  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
   394
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   395
uint32_t
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   396
Buffer::GetInternalEnd (void) const
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
  return m_end - (m_zeroAreaEnd - m_zeroAreaStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   399
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   400
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   401
bool
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   402
Buffer::AddAtStart (uint32_t start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   403
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   404
  NS_LOG_FUNCTION (this << start);
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   405
  bool dirty;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   406
  NS_ASSERT (CheckInternalState ());
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   407
  bool isDirty = m_data->m_count > 1 && m_start > m_data->m_dirtyStart;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   408
  if (m_start >= start && !isDirty)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   409
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   410
      /* enough space in the buffer and not dirty. 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   411
       * To add: |..|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   412
       * Before: |*****---------***|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   413
       * After:  |***..---------***|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   414
       */
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   415
      NS_ASSERT (m_data->m_count == 1 || m_start == m_data->m_dirtyStart);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   416
      m_start -= start;
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   417
      dirty = m_start > m_data->m_dirtyStart;
3180
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   418
      // update dirty area
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   419
      m_data->m_dirtyStart = m_start;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   420
      HEURISTICS (g_nAddNoRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   421
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   422
  else
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   423
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   424
      uint32_t newSize = GetInternalSize () + start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   425
      struct BufferData *newData = Buffer::Create (newSize);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   426
      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
   427
      m_data->m_count--;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   428
      if (m_data->m_count == 0)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   429
        {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   430
          Buffer::Recycle (m_data);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   431
        }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   432
      m_data = newData;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   433
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   434
      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
   435
      m_start += delta;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   436
      m_zeroAreaStart += delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   437
      m_zeroAreaEnd += delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   438
      m_end += delta;
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   439
      m_start -= start;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   440
3180
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   441
      // update dirty area
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   442
      m_data->m_dirtyStart = m_start;
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   443
      m_data->m_dirtyEnd = m_end;
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   444
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   445
      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
   446
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   447
      HEURISTICS (g_nAddRealloc++);
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   448
    }
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   449
  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
   450
  LOG_INTERNAL_STATE ("add start=" << start << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   451
  NS_ASSERT (CheckInternalState ());
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   452
  return dirty;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   453
}
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   454
bool
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   455
Buffer::AddAtEnd (uint32_t end)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   456
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   457
  NS_LOG_FUNCTION (this << end);
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   458
  bool dirty;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   459
  NS_ASSERT (CheckInternalState ());
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   460
  bool isDirty = m_data->m_count > 1 && m_end < m_data->m_dirtyEnd;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   461
  if (GetInternalEnd () + end <= m_data->m_size && !isDirty)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   462
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   463
      /* enough space in buffer and not dirty
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   464
       * Add:    |...|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   465
       * Before: |**----*****|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   466
       * After:  |**----...**|
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   467
       */
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   468
      NS_ASSERT (m_data->m_count == 1 || m_end == m_data->m_dirtyEnd);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   469
      m_end += end;
3180
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   470
      // update dirty area.
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   471
      m_data->m_dirtyEnd = m_end;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   472
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   473
      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
   474
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   475
      HEURISTICS (g_nAddNoRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   476
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   477
  else
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   478
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   479
      uint32_t newSize = GetInternalSize () + end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   480
      struct BufferData *newData = Buffer::Create (newSize);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   481
      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
   482
      m_data->m_count--;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   483
      if (m_data->m_count == 0) 
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
          Buffer::Recycle (m_data);
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
      m_data = newData;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   488
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   489
      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
   490
      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
   491
      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
   492
      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
   493
      m_start += delta;
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   494
      m_end += end;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   495
3180
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   496
      // update dirty area
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   497
      m_data->m_dirtyStart = m_start;
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   498
      m_data->m_dirtyEnd = m_end;
b69d00a3d410 new Packet testcases, bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3170
diff changeset
   499
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   500
      dirty = true;
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   501
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   502
      HEURISTICS (g_nAddRealloc++);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   503
    } 
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   504
  HEURISTICS (m_maxZeroAreaStart = std::max (m_maxZeroAreaStart, m_zeroAreaStart));
1504
36ecc970ba96 checkpoint debug to log
Craig Dowell <craigdo@ee.washington.edu>
parents: 1491
diff changeset
   505
  LOG_INTERNAL_STATE ("add end=" << end << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   506
  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
   507
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   508
  return dirty;
1486
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
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   511
void
2992
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   512
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
   513
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   514
  NS_LOG_FUNCTION (this << &o);
3060
5a49ba9ad976 bug 179: Packet fragmentation bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3035
diff changeset
   515
  if (m_data->m_count == 1 &&
5a49ba9ad976 bug 179: Packet fragmentation bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3035
diff changeset
   516
      m_end == m_zeroAreaEnd &&
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   517
      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
   518
      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
   519
      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
   520
    {
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   521
      /**
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   522
       * 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
   523
       * 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
   524
       * 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
   525
       */
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   526
      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
   527
      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
   528
      m_end = m_zeroAreaEnd;
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   529
      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
   530
      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
   531
      AddAtEnd (endData);
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   532
      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
   533
      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
   534
      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
   535
      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
   536
      dst.Write (src, o.End ());
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   537
      NS_ASSERT (CheckInternalState ());
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   538
      return;
2993
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
   539
    }
3060
5a49ba9ad976 bug 179: Packet fragmentation bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3035
diff changeset
   540
2992
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   541
  Buffer dst = CreateFullCopy ();
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   542
  Buffer src = o.CreateFullCopy ();
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   543
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   544
  dst.AddAtEnd (src.GetSize ());
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   545
  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
   546
  destStart.Prev (src.GetSize ());
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   547
  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
   548
  *this = dst;
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   549
  NS_ASSERT (CheckInternalState ());
2992
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   550
}
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   551
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2991
diff changeset
   552
void 
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   553
Buffer::RemoveAtStart (uint32_t start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   554
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   555
  NS_LOG_FUNCTION (this << start);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   556
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   557
  uint32_t newStart = m_start + start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   558
  if (newStart <= m_zeroAreaStart)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   559
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   560
      /* only remove start of buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   561
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   562
      m_start = newStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   563
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   564
  else if (newStart <= m_zeroAreaEnd)
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
      /* 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
   567
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   568
      uint32_t delta = newStart - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   569
      m_start = m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   570
      m_zeroAreaEnd -= delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   571
      m_end -= delta;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   572
    } 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   573
  else if (newStart <= m_end)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   574
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   575
      /* 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
   576
       * of end of buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   577
       */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   578
      NS_ASSERT (m_end >= start);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   579
      uint32_t zeroSize = m_zeroAreaEnd - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   580
      m_start = newStart - zeroSize;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   581
      m_end -= zeroSize;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   582
      m_zeroAreaStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   583
      m_zeroAreaEnd = m_start;
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
  else 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   586
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   587
      /* remove all buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   588
      m_end -= m_zeroAreaEnd - m_zeroAreaStart;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   589
      m_start = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   590
      m_zeroAreaEnd = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   591
      m_zeroAreaStart = m_end;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   592
    }
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   593
  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
   594
  LOG_INTERNAL_STATE ("rem start=" << start << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   595
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   596
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   597
void 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   598
Buffer::RemoveAtEnd (uint32_t end)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   599
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   600
  NS_LOG_FUNCTION (this << end);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   601
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   602
  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
   603
  if (newEnd > m_zeroAreaEnd)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   604
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   605
      /* remove part of end of buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   606
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   607
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   608
  else if (newEnd > m_zeroAreaStart)
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
      /* remove end of buffer, part of zero area */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   611
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   612
      m_zeroAreaEnd = newEnd;
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
  else if (newEnd > m_start)
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   615
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   616
      /* 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
   617
      m_end = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   618
      m_zeroAreaEnd = newEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   619
      m_zeroAreaStart = newEnd;
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
  else
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
      /* remove all buffer */
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   624
      m_end = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   625
      m_zeroAreaEnd = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   626
      m_zeroAreaStart = m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   627
    }
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   628
  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
   629
  LOG_INTERNAL_STATE ("rem end=" << end << ", ");
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   630
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   631
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   632
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   633
Buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   634
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
   635
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   636
  NS_LOG_FUNCTION (this << start << length);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   637
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   638
  Buffer tmp = *this;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   639
  tmp.RemoveAtStart (start);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   640
  tmp.RemoveAtEnd (GetSize () - (start + length));
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   641
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   642
  return tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   643
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   644
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   645
Buffer 
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   646
Buffer::CreateFullCopy (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   647
{
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   648
  NS_LOG_FUNCTION (this);
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   649
  NS_ASSERT (CheckInternalState ());
2991
9a3ed582d153 kill unused code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2792
diff changeset
   650
  if (m_zeroAreaEnd - m_zeroAreaStart != 0) 
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   651
    {
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   652
      Buffer tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   653
      tmp.AddAtStart (m_zeroAreaEnd - m_zeroAreaStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   654
      tmp.Begin ().WriteU8 (0, m_zeroAreaEnd - m_zeroAreaStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   655
      uint32_t dataStart = m_zeroAreaStart - m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   656
      tmp.AddAtStart (dataStart);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   657
      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
   658
      uint32_t dataEnd = m_end - m_zeroAreaEnd;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   659
      tmp.AddAtEnd (dataEnd);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   660
      Buffer::Iterator i = tmp.End ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   661
      i.Prev (dataEnd);
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   662
      i.Write (m_data->m_data+m_zeroAreaStart,dataEnd);
3158
2a4305eeca93 add logging
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3060
diff changeset
   663
      NS_ASSERT (tmp.CheckInternalState ());
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   664
      return tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   665
    }
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   666
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   667
  return *this;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   668
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   669
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   670
int32_t 
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   671
Buffer::GetCurrentStartOffset (void) const
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   672
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   673
  return m_start;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   674
}
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   675
int32_t 
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   676
Buffer::GetCurrentEndOffset (void) const
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   677
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   678
  return m_end;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   679
}
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   680
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   681
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   682
void
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   683
Buffer::TransformIntoRealBuffer (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   684
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   685
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   686
  Buffer tmp = CreateFullCopy ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   687
  *const_cast<Buffer *> (this) = tmp;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   688
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   689
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   690
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   691
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   692
uint8_t const*
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   693
Buffer::PeekData (void) const
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   694
{
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   695
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   696
  TransformIntoRealBuffer ();
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   697
  NS_ASSERT (CheckInternalState ());
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   698
  return m_data->m_data + m_start;
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   699
}
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   700
4518
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4442
diff changeset
   701
void
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4442
diff changeset
   702
Buffer::CopyData(std::ostream *os, uint32_t size) const
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4442
diff changeset
   703
{
4708
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   704
  if (size > 0)
4518
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4442
diff changeset
   705
    {
4708
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   706
      uint32_t tmpsize = std::min (m_zeroAreaStart-m_start, size);
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   707
      os->write((const char*)(m_data->m_data + m_start), tmpsize);
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   708
      if (size > tmpsize) 
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   709
        { 
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   710
          size -= m_zeroAreaStart-m_start;
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   711
          tmpsize = std::min (m_zeroAreaEnd - m_zeroAreaStart, size);
5930
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
   712
          uint32_t left = tmpsize;
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
   713
          while (left > 0)
4708
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   714
            {
5930
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
   715
              uint32_t toWrite = std::min (left, g_zeroes.size);
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
   716
              os->write (g_zeroes.buffer, toWrite);
f449711db53c don't call ostream::write too often.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
   717
              left -= toWrite;
4708
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   718
            }
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   719
          if (size > tmpsize)
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   720
            {
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   721
              size -= tmpsize;
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   722
              tmpsize = std::min (m_end - m_zeroAreaEnd, size);
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   723
              os->write ((const char*)(m_data->m_data + m_zeroAreaStart), tmpsize); 
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   724
            }
4518
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4442
diff changeset
   725
        }
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4442
diff changeset
   726
    }
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4442
diff changeset
   727
}
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 4442
diff changeset
   728
1486
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   729
/******************************************************
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   730
 *            The buffer iterator below.
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   731
 ******************************************************/
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   732
43183ec86826 move around Iterator code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1485
diff changeset
   733
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   734
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
   735
  : 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
   736
    m_zeroEnd (0),
1465
752e84e2f00a rewrite Iterator::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1464
diff changeset
   737
    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
   738
    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
   739
    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
   740
    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
   741
{}
1463
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   742
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
   743
{
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   744
  Construct (buffer);
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   745
  m_current = m_dataStart;
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   746
}
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   747
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
   748
{
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   749
  Construct (buffer);
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   750
  m_current = m_dataEnd;
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   751
}
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   752
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   753
void
0df6c4ff3c9e add a m_dataStart member in Buffer::Iterator
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1462
diff changeset
   754
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
   755
{
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   756
  m_zeroStart = buffer->m_zeroAreaStart;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   757
  m_zeroEnd = buffer->m_zeroAreaEnd;
1467
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   758
  m_dataStart = buffer->m_start;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   759
  m_dataEnd = buffer->m_end;
1467
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   760
  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
   761
}
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
   762
d3f2aacbc1d7 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
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
   764
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
   765
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   766
  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
   767
  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
   768
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   769
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
   770
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
   771
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   772
  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
   773
  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
   774
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   775
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
   776
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
   777
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   778
  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
   779
  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
   780
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   781
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
   782
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
   783
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   784
  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
   785
  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
   786
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   787
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
   788
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
   789
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   790
  NS_ASSERT (m_data == o.m_data);
1464
0d52ddfda61b simplify Iterator::GetDistanceFrom method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1463
diff changeset
   791
  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
   792
  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
   793
    {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   794
      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
   795
    }
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   796
  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
   797
    {
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   798
      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
   799
    }
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   800
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   801
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   802
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
   803
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
   804
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   805
  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
   806
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   807
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
   808
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
   809
{
1465
752e84e2f00a rewrite Iterator::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1464
diff changeset
   810
  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
   811
}
d3f2aacbc1d7 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
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   813
bool 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   814
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
   815
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   816
  bool ok = true;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   817
  for (uint32_t i = start; i < end; i++)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   818
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   819
      if (!Check (i))
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   820
        {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   821
          ok = false;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   822
        }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   823
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   824
  return ok;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   825
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   826
bool 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   827
Buffer::Iterator::Check (uint32_t i) const
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   828
{
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   829
  return i >= m_dataStart && 
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1489
diff changeset
   830
    !(i >= m_zeroStart && i < m_zeroEnd) &&
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   831
    i <= m_dataEnd;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   832
}
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   833
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   834
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
   835
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
   836
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
   837
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   838
  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
   839
  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
   840
  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
   841
  NS_ASSERT (start.m_zeroEnd == end.m_zeroEnd);
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
   842
  NS_ASSERT (m_data != start.m_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
   843
  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
   844
  Iterator cur = start;
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   845
  for (uint32_t i = 0; i < size; i++)
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   846
    {
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   847
      uint8_t data = cur.ReadU8 ();
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   848
      WriteU8 (data);
17fa70cfbe12 get rid of GetIndex
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1466
diff changeset
   849
    }
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
   850
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   851
d3f2aacbc1d7 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
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
   853
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
   854
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   855
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   856
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   857
  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
   858
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   859
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
   860
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
   861
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   862
  WriteU8 (data & 0xff);
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
  WriteU8 (data & 0xff);
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
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   867
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   868
  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
   869
}
d3f2aacbc1d7 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
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
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
   872
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   873
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   874
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   875
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   876
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   877
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   878
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   879
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   880
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   881
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   882
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   883
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   884
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   885
  WriteU8 (data & 0xff);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   886
  data >>= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   887
  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
   888
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   889
void 
2792
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   890
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
   891
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   892
  WriteU8 ((data >> 0) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   893
  WriteU8 ((data >> 8) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   894
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   895
void 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   896
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
   897
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   898
  WriteU8 ((data >> 0) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   899
  WriteU8 ((data >> 8) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   900
  WriteU8 ((data >> 16) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   901
  WriteU8 ((data >> 24) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   902
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   903
void 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   904
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
   905
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   906
  WriteU8 ((data >> 0) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   907
  WriteU8 ((data >> 8) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   908
  WriteU8 ((data >> 16) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   909
  WriteU8 ((data >> 24) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   910
  WriteU8 ((data >> 32) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   911
  WriteU8 ((data >> 40) & 0xff);
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   912
  WriteU8 ((data >> 48) & 0xff);
4442
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
   913
  WriteU8 ((data >> 56) & 0xff);
2792
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   914
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   915
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
   916
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
   917
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
   918
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   919
  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
   920
  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
   921
}
d3f2aacbc1d7 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
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
   923
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
   924
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   925
  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
   926
  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
   927
  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
   928
  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
   929
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   930
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
   931
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
   932
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   933
  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
   934
  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
   935
  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
   936
  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
   937
  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
   938
  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
   939
  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
   940
  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
   941
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   942
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
   943
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
   944
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   945
  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
   946
    {
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   947
      WriteU8 (buffer[i]);
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   948
    }
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
   949
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   950
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   951
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
   952
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
   953
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   954
  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
   955
  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
   956
  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
   957
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   958
  data |= byte0;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   959
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   960
  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
   961
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   962
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
   963
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
   964
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   965
  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
   966
  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
   967
  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
   968
  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
   969
  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
   970
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   971
  data |= byte2;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   972
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   973
  data |= byte1;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   974
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   975
  data |= byte0;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   976
  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
   977
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
   978
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
   979
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
   980
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   981
  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
   982
  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
   983
  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
   984
  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
   985
  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
   986
  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
   987
  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
   988
  uint8_t byte7 = ReadU8 ();
4442
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
   989
  uint64_t data = byte7;
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   990
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   991
  data |= byte6;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   992
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   993
  data |= byte5;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   994
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   995
  data |= byte4;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   996
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   997
  data |= byte3;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   998
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
   999
  data |= byte2;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1000
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1001
  data |= byte1;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1002
  data <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1003
  data |= byte0;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1004
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1005
  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
  1006
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
  1007
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
  1008
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
  1009
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
  1010
  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
  1011
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1012
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1013
  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
  1014
  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
  1015
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
  1016
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
  1017
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
  1018
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
  1019
  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
  1020
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1021
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1022
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1023
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1024
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1025
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1026
  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
  1027
  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
  1028
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
  1029
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
  1030
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
  1031
{
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
  1032
  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
  1033
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1034
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1035
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1036
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1037
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1038
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1039
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1040
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1041
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1042
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1043
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1044
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1045
  retval |= ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1046
  retval <<= 8;
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1047
  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
  1048
  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
  1049
}
2792
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1050
uint16_t 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1051
Buffer::Iterator::ReadLsbtohU16 (void)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1052
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1053
  uint8_t byte0 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1054
  uint8_t byte1 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1055
  uint16_t data = byte1;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1056
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1057
  data |= byte0;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1058
  return data;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1059
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1060
uint32_t 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1061
Buffer::Iterator::ReadLsbtohU32 (void)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1062
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1063
  uint8_t byte0 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1064
  uint8_t byte1 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1065
  uint8_t byte2 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1066
  uint8_t byte3 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1067
  uint32_t data = byte3;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1068
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1069
  data |= byte2;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1070
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1071
  data |= byte1;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1072
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1073
  data |= byte0;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1074
  return data;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1075
}
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1076
uint64_t 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1077
Buffer::Iterator::ReadLsbtohU64 (void)
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1078
{
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1079
  uint8_t byte0 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1080
  uint8_t byte1 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1081
  uint8_t byte2 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1082
  uint8_t byte3 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1083
  uint8_t byte4 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1084
  uint8_t byte5 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1085
  uint8_t byte6 = ReadU8 ();
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1086
  uint8_t byte7 = ReadU8 ();
4442
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1087
  uint64_t data = byte7;
2792
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1088
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1089
  data |= byte6;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1090
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1091
  data |= byte5;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1092
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1093
  data |= byte4;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1094
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1095
  data |= byte3;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1096
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1097
  data |= byte2;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1098
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1099
  data |= byte1;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1100
  data <<= 8;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1101
  data |= byte0;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1102
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1103
  return data;
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1504
diff changeset
  1104
}
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
  1105
void 
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1106
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
  1107
{
1466
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1108
  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
  1109
    {
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1110
      buffer[i] = ReadU8 ();
ca3c9b62937d re-implement all Iterator::Write and Iterator::Read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1465
diff changeset
  1111
    }
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
  1112
}
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1137
diff changeset
  1113
3363
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1114
uint16_t
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1115
Buffer::Iterator::CalculateIpChecksum(uint16_t size)
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1116
{
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1117
  return CalculateIpChecksum(size, 0);
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1118
}
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1119
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1120
uint16_t
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1121
Buffer::Iterator::CalculateIpChecksum(uint16_t size, uint32_t initialChecksum)
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1122
{
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1123
  /* see RFC 1071 to understand this code. */
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1124
  uint32_t sum = initialChecksum;
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1125
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1126
  for (int j = 0; j < size/2; j++)
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1127
    sum += ReadU16 ();
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1128
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1129
  if (size & 1)
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1130
     sum += ReadU8 ();
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1131
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1132
  while (sum >> 16)
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1133
    sum = (sum & 0xffff) + (sum >> 16);
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1134
  return ~sum;
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1135
}
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3180
diff changeset
  1136
3404
b5d4a04c7b68 bug 247: tcp checksum crashes when enabled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3363
diff changeset
  1137
uint32_t 
b5d4a04c7b68 bug 247: tcp checksum crashes when enabled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3363
diff changeset
  1138
Buffer::Iterator::GetSize (void) const
b5d4a04c7b68 bug 247: tcp checksum crashes when enabled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3363
diff changeset
  1139
{
b5d4a04c7b68 bug 247: tcp checksum crashes when enabled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3363
diff changeset
  1140
  return m_dataEnd - m_dataStart;
b5d4a04c7b68 bug 247: tcp checksum crashes when enabled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3363
diff changeset
  1141
}
b5d4a04c7b68 bug 247: tcp checksum crashes when enabled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3363
diff changeset
  1142
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1143
//-----------------------------------------------------------------------------
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1144
// Unit tests
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1145
//-----------------------------------------------------------------------------
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1146
class BufferTest: public TestCase {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1147
private:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1148
  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
  1149
public:
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1150
  virtual bool DoRun (void);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1151
  BufferTest ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1152
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1153
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
BufferTest::BufferTest ()
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1156
  : TestCase ("Buffer") {}
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1157
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1158
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 110
diff changeset
  1159
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
  1160
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1161
  bool success = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1162
  uint8_t *expected = array;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1163
  uint8_t const*got;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1164
  got = b.PeekData ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1165
  for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1166
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1167
      if (got[j] != expected[j]) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1168
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1169
          success = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1170
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1171
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1172
  if (!success) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1173
    {
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1174
      std::ostringstream failure;
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1175
      failure << "Buffer -- ";
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1176
      failure << "expected: n=";
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1177
      failure << n << ", ";
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1178
      failure.setf (std::ios::hex, std::ios::basefield);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1179
      for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1180
        {
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1181
          failure << (uint16_t)expected[j] << " ";
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1182
        }
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1183
      failure.setf (std::ios::dec, std::ios::basefield);
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1184
      failure << "got: ";
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1185
      failure.setf (std::ios::hex, std::ios::basefield);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1186
      for (uint32_t j = 0; j < n; j++) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1187
        {
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1188
          failure << (uint16_t)got[j] << " ";
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1189
        }
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1190
      failure << std::endl;
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1191
      ReportTestFailure ("", "", "", failure.str(), __FILE__, __LINE__);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1192
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1193
  return success;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1194
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1195
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1196
/* Note: works only when variadic macros are
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1197
 * available which is the case for gcc.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1198
 * XXX
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1199
 */
134
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1200
#define ENSURE_WRITTEN_BYTES(buffer, n, ...)     \
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1201
  {                                              \
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1202
  uint8_t bytes[] = {__VA_ARGS__};             \
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1203
  if (!EnsureWrittenBytes (buffer, n , bytes)) \
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1204
    {                                          \
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1205
      SetErrorStatus (false);                  \
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1206
    }                                          \
134
150a7ff4f780 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 131
diff changeset
  1207
  }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1208
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1209
bool
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1210
BufferTest::DoRun (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1211
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1212
  Buffer buffer;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1213
  Buffer::Iterator i;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1214
  buffer.AddAtStart (6);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1215
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1216
  i.WriteU8 (0x66);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1217
  ENSURE_WRITTEN_BYTES (buffer, 1, 0x66);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1218
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1219
  i.WriteU8 (0x67);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1220
  ENSURE_WRITTEN_BYTES (buffer, 1, 0x67);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1221
  i.WriteHtonU16 (0x6568);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1222
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1223
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x67, 0x65, 0x68);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1224
  i.WriteHtonU16 (0x6369);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1225
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x63, 0x69, 0x68);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1226
  i.WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1227
  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
  1228
  buffer.AddAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1229
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1230
  i.WriteU16 (0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1231
  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
  1232
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1233
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1234
  i.Next (8);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1235
  i.WriteU16 (0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1236
  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
  1237
  buffer.RemoveAtStart (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1238
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1239
  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
  1240
  buffer.RemoveAtEnd (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1241
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1242
  ENSURE_WRITTEN_BYTES (buffer, 3, 0x69, 0xde, 0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1243
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1244
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1245
  i.WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1246
  ENSURE_WRITTEN_BYTES (buffer, 4, 0xff, 0x69, 0xde, 0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1247
  buffer.AddAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1248
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1249
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1250
  i.WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1251
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1252
  uint16_t saved = i.ReadU16 ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1253
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1254
  i.WriteHtonU16 (0xff00);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1255
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1256
  if (i.ReadNtohU16 () != 0xff00) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1257
    {
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1258
      SetErrorStatus (false);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1259
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1260
  i.Prev (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1261
  i.WriteU16 (saved);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1262
  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
  1263
  Buffer o = buffer;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1264
  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
  1265
  o.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1266
  i = o.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1267
  i.WriteU8 (0xfe);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1268
  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
  1269
  buffer.AddAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1270
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1271
  i.WriteU8 (0xfd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1272
  i.WriteU8 (0xfd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1273
  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
  1274
  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
  1275
4442
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1276
  // test 64-bit read/write
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1277
  Buffer buff64;
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1278
  buff64.AddAtStart(8);
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1279
  i = buff64.Begin();
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1280
  i.WriteU64 (0x0123456789ABCDEFllu);
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1281
  ENSURE_WRITTEN_BYTES (buff64, 8, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01);
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1282
  i = buff64.Begin();
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1283
  if (i.ReadLsbtohU64() != 0x0123456789abcdefllu)
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1284
    {
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1285
      SetErrorStatus (false);
4442
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1286
    }
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1287
  i = buff64.Begin();
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1288
  i.WriteHtolsbU64 (0x0123456789ABCDEFllu);
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1289
  ENSURE_WRITTEN_BYTES (buff64, 8, 0xef, 0xcd, 0xab, 0x89, 0x67, 0x45, 0x23, 0x01);
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1290
  i = buff64.Begin();
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1291
  if (i.ReadLsbtohU64() != 0x0123456789abcdefllu)
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1292
    {
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1293
      SetErrorStatus (false);
4442
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1294
    }
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1295
  i = buff64.Begin();
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1296
  i.WriteHtonU64 (0x0123456789ABCDEFllu);
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1297
  ENSURE_WRITTEN_BYTES (buff64, 8, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef);
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1298
  i = buff64.Begin();
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1299
  if (i.ReadNtohU64() != 0x0123456789abcdefllu)
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1300
    {
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1301
      SetErrorStatus (false);
4442
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1302
    }
9491c5faaec6 test and fix Buffer::Iterator::WriteHtolsbU64, Buffer::Iterator::ReadU64 , Buffer::Iterator::ReadLsbtohU64
Adrian S.-W. Tam <adrian.sw.tam@gmail.com>
parents: 3404
diff changeset
  1303
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1304
  // test self-assignment
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1305
  {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1306
      Buffer a = o;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1307
      a = a;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1308
  }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1309
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1310
  // test Remove start.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1311
  buffer = Buffer (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1312
  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
  1313
  buffer.RemoveAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1314
  ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1315
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1316
  buffer.Begin ().WriteU8 (0xff);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1317
  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
  1318
  buffer.RemoveAtStart(3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1319
  ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1320
  buffer.AddAtStart (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1321
  buffer.Begin ().WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1322
  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
  1323
  buffer.RemoveAtStart (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1324
  ENSURE_WRITTEN_BYTES (buffer, 4,  0xbe, 0xaf, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1325
  buffer.AddAtEnd (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1326
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1327
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1328
  i.WriteHtonU32 (0xdeadbeaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1329
  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
  1330
  buffer.RemoveAtStart (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1331
  ENSURE_WRITTEN_BYTES (buffer, 3,  0xad, 0xbe, 0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1332
  // test Remove end
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1333
  buffer = Buffer (5);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1334
  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
  1335
  buffer.RemoveAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1336
  ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1337
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1338
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1339
  i.Next (4);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1340
  i.WriteU8 (0xab);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1341
  i.WriteU8 (0xac);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1342
  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
  1343
  buffer.RemoveAtEnd (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1344
  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
  1345
  buffer.RemoveAtEnd (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1346
  ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1347
  buffer.AddAtEnd (6);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1348
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1349
  i.Next (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1350
  i.WriteU8 (0xac);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1351
  i.WriteU8 (0xad);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1352
  i.WriteU8 (0xae);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1353
  i.WriteU8 (0xaf);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1354
  i.WriteU8 (0xba);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1355
  i.WriteU8 (0xbb);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1356
  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
  1357
  buffer.AddAtStart (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1358
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1359
  i.WriteU8 (0x30);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1360
  i.WriteU8 (0x31);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1361
  i.WriteU8 (0x32);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1362
  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
  1363
  buffer.RemoveAtEnd (9);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1364
  ENSURE_WRITTEN_BYTES (buffer, 2, 0x30, 0x31);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1365
  buffer = Buffer (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1366
  buffer.AddAtEnd (2);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1367
  i = buffer.Begin ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1368
  i.Next (3);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1369
  i.WriteHtonU16 (0xabcd);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1370
  buffer.AddAtStart (1);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1371
  buffer.Begin ().WriteU8 (0x21);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1372
  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
  1373
  buffer.RemoveAtEnd (8);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1374
  if (buffer.GetSize () != 0) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1375
    {
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1376
      SetErrorStatus (false);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
  1377
    }
436
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1378
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1379
  buffer = Buffer (6);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1380
  buffer.AddAtStart (9);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1381
  buffer.AddAtEnd (3);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1382
  i = buffer.End ();
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1383
  i.Prev (1);
e3223ddba0fb a new testcase with the corresponding bug fix.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 286
diff changeset
  1384
  i.WriteU8 (1, 1);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1385
780
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1386
  buffer = Buffer (6);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1387
  buffer.AddAtStart (3);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1388
  buffer.RemoveAtEnd (8);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1389
  buffer.AddAtEnd (4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1390
  i = buffer.End ();
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1391
  i.Prev (4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1392
  i.WriteU8 (1, 4);
2f41ca72e8c6 add test and fix buggy assert
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 436
diff changeset
  1393
898
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1394
  buffer = Buffer (1);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1395
  buffer.AddAtEnd (100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1396
  i = buffer.End ();
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1397
  i.Prev (100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1398
  i.WriteU8 (1, 100);
712651f08bd5 add testcase, fix bug
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
  1399
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
  1400
  // 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
  1401
  {
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
  1402
    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
  1403
    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
  1404
    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
  1405
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
  1406
    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
  1407
    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
  1408
    
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
  1409
    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
  1410
    {
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
  1411
      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
  1412
      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
  1413
        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
  1414
    }
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
  1415
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
  1416
    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
  1417
    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
  1418
    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
  1419
    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
  1420
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1421
    NS_TEST_EXPECT_MSG_EQ (memcmp (inputBuffer.PeekData (), outputBuffer.PeekData (), chunkSize), 0, "memcp works");
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
  1422
  }
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
  1423
2993
a975a534915c optimize case where fake payload is fragmented and re-assembled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2992
diff changeset
  1424
  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
  1425
  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
  1426
  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
  1427
  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
  1428
  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
  1429
  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
  1430
  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
  1431
  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
  1432
  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
  1433
  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
  1434
  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
  1435
  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
  1436
  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
  1437
  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
  1438
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1439
  return GetErrorStatus ();
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1440
}
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1441
//-----------------------------------------------------------------------------
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1442
class BufferTestSuite : public TestSuite
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1443
{
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1444
public:
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1445
  BufferTestSuite ();
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1446
};
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1447
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1448
BufferTestSuite::BufferTestSuite ()
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1449
  : TestSuite ("buffer", UNIT)
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1450
{
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1451
  AddTestCase (new BufferTest);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1452
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1453
5328
77172366f83b buffer test suite ported
Pavel Boyko <boyko@iitp.ru>
parents: 5261
diff changeset
  1454
BufferTestSuite g_bufferTestSuite;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1455
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
  1456
} // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1457
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
  1458