A Discrete-Event Network Simulator
API
byte-tag-list.h
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2008 INRIA
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation;
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17  *
18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
19  */
20 #ifndef BYTE_TAG_LIST_H
21 #define BYTE_TAG_LIST_H
22 
23 #define __STDC_LIMIT_MACROS
24 #include <stdint.h>
25 #include "ns3/type-id.h"
26 #include "tag-buffer.h"
27 
28 namespace ns3 {
29 
30 struct ByteTagListData;
31 
64 {
65 public:
72  class Iterator
73  {
74 public:
81  struct Item
82  {
84  uint32_t size;
85  int32_t start;
86  int32_t end;
88  Item (TagBuffer buf);
89 private:
90  friend class ByteTagList;
91  friend class ByteTagList::Iterator;
92  };
93 
99  bool HasNext (void) const;
100 
106  struct ByteTagList::Iterator::Item Next (void);
107 
113  uint32_t GetOffsetStart (void) const;
114 private:
115  friend class ByteTagList;
116 
125  Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd, int32_t adjustment);
126 
130  void PrepareForNext (void);
131  uint8_t *m_current;
132  uint8_t *m_end;
133  int32_t m_offsetStart;
134  int32_t m_offsetEnd;
135  int32_t m_adjustment;
136  uint32_t m_nextTid;
137  uint32_t m_nextSize;
138  int32_t m_nextStart;
139  int32_t m_nextEnd;
140  };
141 
142  ByteTagList ();
143 
152  ByteTagList (const ByteTagList &o);
153 
164  ~ByteTagList ();
165 
176  TagBuffer Add (TypeId tid, uint32_t bufferSize, int32_t start, int32_t end);
177 
183  void Add (const ByteTagList &o);
184 
189  void RemoveAll (void);
190 
202  ByteTagList::Iterator Begin (int32_t offsetStart, int32_t offsetEnd) const;
203 
209  inline void Adjust (int32_t adjustment);
210 
218  void AddAtEnd (int32_t appendOffset);
226  void AddAtStart (int32_t prependOffset);
227 
228 private:
234  ByteTagList::Iterator BeginAll (void) const;
235 
241  struct ByteTagListData *Allocate (uint32_t size);
242 
247  void Deallocate (struct ByteTagListData *data);
248 
249  int32_t m_minStart;
250  int32_t m_maxEnd;
251  int32_t m_adjustment;
252  uint32_t m_used;
254 };
255 
256 void
257 ByteTagList::Adjust (int32_t adjustment)
258 {
259  m_adjustment += adjustment;
260 }
261 
262 } // namespace ns3
263 
264 #endif /* BYTE_TAG_LIST_H */
ByteTagList & operator=(const ByteTagList &o)
Assignment operator, deallocates current data and assigns value of passed in ByteTagList.
struct ByteTagListData * m_data
the ByteTagListData structure
def start()
Definition: core.py:1482
keep track of the byte tags stored in a packet.
Definition: byte-tag-list.h:63
bool HasNext(void) const
Used to determine if the iterator is at the end of the byteTagList.
TagBuffer Add(TypeId tid, uint32_t bufferSize, int32_t start, int32_t end)
void Adjust(int32_t adjustment)
Adjust the offsets stored internally by the adjustment delta.
uint32_t m_nextTid
TypeId of the next tag.
void Deallocate(struct ByteTagListData *data)
Deallocates a ByteTagListData.
uint8_t * m_current
Current tag.
int32_t m_offsetEnd
Offset to the end of the tag from the virtual byte buffer.
void AddAtEnd(int32_t appendOffset)
Make sure that all offsets are smaller than appendOffset which represents the location where new byte...
void PrepareForNext(void)
Prepare the iterator for the next tag.
void RemoveAll(void)
Removes all of the tags from the ByteTagList.
Internal representation of the byte tags stored in a packet.
uint32_t m_nextSize
Size of the next tag.
uint8_t data[writeSize]
int32_t start
offset to the start of the tag from the virtual byte buffer
Definition: byte-tag-list.h:85
struct ByteTagList::Iterator::Item Next(void)
Returns the next Item from the ByteTagList.
struct ByteTagListData * Allocate(uint32_t size)
Allocate the memory for the ByteTagListData.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Iterator(uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd, int32_t adjustment)
Constructor.
int32_t m_minStart
minimal start offset
int32_t m_nextStart
Start of the next tag.
uint32_t GetOffsetStart(void) const
Returns the offset from the start of the virtual byte buffer to the ByteTagList.
int32_t end
offset to the end of the tag from the virtual byte buffer
Definition: byte-tag-list.h:86
uint32_t m_used
the number of used bytes in the buffer
ByteTagList::Iterator BeginAll(void) const
Returns an iterator pointing to the very first tag in this list.
int32_t m_offsetStart
Offset to the start of the tag from the virtual byte buffer.
TypeId tid
type of the tag
Definition: byte-tag-list.h:83
uint32_t size
size of tag data
Definition: byte-tag-list.h:84
int32_t m_adjustment
adjustment to byte tag offsets
ByteTagList::Iterator Begin(int32_t offsetStart, int32_t offsetEnd) const
TagBuffer buf
the data for the tag as generated by Tag::Serialize
Definition: byte-tag-list.h:87
An iterator for iterating through a byte tag list.
Definition: byte-tag-list.h:72
read and write tag data
Definition: tag-buffer.h:51
int32_t m_nextEnd
End of the next tag.
void AddAtStart(int32_t prependOffset)
Make sure that all offsets are bigger than prependOffset which represents the location where new byte...
int32_t m_maxEnd
maximal end offset
Item(TagBuffer buf)
constructs an item with the given TagBuffer
a unique identifier for an interface.
Definition: type-id.h:58
int32_t m_adjustment
Adjustment to byte tag offsets.
uint8_t * m_end
End tag.
An item specifies an individual tag within a byte buffer.
Definition: byte-tag-list.h:81