src/common/buffer.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 02 Oct 2006 11:25:07 +0200
changeset 105 ff9f5e95b7a3
parent 90 d670ba9f726e
child 110 9ac6d63bfe33
permissions -rw-r--r--
small doc fix
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
     1
/* -*-    Mode:C++; c-basic-offset:4; tab-width:4; indent-tabs-mode:f -*- */
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2005,2006 INRIA
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * 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
     7
 * 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
     8
 * published by the Free Software Foundation;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * 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
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * 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
    16
 * 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
    17
 * 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
    18
 *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#include "buffer.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include <cassert>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#include <iostream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
//#define TRACE(x) std::cout << x << std::endl;
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#define TRACE(x)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
    28
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
52
72a52d59ee9f member variables coding style change
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
    30
Buffer::BufferDataList  Buffer::m_freeList;
72a52d59ee9f member variables coding style change
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
    31
uint32_t Buffer::m_maxTotalAddStart = 0;
72a52d59ee9f member variables coding style change
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
    32
uint32_t Buffer::m_maxTotalAddEnd = 0;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
struct Buffer::BufferData *
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
    35
Buffer::allocate (uint32_t reqSize, uint32_t reqStart)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    37
    if (reqSize == 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    38
        reqSize = 1;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    39
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    40
    assert (reqSize >= 1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    41
    uint32_t size = reqSize - 1 + sizeof (struct Buffer::BufferData);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    42
    uint8_t *b = new uint8_t [size];
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    43
    struct BufferData *data = reinterpret_cast<struct Buffer::BufferData*>(b);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    44
    data->m_size = reqSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    45
    data->m_initialStart = reqStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    46
    data->m_dirtyStart = reqStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    47
    data->m_dirtySize = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    48
    data->m_count = 1;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    49
    return data;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
void
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
Buffer::deallocate (struct Buffer::BufferData *data)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    55
    uint8_t *buf = reinterpret_cast<uint8_t *> (data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    56
    delete [] buf;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
#ifdef USE_FREE_LIST
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
void
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
Buffer::recycle (struct Buffer::BufferData *data)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    62
    assert (data->m_count == 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    63
    /* get rid of it if it is too small for later reuse. */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    64
    if (data->m_size < (Buffer::m_maxTotalAddStart + Buffer::m_maxTotalAddEnd)) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    65
        Buffer::deallocate (data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    66
        return; 
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    67
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    68
    /* feed into free list */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    69
    if (Buffer::m_freeList.size () > 1000) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    70
        Buffer::deallocate (data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    71
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    72
        Buffer::m_freeList.push_back (data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    73
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
Buffer::BufferData *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
Buffer::create (void)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    79
    /* try to find a buffer correctly sized. */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    80
    while (!Buffer::m_freeList.empty ()) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    81
        struct Buffer::BufferData *data = Buffer::m_freeList.back ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    82
        Buffer::m_freeList.pop_back ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    83
        if (data->m_size >= (m_maxTotalAddStart + m_maxTotalAddEnd)) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    84
            data->m_initialStart = m_maxTotalAddStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    85
            data->m_dirtyStart = m_maxTotalAddStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    86
            data->m_dirtySize = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    87
            data->m_count = 1;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    88
            return data;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    89
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    90
        Buffer::deallocate (data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    91
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    92
    struct Buffer::BufferData *data = Buffer::allocate (m_maxTotalAddStart+m_maxTotalAddEnd,
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    93
                                m_maxTotalAddStart);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    94
    assert (data->m_count == 1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
    95
    return data;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
#else
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
void
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
Buffer::recycle (struct Buffer::BufferData *data)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   101
    Buffer::deallocate (data);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
Buffer::BufferData *
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
Buffer::create (void)
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   107
    return Buffer::allocate (m_maxTotalAddStart+m_maxTotalAddEnd,
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   108
                 m_maxTotalAddStart);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
#endif
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   112
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
#include <cassert>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   117
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
void 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   121
Buffer::addAtStart (uint32_t start)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   123
    assert (m_start <= m_data->m_initialStart);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   124
    bool isDirty = m_data->m_count > 1 && m_start > m_data->m_dirtyStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   125
    if (m_start >= start && !isDirty) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   126
        /* enough space in the buffer and not dirty. */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   127
        m_start -= start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   128
        m_size += start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   129
    } else if (m_size + start <= m_data->m_size && !isDirty) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   130
        /* enough space but need to move data around to fit new data */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   131
    memmove (m_data->m_data + start, getStart (), m_size);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   132
        assert (start > m_start);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   133
        m_data->m_initialStart += start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   134
    m_start = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   135
    m_size += start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   136
    } else if (m_start < start) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   137
        /* not enough space in buffer */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   138
        uint32_t newSize = m_size + start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   139
        struct Buffer::BufferData *newData = Buffer::allocate (newSize, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   140
        memcpy (newData->m_data + start, getStart (), m_size);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   141
        newData->m_initialStart = m_data->m_initialStart + start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   142
        m_data->m_count--;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   143
        if (m_data->m_count == 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   144
            Buffer::deallocate (m_data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   145
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   146
        m_data = newData;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   147
        m_start = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   148
        m_size = newSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   149
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   150
        /* enough space in the buffer but it is dirty ! */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   151
        assert (isDirty);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   152
        struct Buffer::BufferData *newData = Buffer::create ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   153
        memcpy (newData->m_data + m_start, getStart (), m_size);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   154
        newData->m_initialStart = m_data->m_initialStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   155
        m_data->m_count--;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   156
        if (m_data->m_count == 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   157
            recycle (m_data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   158
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   159
        m_data = newData;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   160
        m_start -= start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   161
        m_size += start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   162
    } 
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   163
    // update dirty area
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   164
    m_data->m_dirtyStart = m_start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   165
    m_data->m_dirtySize = m_size;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   166
    // update m_maxTotalAddStart
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   167
    uint32_t addedAtStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   168
    if (m_data->m_initialStart > m_start) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   169
        addedAtStart = m_data->m_initialStart - m_start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   170
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   171
        addedAtStart = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   172
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   173
    if (addedAtStart > m_maxTotalAddStart) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   174
        m_maxTotalAddStart = addedAtStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   175
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   176
    TRACE ("start add="<<start<<", start="<<m_start<<", size="<<m_size<<", zero="<<m_zeroAreaSize<<
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   177
           ", real size="<<m_data->m_size<<", ini start="<<m_data->m_initialStart<<
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   178
           ", dirty start="<<m_data->m_dirtyStart<<", dirty size="<<m_data->m_dirtySize); 
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
void 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   181
Buffer::addAtEnd (uint32_t end)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   183
    assert (m_start <= m_data->m_initialStart);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   184
    bool isDirty = m_data->m_count > 1 &&
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   185
        m_start + m_size < m_data->m_dirtyStart + m_data->m_dirtySize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   186
    if (m_start + m_size + end <= m_data->m_size && !isDirty) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   187
        /* enough space in buffer and not dirty */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   188
        m_size += end;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   189
    } else if (m_size + end <= m_data->m_size && !isDirty) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   190
        /* enough space but need to move data around to fit the extra data */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   191
    uint32_t newStart = m_data->m_size - (m_size + end);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   192
    memmove (m_data->m_data + newStart, getStart (), m_size);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   193
        assert (newStart < m_start);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   194
        m_data->m_initialStart -= m_start - newStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   195
    m_start = newStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   196
    m_size += end;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   197
    } else if (m_start + m_size + end > m_data->m_size) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   198
        /* not enough space in buffer */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   199
        uint32_t newSize = m_size + end;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   200
        struct Buffer::BufferData *newData = Buffer::allocate (newSize, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   201
        memcpy (newData->m_data, getStart (), m_size);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   202
        newData->m_initialStart = m_data->m_initialStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   203
        m_data->m_count--;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   204
        if (m_data->m_count == 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   205
            Buffer::deallocate (m_data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   206
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   207
        m_data = newData;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   208
        m_size = newSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   209
        m_start = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   210
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   211
        /* enough space in the buffer but it is dirty ! */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   212
        assert (isDirty);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   213
        struct Buffer::BufferData *newData = Buffer::create ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   214
        memcpy (newData->m_data + m_start, getStart (), m_size);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   215
        newData->m_initialStart = m_data->m_initialStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   216
        m_data->m_count--;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   217
        if (m_data->m_count == 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   218
            recycle (m_data);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   219
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   220
        m_data = newData;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   221
        m_size += end;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   222
    } 
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   223
    // update dirty area
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   224
    m_data->m_dirtyStart = m_start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   225
    m_data->m_dirtySize = m_size;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   226
    // update m_maxTotalAddEnd
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   227
    uint32_t endLoc = m_start + m_size;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   228
    uint32_t addedAtEnd;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   229
    if (m_data->m_initialStart < endLoc) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   230
        addedAtEnd = endLoc - m_data->m_initialStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   231
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   232
        addedAtEnd = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   233
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   234
    if (addedAtEnd > m_maxTotalAddEnd) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   235
        m_maxTotalAddEnd = addedAtEnd;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   236
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   237
    TRACE ("end add="<<end<<", start="<<m_start<<", size="<<m_size<<", zero="<<m_zeroAreaSize<<
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   238
           ", real size="<<m_data->m_size<<", ini start="<<m_data->m_initialStart<<
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   239
           ", dirty start="<<m_data->m_dirtyStart<<", dirty size="<<m_data->m_dirtySize); 
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
void 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   243
Buffer::removeAtStart (uint32_t start)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   245
    if (m_zeroAreaSize == 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   246
        if (m_size <= start) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   247
            m_start += m_size;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   248
            m_size = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   249
        } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   250
            m_start += start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   251
            m_size -= start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   252
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   253
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   254
        assert (m_data->m_initialStart >= m_start);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   255
        uint32_t zeroStart = m_data->m_initialStart - m_start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   256
        uint32_t zeroEnd = zeroStart + m_zeroAreaSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   257
        uint32_t dataEnd = m_size + m_zeroAreaSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   258
        if (start <= zeroStart) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   259
            /* only remove start of buffer */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   260
            m_start += start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   261
            m_size -= start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   262
        } else if (start <= zeroEnd) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   263
            /* remove start of buffer _and_ start of zero area */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   264
            m_start += zeroStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   265
            uint32_t zeroDelta = start - zeroStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   266
            m_zeroAreaSize -= zeroDelta;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   267
            assert (zeroDelta <= start);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   268
            m_size -= zeroStart;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   269
        } else if (start <= dataEnd) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   270
            /* remove start of buffer, complete zero area, and part
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   271
             * of end of buffer */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   272
            m_start += start - m_zeroAreaSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   273
            m_size -= start - m_zeroAreaSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   274
            m_zeroAreaSize = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   275
        } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   276
            /* remove all buffer */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   277
            m_start += m_size;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   278
            m_size = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   279
            m_zeroAreaSize = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   280
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   281
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   282
    TRACE ("start remove="<<start<<", start="<<m_start<<", size="<<m_size<<", zero="<<m_zeroAreaSize<<
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   283
           ", real size="<<m_data->m_size<<", ini start="<<m_data->m_initialStart<<
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   284
           ", dirty start="<<m_data->m_dirtyStart<<", dirty size="<<m_data->m_dirtySize); 
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
void 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   287
Buffer::removeAtEnd (uint32_t end)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   289
    if (m_zeroAreaSize == 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   290
        if (m_size <= end) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   291
            m_size = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   292
        } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   293
            m_size -= end;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   294
        } 
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   295
    } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   296
        assert (m_data->m_initialStart >= m_start);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   297
        uint32_t zeroStart = m_data->m_initialStart - m_start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   298
        uint32_t zeroEnd = zeroStart + m_zeroAreaSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   299
        uint32_t dataEnd = m_size + m_zeroAreaSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   300
        assert (zeroStart <= m_size);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   301
        assert (zeroEnd <= m_size + m_zeroAreaSize);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   302
        if (dataEnd <= end) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   303
            /* remove all buffer */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   304
            m_zeroAreaSize = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   305
            m_start += m_size;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   306
            m_size = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   307
        } else if (dataEnd - zeroStart <= end) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   308
            /* remove end of buffer, zero area, part of start of buffer */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   309
            assert (end >= m_zeroAreaSize);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   310
            m_size -= end - m_zeroAreaSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   311
            m_zeroAreaSize = 0;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   312
        } else if (dataEnd - zeroEnd <= end) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   313
            /* remove end of buffer, part of zero area */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   314
            uint32_t zeroDelta = end - (dataEnd - zeroEnd);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   315
            m_zeroAreaSize -= zeroDelta;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   316
            m_size -= end - zeroDelta;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   317
        } else {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   318
            /* remove part of end of buffer */
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   319
            m_size -= end;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   320
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   321
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   322
    TRACE ("end remove="<<end<<", start="<<m_start<<", size="<<m_size<<", zero="<<m_zeroAreaSize<<
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   323
           ", real size="<<m_data->m_size<<", ini start="<<m_data->m_initialStart<<
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   324
           ", dirty start="<<m_data->m_dirtyStart<<", dirty size="<<m_data->m_dirtySize); 
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   325
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   326
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
Buffer 
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   328
Buffer::createFragment (uint32_t start, uint32_t length) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   330
    uint32_t zeroStart = m_data->m_initialStart - m_start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   331
    uint32_t zeroEnd = zeroStart + m_zeroAreaSize;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   332
    if (m_zeroAreaSize != 0 &&
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   333
        start + length > zeroStart &&
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   334
        start <= zeroEnd) {
90
d670ba9f726e replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   335
        transformIntoRealBuffer ();
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   336
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   337
    Buffer tmp = *this;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   338
    tmp.removeAtStart (start);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   339
    tmp.removeAtEnd (getSize () - (start + length));
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   340
    return tmp;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   341
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   342
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   343
void
90
d670ba9f726e replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   344
Buffer::transformIntoRealBuffer (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   345
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   346
    if (m_zeroAreaSize != 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   347
        assert (m_data->m_initialStart >= m_start);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   348
        assert (m_size >= (m_data->m_initialStart - m_start));
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   349
        Buffer tmp;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   350
        tmp.addAtStart (m_zeroAreaSize);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   351
        tmp.begin ().writeU8 (0, m_zeroAreaSize);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   352
        uint32_t dataStart = m_data->m_initialStart - m_start;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   353
        tmp.addAtStart (dataStart);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   354
        tmp.begin ().write (m_data->m_data+m_start, dataStart);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   355
        uint32_t dataEnd = m_size - (m_data->m_initialStart - m_start);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   356
        tmp.addAtEnd (dataEnd);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   357
        Buffer::Iterator i = tmp.end ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   358
        i.prev (dataEnd);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   359
        i.write (m_data->m_data+m_data->m_initialStart,dataEnd);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   360
        *const_cast<Buffer *> (this) = tmp;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   361
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   362
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   363
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   364
90
d670ba9f726e replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   365
uint8_t const*
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   366
Buffer::peekData (void) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   367
{
90
d670ba9f726e replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   368
    transformIntoRealBuffer ();
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   369
    return m_data->m_data + m_start;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   370
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   371
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   372
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   373
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   374
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   375
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   376
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   377
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   378
#ifdef RUN_SELF_TESTS
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   379
14
6dd7d31c6fc3 replace yans include with ns3 include
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
   380
#include "ns3/test.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   381
#include <iomanip>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   382
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   383
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   384
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   385
class BufferTest: public Test {
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   386
private:
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   387
  bool ensureWrittenBytes (Buffer b, uint32_t n, uint8_t array[]);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   388
public:
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   389
  virtual bool runTests (void);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   390
  BufferTest ();
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   391
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   392
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   393
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   394
BufferTest::BufferTest ()
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   395
    : Test ("Buffer") {}
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   396
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   397
bool
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   398
BufferTest::ensureWrittenBytes (Buffer b, uint32_t n, uint8_t array[])
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   399
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   400
    bool success = true;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   401
    uint8_t *expected = array;
90
d670ba9f726e replace pointers with references
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 54
diff changeset
   402
    uint8_t const*got;
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   403
    got = b.peekData ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   404
    for (uint32_t j = 0; j < n; j++) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   405
        if (got[j] != expected[j]) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   406
            success = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   407
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   408
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   409
    if (!success) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   410
        failure () << "Buffer -- ";
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   411
        failure () << "expected: n=";
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   412
        failure () << n << ", ";
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   413
        failure ().setf (std::ios::hex, std::ios::basefield);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   414
        for (uint32_t j = 0; j < n; j++) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   415
            failure () << (uint16_t)expected[j] << " ";
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   416
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   417
        failure ().setf (std::ios::dec, std::ios::basefield);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   418
        failure () << "got: ";
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   419
        failure ().setf (std::ios::hex, std::ios::basefield);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   420
        for (uint32_t j = 0; j < n; j++) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   421
            failure () << (uint16_t)got[j] << " ";
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   422
        }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   423
        failure () << std::endl;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   424
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   425
    return success;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   426
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   427
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   428
/* Note: works only when variadic macros are
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   429
 * available which is the case for gcc.
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   430
 * XXX
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   431
 */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   432
#define ENSURE_WRITTEN_BYTES(buffer, n, ...) \
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   433
{ \
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   434
    uint8_t bytes[] = {__VA_ARGS__}; \
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   435
    if (!ensureWrittenBytes (buffer, n , bytes)) { \
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   436
        ok = false; \
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   437
    } \
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   438
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   440
bool
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   441
BufferTest::runTests (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   442
{
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   443
    bool ok = true;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   444
    Buffer buffer;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   445
    Buffer::Iterator i;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   446
    buffer.addAtStart (6);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   447
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   448
    i.writeU8 (0x66);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   449
    ENSURE_WRITTEN_BYTES (buffer, 1, 0x66);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   450
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   451
    i.writeU8 (0x67);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   452
    ENSURE_WRITTEN_BYTES (buffer, 1, 0x67);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   453
    i.writeHtonU16 (0x6568);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   454
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   455
    ENSURE_WRITTEN_BYTES (buffer, 3, 0x67, 0x65, 0x68);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   456
    i.writeHtonU16 (0x6369);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   457
    ENSURE_WRITTEN_BYTES (buffer, 3, 0x63, 0x69, 0x68);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   458
    i.writeHtonU32 (0xdeadbeaf);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   459
    ENSURE_WRITTEN_BYTES (buffer, 6, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   460
    buffer.addAtStart (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   461
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   462
    i.writeU16 (0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   463
    ENSURE_WRITTEN_BYTES (buffer, 8, 0, 0, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   464
    buffer.addAtEnd (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   465
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   466
    i.next (8);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   467
    i.writeU16 (0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   468
    ENSURE_WRITTEN_BYTES (buffer, 10, 0, 0, 0x63, 0x69, 0xde, 0xad, 0xbe, 0xaf, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   469
    buffer.removeAtStart (3);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   470
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   471
    ENSURE_WRITTEN_BYTES (buffer, 7, 0x69, 0xde, 0xad, 0xbe, 0xaf, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   472
    buffer.removeAtEnd (4);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   473
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   474
    ENSURE_WRITTEN_BYTES (buffer, 3, 0x69, 0xde, 0xad);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   475
    buffer.addAtStart (1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   476
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   477
    i.writeU8 (0xff);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   478
    ENSURE_WRITTEN_BYTES (buffer, 4, 0xff, 0x69, 0xde, 0xad);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   479
    buffer.addAtEnd (1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   480
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   481
    i.next (4);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   482
    i.writeU8 (0xff);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   483
    i.prev (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   484
    uint16_t saved = i.readU16 ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   485
    i.prev (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   486
    i.writeHtonU16 (0xff00);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   487
    i.prev (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   488
    if (i.readNtohU16 () != 0xff00) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   489
        ok = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   490
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   491
    i.prev (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   492
    i.writeU16 (saved);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   493
    ENSURE_WRITTEN_BYTES (buffer, 5, 0xff, 0x69, 0xde, 0xad, 0xff);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   494
    Buffer o = buffer;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   495
    ENSURE_WRITTEN_BYTES (o, 5, 0xff, 0x69, 0xde, 0xad, 0xff);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   496
    o.addAtStart (1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   497
    i = o.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   498
    i.writeU8 (0xfe);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   499
    ENSURE_WRITTEN_BYTES (o, 6, 0xfe, 0xff, 0x69, 0xde, 0xad, 0xff);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   500
    buffer.addAtStart (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   501
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   502
    i.writeU8 (0xfd);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   503
    i.writeU8 (0xfd);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   504
    ENSURE_WRITTEN_BYTES (o, 6, 0xfe, 0xff, 0x69, 0xde, 0xad, 0xff);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   505
    ENSURE_WRITTEN_BYTES (buffer, 7, 0xfd, 0xfd, 0xff, 0x69, 0xde, 0xad, 0xff);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   506
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   507
    // test self-assignment
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   508
    {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   509
        Buffer a = o;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   510
        a = a;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   511
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   512
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   513
    // test remove start.
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   514
    buffer = Buffer (5);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   515
    ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   516
    buffer.removeAtStart (1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   517
    ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   518
    buffer.addAtStart (1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   519
    buffer.begin ().writeU8 (0xff);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   520
    ENSURE_WRITTEN_BYTES (buffer, 5, 0xff, 0, 0, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   521
    buffer.removeAtStart(3);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   522
    ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   523
    buffer.addAtStart (4);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   524
    buffer.begin ().writeHtonU32 (0xdeadbeaf);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   525
    ENSURE_WRITTEN_BYTES (buffer, 6,  0xde, 0xad, 0xbe, 0xaf, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   526
    buffer.removeAtStart (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   527
    ENSURE_WRITTEN_BYTES (buffer, 4,  0xbe, 0xaf, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   528
    buffer.addAtEnd (4);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   529
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   530
    i.next (4);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   531
    i.writeHtonU32 (0xdeadbeaf);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   532
    ENSURE_WRITTEN_BYTES (buffer, 8,  0xbe, 0xaf, 0, 0, 0xde, 0xad, 0xbe, 0xaf);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   533
    buffer.removeAtStart (5);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   534
    ENSURE_WRITTEN_BYTES (buffer, 3,  0xad, 0xbe, 0xaf);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   535
    // test remove end
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   536
    buffer = Buffer (5);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   537
    ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   538
    buffer.removeAtEnd (1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   539
    ENSURE_WRITTEN_BYTES (buffer, 4, 0, 0, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   540
    buffer.addAtEnd (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   541
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   542
    i.next (4);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   543
    i.writeU8 (0xab);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   544
    i.writeU8 (0xac);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   545
    ENSURE_WRITTEN_BYTES (buffer, 6, 0, 0, 0, 0, 0xab, 0xac);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   546
    buffer.removeAtEnd (1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   547
    ENSURE_WRITTEN_BYTES (buffer, 5, 0, 0, 0, 0, 0xab);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   548
    buffer.removeAtEnd (3);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   549
    ENSURE_WRITTEN_BYTES (buffer, 2, 0, 0);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   550
    buffer.addAtEnd (6);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   551
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   552
    i.next (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   553
    i.writeU8 (0xac);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   554
    i.writeU8 (0xad);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   555
    i.writeU8 (0xae);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   556
    i.writeU8 (0xaf);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   557
    i.writeU8 (0xba);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   558
    i.writeU8 (0xbb);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   559
    ENSURE_WRITTEN_BYTES (buffer, 8, 0, 0, 0xac, 0xad, 0xae, 0xaf, 0xba, 0xbb);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   560
    buffer.addAtStart (3);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   561
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   562
    i.writeU8 (0x30);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   563
    i.writeU8 (0x31);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   564
    i.writeU8 (0x32);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   565
    ENSURE_WRITTEN_BYTES (buffer, 11, 0x30, 0x31, 0x32, 0, 0, 0xac, 0xad, 0xae, 0xaf, 0xba, 0xbb);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   566
    buffer.removeAtEnd (9);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   567
    ENSURE_WRITTEN_BYTES (buffer, 2, 0x30, 0x31);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   568
    buffer = Buffer (3);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   569
    buffer.addAtEnd (2);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   570
    i = buffer.begin ();
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   571
    i.next (3);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   572
    i.writeHtonU16 (0xabcd);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   573
    buffer.addAtStart (1);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   574
    buffer.begin ().writeU8 (0x21);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   575
    ENSURE_WRITTEN_BYTES (buffer, 6, 0x21, 0, 0, 0, 0xab, 0xcd);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   576
    buffer.removeAtEnd (8);
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   577
    if (buffer.getSize () != 0) {
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   578
        ok = false;
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   579
    }
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   580
    
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   581
    
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   582
    
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   583
54
f860e6f94787 change indent to be 4 spaces
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 53
diff changeset
   584
    return ok;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   585
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   586
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   587
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   588
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 52
diff changeset
   589
static BufferTest gBufferTest;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   590
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   591
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   592
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   593
#endif /* RUN_SELF_TESTS */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   594
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   595