src/common/tags.cc
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 08 Aug 2007 09:49:56 +0200
changeset 1233 dade465d569d
parent 1155 1269189b9f41
child 1239 e1be6d900bc0
permissions -rw-r--r--
introduce Tag base class similar to Header and Trailer
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
/*
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 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 "tags.h"
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#include <string.h>
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
    23
#include "ns3/fatal-error.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
    25
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
#ifdef USE_FREE_LIST
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
    29
struct Tags::TagData *Tags::gFree = 0;
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
    30
uint32_t Tags::gN_free = 0;
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
struct Tags::TagData *
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
    33
Tags::AllocData (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    35
  struct Tags::TagData *retval;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    36
  if (gFree != 0) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    37
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    38
      retval = gFree;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    39
      gFree = gFree->m_next;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    40
      gN_free--;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    41
    } 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    42
  else 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    43
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    44
      retval = new struct Tags::TagData ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    45
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    46
  return retval;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
    50
Tags::FreeData (struct TagData *data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    52
  if (gN_free > 1000) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    53
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    54
      delete data;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    55
      return;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    56
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    57
  gN_free++;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    58
  data->m_next = gFree;
208
408c964b19e7 Make tags more robust with regard to lack of tag registration
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 150
diff changeset
    59
  data->m_id = 0;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    60
  gFree = data;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
#else
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
struct Tags::TagData *
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
    64
Tags::AllocData (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    66
  struct Tags::TagData *retval;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    67
  retval = new struct Tags::TagData ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    68
  return retval;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
void
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
    72
Tags::FreeData (struct TagData *data)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    74
  delete data;
9
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
#endif
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
bool
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
    79
Tags::Remove (uint32_t id)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    81
  bool found = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    82
  for (struct TagData *cur = m_next; cur != 0; cur = cur->m_next) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    83
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    84
      if (cur->m_id == id) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    85
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    86
          found = true;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    87
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    88
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    89
  if (!found) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    90
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    91
      return false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    92
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    93
  struct TagData *start = 0;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    94
  struct TagData **prevNext = &start;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    95
  for (struct TagData *cur = m_next; cur != 0; cur = cur->m_next) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    96
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    97
      if (cur->m_id == id) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    98
        {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
    99
          /**
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   100
           * XXX
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   101
           * Note: I believe that we could optimize this to
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   102
           * avoid copying each TagData located after the target id
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   103
           * and just link the already-copied list to the next tag.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   104
           */
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   105
          continue;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   106
        }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   107
      struct TagData *copy = AllocData ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   108
      copy->m_id = cur->m_id;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   109
      copy->m_count = 1;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   110
      copy->m_next = 0;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   111
      memcpy (copy->m_data, cur->m_data, Tags::SIZE);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   112
      *prevNext = copy;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   113
      prevNext = &copy->m_next;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   114
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   115
  *prevNext = 0;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   116
  RemoveAll ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   117
  m_next = start;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   118
  return true;
9
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
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
void 
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   122
Tags::Print (std::ostream &os) const
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   124
  for (struct TagData *cur = m_next; cur != 0; cur = cur->m_next) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   125
    {
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   126
      TagRegistry::Print (cur->m_id, cur->m_data, os);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   127
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   130
uint32_t
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   131
Tags::GetSerializedSize (void) const
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   132
{
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   133
  uint32_t totalSize = 4; // reserve space for the size of the tag data.
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   134
  for (struct TagData *cur = m_next; cur != 0; cur = cur->m_next) 
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   135
    {
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   136
      uint32_t size = TagRegistry::GetSerializedSize (cur->m_id, cur->m_data);
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   137
      if (size != 0)
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   138
        {
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   139
          std::string uidString = TagRegistry::GetUidString (cur->m_id);
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   140
          totalSize += 4; // for the size of the string itself.
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   141
          totalSize += uidString.size ();
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   142
          totalSize += size;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   143
        }
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   144
    }
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   145
  return totalSize;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   146
}
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   147
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   148
void 
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   149
Tags::Serialize (Buffer::Iterator i, uint32_t totalSize) const
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   150
{
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   151
  i.WriteU32 (totalSize);
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   152
  for (struct TagData *cur = m_next; cur != 0; cur = cur->m_next) 
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   153
    {
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   154
      uint32_t size = TagRegistry::GetSerializedSize (cur->m_id, cur->m_data);
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   155
      if (size != 0)
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   156
        {
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   157
          std::string uidString = TagRegistry::GetUidString (cur->m_id);
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   158
          i.WriteU32 (uidString.size ());
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   159
          uint8_t *buf = (uint8_t *)uidString.c_str ();
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   160
          i.Write (buf, uidString.size ());
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   161
          TagRegistry::Serialize (cur->m_id, cur->m_data, i);
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   162
        }
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   163
    }
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   164
}
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   165
uint32_t
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   166
Tags::Deserialize (Buffer::Iterator i)
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   167
{
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   168
  uint32_t totalSize = i.ReadU32 ();
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   169
  uint32_t bytesRead = 4;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   170
  while (bytesRead < totalSize)
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   171
    {
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   172
      uint32_t uidStringSize = i.ReadU32 ();
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   173
      bytesRead += 4;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   174
      std::string uidString;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   175
      uidString.reserve (uidStringSize);
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   176
      for (uint32_t j = 0; j < uidStringSize; j++)
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   177
        {
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   178
          uint32_t c = i.ReadU8 ();
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   179
          uidString.push_back (c);
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   180
        }
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   181
      bytesRead += uidStringSize;
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   182
      uint32_t uid = TagRegistry::GetUidFromUidString (uidString);
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   183
      struct TagData *newStart = AllocData ();
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   184
      newStart->m_count = 1;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   185
      newStart->m_next = 0;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   186
      newStart->m_id = uid;
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   187
      bytesRead += TagRegistry::Deserialize (uid, newStart->m_data, i);
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   188
      newStart->m_next = m_next;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   189
      m_next = newStart;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   190
    }
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   191
  NS_ASSERT (bytesRead == totalSize);
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   192
  /**
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   193
   * The process of serialization/deserialization 
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   194
   * results in an inverted linked-list after
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   195
   * deserialization so, we invert the linked-list
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   196
   * in-place here.
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   197
   * Note: the algorithm below is pretty classic
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   198
   * but whenever I get to code it, it makes my
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   199
   * brain hurt :)
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   200
   */
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   201
  struct TagData *prev = 0;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   202
  struct TagData *cur = m_next;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   203
  while (cur != 0)
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   204
    {
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   205
      struct TagData *next = cur->m_next;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   206
      cur->m_next = prev;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   207
      prev = cur;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   208
      cur = next;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   209
    }
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   210
  m_next = prev;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   211
  return totalSize;
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   212
}
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   213
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   214
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   216
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
#ifdef RUN_SELF_TESTS
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
14
6dd7d31c6fc3 replace yans include with ns3 include
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 9
diff changeset
   220
#include "ns3/test.h"
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
#include <iomanip>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
#include <iostream>
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   224
namespace ns3 {
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   226
static bool g_a;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   227
static bool g_b;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   228
static bool g_c;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   229
static bool g_z;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   230
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
class TagsTest : Test {
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
public:
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   233
  TagsTest ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   234
  virtual ~TagsTest ();
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   235
  virtual bool RunTests (void);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
};
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   238
class myTagA : public Tag
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   239
{
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   240
public:
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   241
  static uint32_t GetUid (void) {static uint32_t uid = AllocateUid<myTagA> ("myTagA.test.nsnam.org"); return uid;}
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   242
  void Print (std::ostream &os) const {g_a = true;}
1145
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   243
  uint32_t GetSerializedSize (void) const {return 1;}
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   244
  void Serialize (Buffer::Iterator i) const {i.WriteU8 (a);}
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   245
  uint32_t Deserialize (Buffer::Iterator i) {a = i.ReadU8 (); return 1;}
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   246
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   247
  uint8_t a;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
};
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   249
class myTagB : public Tag
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   250
{
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   251
public:
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   252
  static uint32_t GetUid (void) {static uint32_t uid = AllocateUid<myTagB> ("myTagB.test.nsnam.org"); return uid;}
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   253
  void Print (std::ostream &os) const {g_b = true;}
1145
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   254
  uint32_t GetSerializedSize (void) const {return 4;}
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   255
  void Serialize (Buffer::Iterator i) const {i.WriteU32 (b);}
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   256
  uint32_t Deserialize (Buffer::Iterator i) {b = i.ReadU32 (); return 4;}
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   257
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   258
  uint32_t b;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   259
};
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   260
class myTagC : public Tag
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   261
{
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   262
public:
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   263
  static uint32_t GetUid (void) {static uint32_t uid = AllocateUid<myTagC> ("myTagC.test.nsnam.org"); return uid;}
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   264
  void Print (std::ostream &os) const {g_c = true;}
1145
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   265
  uint32_t GetSerializedSize (void) const {return Tags::SIZE;}
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   266
  void Serialize (Buffer::Iterator i) const {i.Write (c, Tags::SIZE);}
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   267
  uint32_t Deserialize (Buffer::Iterator i) {i.Read (c, Tags::SIZE); return Tags::SIZE;}
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   268
  uint8_t c [Tags::SIZE];
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
};
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   270
class myInvalidTag : public Tag
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   271
{
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   272
public:
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   273
  static uint32_t GetUid (void) 
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   274
  {static uint32_t uid = AllocateUid<myInvalidTag> ("myinvalidTag.test.nsnam.org"); return uid;}
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   275
  void Print (std::ostream &os) const {}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   276
  uint32_t GetSerializedSize (void) const {return 0;}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   277
  void Serialize (Buffer::Iterator i) const {}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   278
  uint32_t Deserialize (Buffer::Iterator i) {return 0;}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   279
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   280
  uint8_t invalid [Tags::SIZE+1];
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
};
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   282
class myTagZ  : public Tag
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   283
{
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   284
public:
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   285
  static uint32_t GetUid (void) {static uint32_t uid = AllocateUid<myTagZ> ("myTagZ.test.nsnam.org"); return uid;}
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   286
  void Print (std::ostream &os) const {g_z = true;}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   287
  uint32_t GetSerializedSize (void) const {return 0;}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   288
  void Serialize (Buffer::Iterator i) const {}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   289
  uint32_t Deserialize (Buffer::Iterator i) {return 0;}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   290
427
ce7051138975 add failing test
mathieu@mathieu.inria.fr
parents: 286
diff changeset
   291
  uint8_t z;
ce7051138975 add failing test
mathieu@mathieu.inria.fr
parents: 286
diff changeset
   292
};
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   294
class MySmartTag : public Tag
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   295
{
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   296
public:
1155
1269189b9f41 update the Tag API to match the Header/Trailer API
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1145
diff changeset
   297
  static uint32_t GetUid (void) 
1233
dade465d569d introduce Tag base class similar to Header and Trailer
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1155
diff changeset
   298
  {static uint32_t uid = AllocateUid<MySmartTag> ("MySmartTag.test.nsnam.org"); return uid;}
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   299
  MySmartTag ()
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   300
  {
435
dd85b014c690 remove debugging output from tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 434
diff changeset
   301
    //std::cout << "construct" << std::endl;
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   302
  }
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   303
  MySmartTag (const MySmartTag &o)
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   304
  {
435
dd85b014c690 remove debugging output from tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 434
diff changeset
   305
    //std::cout << "copy" << std::endl;
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   306
  }
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   307
  ~MySmartTag ()
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   308
  {
435
dd85b014c690 remove debugging output from tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 434
diff changeset
   309
    //std::cout << "destruct" << std::endl;
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   310
  }
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   311
  MySmartTag &operator = (const MySmartTag &o)
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   312
  {
435
dd85b014c690 remove debugging output from tests
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 434
diff changeset
   313
    //std::cout << "assign" << std::endl;
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   314
    return *this;
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   315
  }
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   316
  void Print (std::ostream &os) const {}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   317
  uint32_t GetSerializedSize (void) const {return 0;}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   318
  void Serialize (Buffer::Iterator i) const {}
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   319
  uint32_t Deserialize (Buffer::Iterator i) {return 0;}
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   320
};
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   321
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
TagsTest::TagsTest ()
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   324
  : Test ("Tags")
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
TagsTest::~TagsTest ()
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   327
{}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   328
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
bool 
122
6b8f1eda5c57 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 111
diff changeset
   330
TagsTest::RunTests (void)
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   331
{
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   332
  bool ok = true;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   333
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   334
  // build initial tag.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   335
  Tags tags;
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   336
  myTagA a;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   337
  a.a = 10;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   338
  tags.Add (a);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   339
  a.a = 0;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   340
  tags.Peek (a);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   341
  if (a.a != 10) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   342
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   343
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   344
    }
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   345
  g_a = false;
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   346
  tags.Print (std::cout);
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   347
  if (!g_a)
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   348
    {
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   349
      ok = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   350
    }
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   351
  myTagB b;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   352
  b.b = 0xff;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   353
  tags.Add (b);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   354
  b.b = 0;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   355
  tags.Peek (b);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   356
  if (b.b != 0xff) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   357
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   358
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   359
    }
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   360
  g_b = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   361
  g_a = false;
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   362
  tags.Print (std::cout);
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   363
  if (!g_a || !g_b)
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   364
    {
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   365
      ok = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   366
    }
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   367
  // make sure copy contains copy.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   368
  Tags other = tags;
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   369
  g_b = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   370
  g_a = false;
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   371
  other.Print (std::cout);
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   372
  if (!g_a || !g_b)
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   373
    {
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   374
      ok = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   375
    }
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   376
  g_b = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   377
  g_a = false;
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   378
  tags.Print (std::cout);
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   379
  if (!g_a || !g_b)
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   380
    {
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   381
      ok = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   382
    }
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   383
  myTagA oA;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   384
  oA.a = 0;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   385
  other.Peek (oA);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   386
  if (oA.a != 10) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   387
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   388
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   389
    }
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   390
  myTagB oB;
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   391
  oB.b = 1;
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   392
  other.Peek (oB);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   393
  if (oB.b != 0xff) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   394
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   395
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   396
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   397
  // remove data.
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   398
  other.Remove (oA);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   399
  if (other.Peek (oA)) 
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
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   402
    }
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   403
  g_b = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   404
  g_a = false;
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   405
  other.Print (std::cout);
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   406
  if (g_a || !g_b)
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   407
    {
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   408
      ok = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   409
    }
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   410
  if (!tags.Peek (oA)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   411
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   412
      ok = false;
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
  other.Remove (oB);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   415
  if (other.Peek (oB)) 
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
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   418
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   419
  if (!tags.Peek (oB)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   420
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   421
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   422
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   423
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   424
  other = tags;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   425
  Tags another = other;
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   426
  myTagC c;
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   427
  memset (c.c, 0x66, 16);
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   428
  another.Add (c);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   429
  c.c[0] = 0;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   430
  another.Peek (c);
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   431
  if (!another.Peek (c)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   432
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   433
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   434
    }
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   435
  if (tags.Peek (c)) 
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   436
    {
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   437
      ok = false;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   438
    }
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   439
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   440
  other = other;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   441
  //other.prettyPrint (std::cout);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   442
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   443
  //struct myInvalidTag invalid;
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   444
  //tags.add (&invalid);
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   445
1128
e5ab7564ae45 rework the Tags API to ensure proper uid generation for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 435
diff changeset
   446
  myTagZ tagZ;
427
ce7051138975 add failing test
mathieu@mathieu.inria.fr
parents: 286
diff changeset
   447
  Tags testLastTag;
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   448
  tagZ.z = 0;
427
ce7051138975 add failing test
mathieu@mathieu.inria.fr
parents: 286
diff changeset
   449
  testLastTag.Add (tagZ);
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   450
  g_z = false;
1130
66078d851998 implement Tags::Serialize and Tags::Deserialize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1128
diff changeset
   451
  testLastTag.Print (std::cout);
429
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   452
  if (!g_z)
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   453
    {
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   454
      ok = false;
da0f29b0236e more tests
mathieu@mathieu.inria.fr
parents: 428
diff changeset
   455
    }
427
ce7051138975 add failing test
mathieu@mathieu.inria.fr
parents: 286
diff changeset
   456
433
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   457
  MySmartTag smartTag;
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   458
  {
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   459
    Tags tmp;
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   460
    tmp.Add (smartTag);
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   461
    tmp.Peek (smartTag);
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   462
    tmp.Remove (smartTag);
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   463
  }
2c78631f0104 implement constructor/destructor handling for tags
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 430
diff changeset
   464
1145
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   465
  {
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   466
    Tags source;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   467
    myTagA aSource;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   468
    aSource.a = 0x66;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   469
    source.Add (aSource);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   470
    Buffer buffer;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   471
    uint32_t serialized = source.GetSerializedSize ();
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   472
    buffer.AddAtStart (serialized);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   473
    source.Serialize (buffer.Begin (), serialized);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   474
    Tags dest;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   475
    dest.Deserialize (buffer.Begin ());
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   476
    myTagA aDest;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   477
    aDest.a = 0x55;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   478
    dest.Peek (aDest);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   479
    if (aDest.a != 0x66)
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   480
      {
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   481
        ok = false;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   482
      }
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   483
  }
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   484
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   485
  {
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   486
    Tags source;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   487
    myTagA aSource;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   488
    aSource.a = 0x66;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   489
    source.Add (aSource);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   490
    myTagZ zSource;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   491
    zSource.z = 0x77;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   492
    source.Add (zSource);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   493
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   494
    Buffer buffer;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   495
    uint32_t serialized = source.GetSerializedSize ();
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   496
    buffer.AddAtStart (serialized);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   497
    source.Serialize (buffer.Begin (), serialized);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   498
    Tags dest;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   499
    dest.Deserialize (buffer.Begin ());
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   500
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   501
    myTagA aDest;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   502
    aDest.a = 0x55;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   503
    dest.Peek (aDest);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   504
    if (aDest.a != 0x66)
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   505
      {
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   506
        ok = false;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   507
      }
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   508
    myTagZ zDest;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   509
    zDest.z = 0x44;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   510
    dest.Peek (zDest);
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   511
    if (zDest.z != 0x44)
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   512
      {
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   513
        ok = false;
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   514
      }
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   515
  }
7308b6cb153f test Tags serialization/deserialization
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1130
diff changeset
   516
150
663120712cd9 fix coding style
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 134
diff changeset
   517
  return ok;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   518
}
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   519
53
ae406f4957d5 variable/method/function coding style update
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 16
diff changeset
   520
static TagsTest gTagsTest;
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   521
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   522
16
99e833adbb46 change yans namespace to ns3
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 14
diff changeset
   523
}; // namespace ns3
9
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   524
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   525
#endif /* RUN_SELF_TESTS */
2c31ae7c94db import from yans
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   526