src/common/tag.h
author Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
Fri, 11 Jul 2008 18:39:19 +0100
changeset 3416 926ccb845111
parent 3208 1a754d09c4ba
child 4502 07d34c0d8d18
permissions -rw-r--r--
Rescan APIs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3050
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     2
/*
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     3
 * Copyright (c) 2008 INRIA
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     4
 *
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     7
 * published by the Free Software Foundation;
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     8
 *
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    12
 * GNU General Public License for more details.
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    13
 *
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    14
 * You should have received a copy of the GNU General Public License
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    15
 * along with this program; if not, write to the Free Software
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    17
 *
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    18
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
9cc612c6cd32 add missing license headers
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3049
diff changeset
    19
 */
3049
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3045
diff changeset
    20
#ifndef TAG_H
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3045
diff changeset
    21
#define TAG_H
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
#include "ns3/object-base.h"
3041
a624276a897b mtag -> tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3040
diff changeset
    24
#include "tag-buffer.h"
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
#include <stdint.h>
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
namespace ns3 {
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
3045
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    29
/**
3182
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 3082
diff changeset
    30
 * \ingroup packet
61fe7fe81ebd Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 3082
diff changeset
    31
 *
3045
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    32
 * \brief tag a set of bytes in a packet
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    33
 *
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    34
 * New kinds of tags can be created by subclassing this base class.
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    35
 */
3040
e11e106c7c19 Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3035
diff changeset
    36
class Tag : public ObjectBase
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
{
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
public:
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
  static TypeId GetTypeId (void);
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
3045
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    41
  /**
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    42
   * \returns the number of bytes required to serialize the data of the tag.
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    43
   *
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    44
   * This method is typically invoked by Packet::AddTag just prior to calling
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    45
   * Tag::Serialize.
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    46
   */
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
  virtual uint32_t GetSerializedSize (void) const = 0;
3045
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    48
  /**
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    49
   * \param i the buffer to write data into.
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    50
   *
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    51
   * Write the content of the tag in the provided tag buffer.
3193
72be532011a3 doxygen updates
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    52
   * DO NOT attempt to write more bytes than you requested
72be532011a3 doxygen updates
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    53
   * with Tag::GetSerializedSize.
3045
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    54
   */
3040
e11e106c7c19 Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3035
diff changeset
    55
  virtual void Serialize (TagBuffer i) const = 0;
3045
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    56
  /**
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    57
   * \param i the buffer to read data from.
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    58
   *
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    59
   * Read the content of the tag from the provided tag buffer.
3193
72be532011a3 doxygen updates
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    60
   * DO NOT attempt to read more bytes than you wrote with
72be532011a3 doxygen updates
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3182
diff changeset
    61
   * Tag::Serialize.
3045
895cb1b6a903 add dox doc
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3041
diff changeset
    62
   */
3040
e11e106c7c19 Mtag -> Tag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3035
diff changeset
    63
  virtual void Deserialize (TagBuffer i) = 0;
3208
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3193
diff changeset
    64
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3193
diff changeset
    65
  /**
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3193
diff changeset
    66
   * \param os the stream to print to
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3193
diff changeset
    67
   *
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3193
diff changeset
    68
   * This method is typically invoked from the Packet::PrintTags method
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3193
diff changeset
    69
   */
1a754d09c4ba bug 200: Packet::PrintTags is not implemented.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3193
diff changeset
    70
  virtual void Print (std::ostream &os) const = 0;
3035
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
};
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
} // namespace ns3
644bfc099992 a new tag implementation: Mtag
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
3049
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 3045
diff changeset
    75
#endif /* TAG_H */