src/network/model/buffer.h
author Vedran Miletić <rivanvx@gmail.com>
Sat, 01 Sep 2012 20:57:21 +0200
changeset 9063 32755d0516f4
parent 8902 5bbb1fc26d0a
child 10624 8711242c4fe6
permissions -rw-r--r--
Bug 1237 - code cleanups related to includes
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: 1313
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
#ifndef BUFFER_H
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#define BUFFER_H
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include <stdint.h>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include <vector>
4518
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3404
diff changeset
    25
#include <ostream>
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
    26
#include "ns3/assert.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
    28
#define noBUFFER_FREE_LIST 1
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
    29
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
    30
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
/**
3182
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 3170
diff changeset
    33
 * \ingroup packet
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 3170
diff changeset
    34
 *
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
 * \brief automatically resized byte buffer
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
 * This represents a buffer of bytes. Its size is
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
 * automatically adjusted to hold any data prepended
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
 * or appended by the user. Its implementation is optimized
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
 * to ensure that the number of buffer resizes is minimized,
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
 * by creating new Buffers of the maximum size ever used.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
 * The correct maximum size is learned at runtime during use by 
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
 * recording the maximum size of each packet.
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    44
 *
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    45
 * \internal
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    46
 * The implementation of the Buffer class uses a COW (Copy On Write)
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    47
 * technique to ensure that the underlying data buffer which holds
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    48
 * the data bytes is shared among a lot of Buffer instances despite
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    49
 * data being added or removed from them.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    50
 *
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    51
 * When multiple Buffer instances hold a reference to the same 
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    52
 * underlying BufferData object, they must be able to detect when
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    53
 * the operation they want to perform should trigger a copy of the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    54
 * BufferData. If the BufferData::m_count field is one, it means that
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    55
 * there exist only one instance of Buffer which references the 
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    56
 * BufferData instance so, it is safe to modify it. It is also
3170
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    57
 * safe to modify the content of a BufferData if the modification
d3438b415a8c Undo changeset 3163 (breaks multicast)
Tom Henderson <tomh@tomh.org>
parents: 3163
diff changeset
    58
 * falls outside of the "dirty area" defined by the BufferData.
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    59
 * In every other case, the BufferData must be copied before
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    60
 * being modified.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    61
 *
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    62
 * To understand the way the Buffer::Add and Buffer::Remove methods
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    63
 * work, you first need to understand the "virtual offsets" used to
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    64
 * keep track of the content of buffers. Each Buffer instance
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    65
 * contains real data bytes in its BufferData instance but it also
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    66
 * contains "virtual zero data" which typically is used to represent
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    67
 * application-level payload. No memory is allocated to store the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    68
 * zero bytes of application-level payload unless the user fragments
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    69
 * a Buffer: this application-level payload is kept track of with
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    70
 * a pair of integers which describe where in the buffer content
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    71
 * the "virtual zero area" starts and ends.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    72
 *
8902
5bbb1fc26d0a Protect ascii art picture of Buffer layout.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7256
diff changeset
    73
 * \verbatim
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    74
 * ***: unused bytes
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    75
 * xxx: bytes "added" at the front of the zero area
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    76
 * ...: bytes "added" at the back of the zero area
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    77
 * 000: virtual zero bytes
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    78
 *
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    79
 * Real byte buffer:      |********xxxxxxxxxxxx.........*****|
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    80
 *                        |--------^ m_start
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    81
 *                        |-------------------^ m_zeroAreaStart
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    82
 *                        |-----------------------------^ m_end - (m_zeroAreaEnd - m_zeroAreaStart)
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    83
 * virtual byte buffer:           |xxxxxxxxxxxx0000000000000.........|
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    84
 *                        |--------^ m_start
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    85
 *                        |--------------------^ m_zeroAreaStart
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    86
 *                        |---------------------------------^ m_zeroAreaEnd
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    87
 *                        |------------------------------------------^ m_end
8902
5bbb1fc26d0a Protect ascii art picture of Buffer layout.
Peter D. Barnes, Jr. <barnes26@llnl.gov>
parents: 7256
diff changeset
    88
 * \endverbatim
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    89
 *
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
    90
 * A simple state invariant is that m_start <= m_zeroStart <= m_zeroEnd <= m_end
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
 */
2792
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1492
diff changeset
    92
class Buffer 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1492
diff changeset
    93
{
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
public:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    95
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    96
   * \brief iterator in a Buffer instance
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    97
   */
2792
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1492
diff changeset
    98
  class Iterator 
2854c5a3795b add Htolsb and Lsbtoh write/read methods
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1492
diff changeset
    99
  {
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   100
public:
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   101
    inline Iterator ();
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   102
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   103
     * go forward by one byte
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   104
     */
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   105
    inline void Next (void);
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   106
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   107
     * go backward by one byte
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   108
     */
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   109
    inline void Prev (void);
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   110
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   111
     * \param delta number of bytes to go forward
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   112
     */
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   113
    inline void Next (uint32_t delta);
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   114
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   115
     * \param delta number of bytes to go backward
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   116
     */
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   117
    inline void Prev (uint32_t delta);
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   118
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   119
     * \param o the second iterator
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   120
     * \return number of bytes included between the two iterators
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   121
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   122
     * This method works only if the two iterators point
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   123
     * to the same underlying buffer. Debug builds ensure
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   124
     * this with an assert.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   125
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   126
    uint32_t GetDistanceFrom (Iterator const &o) const;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   127
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   128
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   129
     * \return true if this iterator points to the end of the byte array.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   130
     *     false otherwise.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   131
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   132
    bool IsEnd (void) const;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   133
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   134
     * \return true if this iterator points to the start of the byte array.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   135
     *     false otherwise.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   136
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   137
    bool IsStart (void) const;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   139
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   140
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   141
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   142
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   143
     * by one byte.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   144
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   145
    inline void WriteU8 (uint8_t  data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   146
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   147
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   148
     * \param len number of times data must be written in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   149
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   150
     * Write the data in buffer len times and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   151
     * by len byte.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   152
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   153
    inline void WriteU8 (uint8_t data, uint32_t len);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   154
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   155
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   156
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   157
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   158
     * by two bytes. The format of the data written in the byte
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   159
     * buffer is non-portable. We only ensure that readU16 will
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   160
     * return exactly what we wrote with writeU16 if the program
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   161
     * is run on the same machine.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   162
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   163
    void WriteU16 (uint16_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   164
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   165
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   166
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   167
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   168
     * by four bytes. The format of the data written in the byte
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   169
     * buffer is non-portable. We only ensure that readU32 will
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   170
     * return exactly what we wrote with writeU32 if the program
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   171
     * is run on the same machine.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   172
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   173
    void WriteU32 (uint32_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   174
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   175
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   176
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   177
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   178
     * by eight bytes. The format of the data written in the byte
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   179
     * buffer is non-portable. We only ensure that readU64 will
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   180
     * return exactly what we wrote with writeU64 if the program
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   181
     * is run on the same machine.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   182
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   183
    void WriteU64 (uint64_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   184
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   185
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   186
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   187
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   188
     * by two bytes. The data is written in network order and the
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   189
     * input data is expected to be in host order.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   190
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   191
    void WriteHtolsbU16 (uint16_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   192
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   193
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   194
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   195
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   196
     * by four bytes. The data is written in least significant byte order and the
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   197
     * input data is expected to be in host order.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   198
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   199
    void WriteHtolsbU32 (uint32_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   200
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   201
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   202
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   203
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   204
     * by eight bytes. The data is written in least significant byte order and the
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   205
     * input data is expected to be in host order.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   206
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   207
    void WriteHtolsbU64 (uint64_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   208
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   209
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   210
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   211
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   212
     * by two bytes. The data is written in least significant byte order and the
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   213
     * input data is expected to be in host order.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   214
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   215
    inline void WriteHtonU16 (uint16_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   216
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   217
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   218
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   219
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   220
     * by four bytes. The data is written in network order and the
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   221
     * input data is expected to be in host order.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   222
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   223
    inline void WriteHtonU32 (uint32_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   224
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   225
     * \param data data to write in buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   226
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   227
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   228
     * by eight bytes. The data is written in network order and the
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   229
     * input data is expected to be in host order.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   230
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   231
    void WriteHtonU64 (uint64_t data);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   232
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   233
     * \param buffer a byte buffer to copy in the internal buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   234
     * \param size number of bytes to copy.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   235
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   236
     * Write the data in buffer and avance the iterator position
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   237
     * by size bytes.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   238
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   239
    void Write (uint8_t const*buffer, uint32_t size);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   240
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   241
     * \param start the start of the data to copy
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   242
     * \param end the end of the data to copy
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   243
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   244
     * Write the data delimited by start and end in internal buffer
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   245
     * and avance the iterator position by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   246
     * copied.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   247
     * The input interators _must_ not point to the same Buffer as
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   248
     * we do to avoid overlapping copies. This is enforced
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   249
     * in debug builds by asserts.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   250
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   251
    void Write (Iterator start, Iterator end);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   253
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   254
     * \return the byte read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   255
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   256
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   257
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   258
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   259
    inline uint8_t  ReadU8 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   260
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   261
     * \return the two bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   262
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   263
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   264
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   265
     * The data is read in the format written by writeU16.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   266
     */
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   267
    inline uint16_t ReadU16 (void);
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   268
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   269
     * \return the four bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   270
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   271
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   272
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   273
     * The data is read in the format written by writeU32.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   274
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   275
    uint32_t ReadU32 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   276
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   277
     * \return the eight bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   278
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   279
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   280
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   281
     * The data is read in the format written by writeU64.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   282
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   283
    uint64_t ReadU64 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   284
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   285
     * \return the two bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   286
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   287
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   288
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   289
     * The data is read in network format and return in host format.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   290
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   291
    inline uint16_t ReadNtohU16 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   292
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   293
     * \return the four bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   294
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   295
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   296
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   297
     * The data is read in network format and return in host format.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   298
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   299
    inline uint32_t ReadNtohU32 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   300
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   301
     * \return the eight bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   302
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   303
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   304
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   305
     * The data is read in network format and return in host format.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   306
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   307
    uint64_t ReadNtohU64 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   308
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   309
     * \return the two bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   310
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   311
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   312
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   313
     * The data is read in network format and return in host format.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   314
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   315
    uint16_t ReadLsbtohU16 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   316
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   317
     * \return the four bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   318
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   319
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   320
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   321
     * The data is read in network format and return in host format.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   322
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   323
    uint32_t ReadLsbtohU32 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   324
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   325
     * \return the eight bytes read in the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   326
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   327
     * Read data and advance the Iterator by the number of bytes
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   328
     * read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   329
     * The data is read in network format and return in host format.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   330
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   331
    uint64_t ReadLsbtohU64 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   332
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   333
     * \param buffer buffer to copy data into
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   334
     * \param size number of bytes to copy
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   335
     *
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   336
     * Copy size bytes of data from the internal buffer to the
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   337
     * input buffer and avance the Iterator by the number of
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   338
     * bytes read.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   339
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   340
    void Read (uint8_t *buffer, uint32_t size);
3363
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3182
diff changeset
   341
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   342
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   343
     * \brief Calculate the checksum.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   344
     * \param size size of the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   345
     * \return checksum
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   346
     */
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7182
diff changeset
   347
    uint16_t CalculateIpChecksum (uint16_t size);
3363
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3182
diff changeset
   348
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   349
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   350
     * \brief Calculate the checksum.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   351
     * \param size size of the buffer.
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   352
     * \param initialChecksum initial value
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   353
     * \return checksum
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   354
     */
7256
b04ba6772f8c rerun check-style.py at default level to enforce space after function name
Tom Henderson <tomh@tomh.org>
parents: 7182
diff changeset
   355
    uint16_t CalculateIpChecksum (uint16_t size, uint32_t initialChecksum);
3363
33d1ca2e4ba4 bug 236: add optional support for tcp and udp checksum.
Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
parents: 3182
diff changeset
   356
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   357
    /**
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   358
     * \returns the size of the underlying buffer we are iterating
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   359
     */
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   360
    uint32_t GetSize (void) const;
3404
b5d4a04c7b68 bug 247: tcp checksum crashes when enabled.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3365
diff changeset
   361
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   362
private:
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   363
    friend class Buffer;
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   364
    inline Iterator (Buffer const*buffer);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   365
    inline Iterator (Buffer const*buffer, bool);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   366
    inline void Construct (const Buffer *buffer);
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   367
    bool CheckNoZero (uint32_t start, uint32_t end) const;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   368
    bool Check (uint32_t i) const;
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   369
    uint16_t SlowReadNtohU16 (void);
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   370
    uint32_t SlowReadNtohU32 (void);
6396
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   371
    std::string GetReadErrorMessage (void) const;
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   372
    std::string GetWriteErrorMessage (void) const;
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   373
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   374
    /* offset in virtual bytes from the start of the data buffer to the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   375
     * start of the "virtual zero area".
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   376
     */
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   377
    uint32_t m_zeroStart;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   378
    /* offset in virtual bytes from the start of the data buffer to the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   379
     * end of the "virtual zero area".
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   380
     */
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   381
    uint32_t m_zeroEnd;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   382
    /* offset in virtual bytes from the start of the data buffer to the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   383
     * start of the data which can be read by this iterator
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   384
     */
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   385
    uint32_t m_dataStart;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   386
    /* offset in virtual bytes from the start of the data buffer to the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   387
     * end of the data which can be read by this iterator
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   388
     */
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   389
    uint32_t m_dataEnd;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   390
    /* offset in virtual bytes from the start of the data buffer to the
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   391
     * current position represented by this iterator.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   392
     */
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   393
    uint32_t m_current;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   394
    /* a pointer to the underlying byte buffer. All offsets are relative
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   395
     * to this pointer.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   396
     */
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   397
    uint8_t *m_data;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   398
  };
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   399
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   400
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   401
   * \return the number of bytes stored in this buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   402
   */
6132
cd1902faafb9 inline to optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6113
diff changeset
   403
  inline uint32_t GetSize (void) const;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   404
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   405
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   406
   * \return a pointer to the start of the internal 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   407
   * byte buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   408
   *
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   409
   * The returned pointer points to an area of
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   410
   * memory which is ns3::Buffer::GetSize () bytes big.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   411
   * Please, try to never ever use this method. It is really
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   412
   * evil and is present only for a few specific uses.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   413
   */
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   414
  uint8_t const*PeekData (void) const;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   415
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   416
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   417
   * \param start size to reserve
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   418
   * \returns true if the buffer needed resizing, false otherwise.
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   419
   *
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   420
   * Add bytes at the start of the Buffer. The
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   421
   * content of these bytes is undefined but debugging
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   422
   * builds initialize them to 0x33.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   423
   * Any call to this method invalidates any Iterator
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   424
   * pointing to this Buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   425
   */
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   426
  bool AddAtStart (uint32_t start);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   427
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   428
   * \param end size to reserve
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   429
   * \returns true if the buffer needed resizing, false otherwise.
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   430
   *
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   431
   * Add bytes at the end of the Buffer. The
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   432
   * content of these bytes is undefined but debugging
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   433
   * builds initialize them to 0x33.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   434
   * Any call to this method invalidates any Iterator
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   435
   * pointing to this Buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   436
   */
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   437
  bool AddAtEnd (uint32_t end);
2992
ba52f937610c move Packet::AddAtEnd implementation to the Buffer code.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 2792
diff changeset
   438
3032
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3030
diff changeset
   439
  /**
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3030
diff changeset
   440
   * \param o the buffer to append to the end of this buffer.
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3030
diff changeset
   441
   *
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3030
diff changeset
   442
   * Add bytes at the end of the Buffer.
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3030
diff changeset
   443
   * Any call to this method invalidates any Iterator
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3030
diff changeset
   444
   * pointing to this Buffer.
77a8e808c341 add adjustment report to overloaded Buffer::AddAtEnd method
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3030
diff changeset
   445
   */
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   446
  void AddAtEnd (const Buffer &o);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   447
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   448
   * \param start size to remove
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   449
   *
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   450
   * Remove bytes at the start of the Buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   451
   * Any call to this method invalidates any Iterator
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   452
   * pointing to this Buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   453
   */
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   454
  void RemoveAtStart (uint32_t start);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   455
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   456
   * \param end size to remove
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   457
   *
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   458
   * Remove bytes at the end of the Buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   459
   * Any call to this method invalidates any Iterator
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   460
   * pointing to this Buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   461
   */
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   462
  void RemoveAtEnd (uint32_t end);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   463
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   464
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   465
   * \param start offset from start of packet
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   466
   * \param length
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   467
   *
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   468
   * \return a fragment of size length starting at offset
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   469
   * start.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   470
   */
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   471
  Buffer CreateFragment (uint32_t start, uint32_t length) const;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   472
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   473
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   474
   * \return an Iterator which points to the
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   475
   * start of this Buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   476
   */
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   477
  inline Buffer::Iterator Begin (void) const;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   478
  /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   479
   * \return an Iterator which points to the
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   480
   * end of this Buffer.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   481
   */
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   482
  inline Buffer::Iterator End (void) const;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   483
1137
620b9f96c9e6 add Buffer::CreateFullCopy and make TransformInto private
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 957
diff changeset
   484
  Buffer CreateFullCopy (void) const;
823
467609e92a6b add more asserts, make TransformIntoRealBuffer public for Packet class
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 780
diff changeset
   485
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   486
  /**
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   487
   * \return the number of bytes required for serialization 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   488
   */
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   489
  uint32_t GetSerializedSize (void) const;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   490
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   491
  /**
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   492
   * \return zero if buffer not large enough
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   493
   * \param buffer points to serialization buffer
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   494
   * \param maxSize max number of bytes to write
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   495
   *
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   496
   * This buffer's contents are serialized into the raw 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   497
   * character buffer parameter. Note: The zero length 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   498
   * data is not copied entirely. Only the length of 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   499
   * zero byte data is serialized.
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   500
   */
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   501
  uint32_t Serialize (uint8_t* buffer, uint32_t maxSize) const;
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   502
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   503
  /**
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   504
   * \return zero if a complete buffer is not deserialized
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   505
   * \param buffer points to buffer for deserialization
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   506
   * \param size number of bytes to deserialize
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   507
   *
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   508
   * The raw character buffer is deserialized and all the 
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   509
   * data is placed into this buffer.
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   510
   */
6291
8b3cd8b4d560 change casts to c++ style
Josh Pelkey <jpelkey@gatech.edu>
parents: 6154
diff changeset
   511
  uint32_t Deserialize (const uint8_t* buffer, uint32_t size);
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   512
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   513
  int32_t GetCurrentStartOffset (void) const;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   514
  int32_t GetCurrentEndOffset (void) const;
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3032
diff changeset
   515
4708
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   516
  /** 
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   517
   * Copy the specified amount of data from the buffer to the given output stream.
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   518
   * 
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   519
   * @param os the output stream
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   520
   * @param size the maximum amount of bytes to copy. If zero, nothing is copied.
b251fb79becb bug 639: Buffer::CopyData is buggy.
Nicola Baldo <nbaldo@cttc.es>
parents: 4518
diff changeset
   521
   */
4518
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3404
diff changeset
   522
  void CopyData (std::ostream *os, uint32_t size) const;
31f2881aa214 avoid extra memory allocations when using PcapWriter
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3404
diff changeset
   523
5938
69bcae35bc81 avoid copying bytes one after the other.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
   524
  uint32_t CopyData (uint8_t *buffer, uint32_t size) const;
69bcae35bc81 avoid copying bytes one after the other.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 5842
diff changeset
   525
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   526
  inline Buffer (Buffer const &o);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1313
diff changeset
   527
  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: 1313
diff changeset
   528
  Buffer ();
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1313
diff changeset
   529
  Buffer (uint32_t dataSize);
6113
0ce37bf4f1c1 Merge distributed simulation code
Josh Pelkey <jpelkey@gatech.edu>
parents: 5938
diff changeset
   530
  Buffer (uint32_t dataSize, bool initialize);
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1313
diff changeset
   531
  ~Buffer ();
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   532
private:
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   533
  /**
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   534
   * This data structure is variable-sized through its last member whose size
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   535
   * is determined at allocation time and stored in the m_size field.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   536
   *
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   537
   * The so-called "dirty area" describes the area in the buffer which
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   538
   * has been reserved and used by a user. Multiple Buffer instances
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   539
   * may reference the same Buffer::Data object instance and may
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   540
   * reference different parts of the underlying byte buffer. The
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   541
   * "dirty area" is union of all the areas referenced by the Buffer
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   542
   * instances which reference the same BufferData instance.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   543
   * New user data can be safely written only outside of the "dirty
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   544
   * area" if the reference count is higher than 1 (that is, if
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   545
   * more than one Buffer instance references the same BufferData).
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   546
   */
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   547
  struct Data
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   548
  {
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   549
    /* The reference count of an instance of this data structure.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   550
     * Each buffer which references an instance holds a count.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   551
       */
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   552
    uint32_t m_count;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   553
    /* the size of the m_data field below.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   554
     */
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   555
    uint32_t m_size;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   556
    /* offset from the start of the m_data field below to the
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   557
     * start of the area in which user bytes were written.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   558
     */
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   559
    uint32_t m_dirtyStart;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   560
    /* offset from the start of the m_data field below to the
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   561
     * end of the area in which user bytes were written.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   562
     */
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   563
    uint32_t m_dirtyEnd;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   564
    /* The real data buffer holds _at least_ one byte.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   565
     * Its real size is stored in the m_size field.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   566
     */
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   567
    uint8_t m_data[1];
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   568
  };
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   569
1137
620b9f96c9e6 add Buffer::CreateFullCopy and make TransformInto private
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 957
diff changeset
   570
  void TransformIntoRealBuffer (void) const;
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   571
  bool CheckInternalState (void) const;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   572
  void Initialize (uint32_t zeroSize);
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   573
  uint32_t GetInternalSize (void) const;
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   574
  uint32_t GetInternalEnd (void) const;
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   575
  static void Recycle (struct Buffer::Data *data);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   576
  static struct Buffer::Data *Create (uint32_t size);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   577
  static struct Buffer::Data *Allocate (uint32_t reqSize);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   578
  static void Deallocate (struct Buffer::Data *data);
7182
5ecfee5d17de network coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents: 6823
diff changeset
   579
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   580
  struct Data *m_data;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   581
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   582
  /* keep track of the maximum value of m_zeroAreaStart across
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   583
   * the lifetime of a Buffer instance. This variable is used
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   584
   * purely as a source of information for the heuristics which
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   585
   * decide on the position of the zero area in new buffers.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   586
   * It is read from the Buffer destructor to update the global
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   587
   * heuristic data and these global heuristic data are used from
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   588
   * the Buffer constructor to choose an initial value for 
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   589
   * m_zeroAreaStart.
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   590
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   591
  uint32_t m_maxZeroAreaStart;
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   592
  /**
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   593
   * location in a newly-allocated buffer where you should start
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   594
   * writing data. i.e., m_start should be initialized to this 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   595
   * value.
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   596
   */
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   597
  static uint32_t g_recommendedStart;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   598
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   599
  /* offset to the start of the virtual zero area from the start 
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   600
   * of m_data->m_data
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   601
   */
1473
6c6af702f501 add Buffer::m_zeroAreaStart
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1471
diff changeset
   602
  uint32_t m_zeroAreaStart;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   603
  /* offset to the end of the virtual zero area from the start 
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   604
   * of m_data->m_data
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   605
   */
1474
af0ac21e2084 rewrite the buffer code extensively
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1473
diff changeset
   606
  uint32_t m_zeroAreaEnd;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   607
  /* offset to the start of the data referenced by this Buffer
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   608
   * instance from the start of m_data->m_data
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   609
   */
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   610
  uint32_t m_start;
1491
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   611
  /* offset to the end of the data referenced by this Buffer
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   612
   * instance from the start of m_data->m_data
d1d28dca5279 add 'internal' documentation, cleanup a bit
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1490
diff changeset
   613
   */
1470
34de85128b54 Buffer::m_size -> Buffer::m_end
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1467
diff changeset
   614
  uint32_t m_end;
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   615
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   616
#ifdef BUFFER_FREE_LIST
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   617
  typedef std::vector<struct Buffer::Data*> FreeList;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   618
  struct LocalStaticDestructor 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   619
  {
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   620
    ~LocalStaticDestructor ();
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   621
  };
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   622
  static uint32_t g_maxSize;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   623
  static FreeList *g_freeList;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   624
  static struct LocalStaticDestructor g_localStaticDestructor;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   625
#endif
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   626
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   627
1461
d3f2aacbc1d7 move inline code from header to .cc file prior to rework of Buffer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1313
diff changeset
   628
} // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   629
1487
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   630
#include "ns3/assert.h"
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 8902
diff changeset
   631
#include <cstring>
1487
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   632
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   633
namespace ns3 {
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   634
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   635
Buffer::Iterator::Iterator ()
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   636
  : m_zeroStart (0),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   637
    m_zeroEnd (0),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   638
    m_dataStart (0),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   639
    m_dataEnd (0),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   640
    m_current (0),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   641
    m_data (0)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   642
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   643
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   644
Buffer::Iterator::Iterator (Buffer const*buffer)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   645
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   646
  Construct (buffer);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   647
  m_current = m_dataStart;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   648
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   649
Buffer::Iterator::Iterator (Buffer const*buffer, bool dummy)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   650
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   651
  Construct (buffer);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   652
  m_current = m_dataEnd;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   653
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   654
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   655
void
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   656
Buffer::Iterator::Construct (const Buffer *buffer)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   657
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   658
  m_zeroStart = buffer->m_zeroAreaStart;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   659
  m_zeroEnd = buffer->m_zeroAreaEnd;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   660
  m_dataStart = buffer->m_start;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   661
  m_dataEnd = buffer->m_end;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   662
  m_data = buffer->m_data->m_data;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   663
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   664
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   665
void 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   666
Buffer::Iterator::Next (void)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   667
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   668
  NS_ASSERT (m_current + 1 <= m_dataEnd);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   669
  m_current++;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   670
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   671
void 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   672
Buffer::Iterator::Prev (void)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   673
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   674
  NS_ASSERT (m_current >= 1);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   675
  m_current--;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   676
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   677
void 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   678
Buffer::Iterator::Next (uint32_t delta)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   679
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   680
  NS_ASSERT (m_current + delta <= m_dataEnd);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   681
  m_current += delta;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   682
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   683
void 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   684
Buffer::Iterator::Prev (uint32_t delta)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   685
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   686
  NS_ASSERT (m_current >= delta);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   687
  m_current -= delta;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   688
}
1487
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   689
void
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   690
Buffer::Iterator::WriteU8 (uint8_t data)
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   691
{
6396
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   692
  NS_ASSERT_MSG (Check (m_current),
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   693
                 GetWriteErrorMessage ());
1487
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   694
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   695
  if (m_current < m_zeroStart)
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   696
    {
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   697
      m_data[m_current] = data;
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   698
      m_current++;
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   699
    }
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   700
  else
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   701
    {
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   702
      m_data[m_current - (m_zeroEnd-m_zeroStart)] = data;
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   703
      m_current++;
1487
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   704
    }
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   705
}
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   706
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   707
void 
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   708
Buffer::Iterator::WriteU8 (uint8_t  data, uint32_t len)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   709
{
6396
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   710
  NS_ASSERT_MSG (CheckNoZero (m_current, m_current + len),
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   711
                 GetWriteErrorMessage ());
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   712
  if (m_current <= m_zeroStart)
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   713
    {
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 8902
diff changeset
   714
      std::memset (&(m_data[m_current]), data, len);
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   715
      m_current += len;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   716
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   717
  else
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   718
    {
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   719
      uint8_t *buffer = &m_data[m_current - (m_zeroEnd-m_zeroStart)];
9063
32755d0516f4 Bug 1237 - code cleanups related to includes
Vedran Miletić <rivanvx@gmail.com>
parents: 8902
diff changeset
   720
      std::memset (buffer, data, len);
1488
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   721
      m_current += len;
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   722
    }
5b29deccdc41 optimize Buffer::WriteU8 variants
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1487
diff changeset
   723
}
1487
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   724
6154
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   725
void 
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   726
Buffer::Iterator::WriteHtonU16 (uint16_t data)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   727
{
6396
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   728
  NS_ASSERT_MSG (CheckNoZero (m_current, m_current + 2),
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   729
                 GetWriteErrorMessage ());
6154
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   730
  uint8_t *buffer;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   731
  if (m_current + 2 <= m_zeroStart)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   732
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   733
      buffer = &m_data[m_current];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   734
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   735
  else
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   736
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   737
      buffer = &m_data[m_current - (m_zeroEnd - m_zeroStart)];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   738
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   739
  buffer[0] = (data >> 8)& 0xff;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   740
  buffer[1] = (data >> 0)& 0xff;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   741
  m_current+= 2;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   742
}
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   743
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   744
void 
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   745
Buffer::Iterator::WriteHtonU32 (uint32_t data)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   746
{
6396
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   747
  NS_ASSERT_MSG (CheckNoZero (m_current, m_current + 4),
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   748
                 GetWriteErrorMessage ());
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   749
6154
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   750
  uint8_t *buffer;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   751
  if (m_current + 4 <= m_zeroStart)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   752
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   753
      buffer = &m_data[m_current];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   754
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   755
  else
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   756
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   757
      buffer = &m_data[m_current - (m_zeroEnd - m_zeroStart)];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   758
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   759
  buffer[0] = (data >> 24)& 0xff;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   760
  buffer[1] = (data >> 16)& 0xff;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   761
  buffer[2] = (data >> 8)& 0xff;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   762
  buffer[3] = (data >> 0)& 0xff;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   763
  m_current+= 4;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   764
}
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   765
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   766
uint16_t 
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   767
Buffer::Iterator::ReadNtohU16 (void)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   768
{
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   769
  uint8_t *buffer;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   770
  if (m_current + 2 <= m_zeroStart)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   771
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   772
      buffer = &m_data[m_current];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   773
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   774
  else if (m_current >= m_zeroEnd)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   775
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   776
      buffer = &m_data[m_current];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   777
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   778
  else
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   779
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   780
      return SlowReadNtohU16 ();
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   781
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   782
  uint16_t retval = 0;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   783
  retval |= buffer[0];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   784
  retval <<= 8;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   785
  retval |= buffer[1];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   786
  m_current += 2;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   787
  return retval;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   788
}
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   789
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   790
uint32_t 
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   791
Buffer::Iterator::ReadNtohU32 (void)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   792
{
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   793
  uint8_t *buffer;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   794
  if (m_current + 4 <= m_zeroStart)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   795
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   796
      buffer = &m_data[m_current];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   797
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   798
  else if (m_current >= m_zeroEnd)
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   799
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   800
      buffer = &m_data[m_current];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   801
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   802
  else
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   803
    {
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   804
      return SlowReadNtohU32 ();
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   805
    }
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   806
  uint32_t retval = 0;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   807
  retval |= buffer[0];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   808
  retval <<= 8;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   809
  retval |= buffer[1];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   810
  retval <<= 8;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   811
  retval |= buffer[2];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   812
  retval <<= 8;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   813
  retval |= buffer[3];
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   814
  m_current += 4;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   815
  return retval;
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   816
}
bce48d2a0a06 optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6132
diff changeset
   817
6397
a1608a9a11f3 run check-style.py
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6396
diff changeset
   818
uint8_t
1489
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   819
Buffer::Iterator::ReadU8 (void)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   820
{
6396
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   821
  NS_ASSERT_MSG (m_current >= m_dataStart &&
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   822
                 m_current <= m_dataEnd,
e109fff32306 improve error reporting in case of assert failures.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6291
diff changeset
   823
                 GetReadErrorMessage ());
1489
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   824
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   825
  if (m_current < m_zeroStart)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   826
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   827
      uint8_t data = m_data[m_current];
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   828
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   829
      return data;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   830
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   831
  else if (m_current < m_zeroEnd)
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   832
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   833
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   834
      return 0;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   835
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   836
  else
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   837
    {
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   838
      uint8_t data = m_data[m_current - (m_zeroEnd-m_zeroStart)];
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   839
      m_current++;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   840
      return data;
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   841
    }
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   842
}
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   843
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   844
uint16_t 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   845
Buffer::Iterator::ReadU16 (void)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   846
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   847
  uint8_t byte0 = ReadU8 ();
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   848
  uint8_t byte1 = ReadU8 ();
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   849
  uint16_t data = byte1;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   850
  data <<= 8;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   851
  data |= byte0;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   852
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   853
  return data;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   854
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   855
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   856
Buffer::Buffer (Buffer const&o)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   857
  : m_data (o.m_data),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   858
    m_maxZeroAreaStart (o.m_zeroAreaStart),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   859
    m_zeroAreaStart (o.m_zeroAreaStart),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   860
    m_zeroAreaEnd (o.m_zeroAreaEnd),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   861
    m_start (o.m_start),
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   862
    m_end (o.m_end)
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   863
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   864
  m_data->m_count++;
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   865
  NS_ASSERT (CheckInternalState ());
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   866
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   867
6132
cd1902faafb9 inline to optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6113
diff changeset
   868
uint32_t 
cd1902faafb9 inline to optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6113
diff changeset
   869
Buffer::GetSize (void) const
cd1902faafb9 inline to optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6113
diff changeset
   870
{
cd1902faafb9 inline to optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6113
diff changeset
   871
  return m_end - m_start;
cd1902faafb9 inline to optimized iperf
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6113
diff changeset
   872
}
1489
e127439e4429 optimize Iterator::ReadU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1488
diff changeset
   873
6464
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   874
Buffer::Iterator 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   875
Buffer::Begin (void) const
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   876
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   877
  NS_ASSERT (CheckInternalState ());
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   878
  return Buffer::Iterator (this);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   879
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   880
Buffer::Iterator 
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   881
Buffer::End (void) const
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   882
{
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   883
  NS_ASSERT (CheckInternalState ());
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   884
  return Buffer::Iterator (this, false);
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   885
}
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   886
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   887
e7ab95880d12 optimize buffer some more
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 6397
diff changeset
   888
1487
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   889
} // namespace ns3
4f7c02ef35ea optimize Buffer::WriteU8
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1474
diff changeset
   890
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   891
#endif /* BUFFER_H */