src/common/mtag-buffer.cc
changeset 3035 644bfc099992
child 3037 b0f12f3a75b3
equal deleted inserted replaced
3034:b96c58f42432 3035:644bfc099992
       
     1 #include "mtag-buffer.h"
       
     2 #include "ns3/assert.h"
       
     3 
       
     4 namespace ns3 {
       
     5 
       
     6 void 
       
     7 MtagBuffer::WriteU8 (uint8_t v)
       
     8 {
       
     9   NS_ASSERT (m_current + 1 <= m_end);
       
    10   *m_current = v;
       
    11   m_current++;
       
    12 }
       
    13 void 
       
    14 MtagBuffer::WriteU16 (uint16_t data)
       
    15 {
       
    16   WriteU8 ((data >> 0) & 0xff);
       
    17   WriteU8 ((data >> 8) & 0xff);
       
    18 }
       
    19 void 
       
    20 MtagBuffer::WriteU32 (uint32_t data)
       
    21 {
       
    22   WriteU8 ((data >> 0) & 0xff);
       
    23   WriteU8 ((data >> 8) & 0xff);
       
    24   WriteU8 ((data >> 16) & 0xff);
       
    25   WriteU8 ((data >> 24) & 0xff);
       
    26 }
       
    27 void 
       
    28 MtagBuffer::WriteU64 (uint64_t data)
       
    29 {
       
    30   WriteU8 ((data >> 0) & 0xff);
       
    31   WriteU8 ((data >> 8) & 0xff);
       
    32   WriteU8 ((data >> 16) & 0xff);
       
    33   WriteU8 ((data >> 24) & 0xff);
       
    34   WriteU8 ((data >> 32) & 0xff);
       
    35   WriteU8 ((data >> 40) & 0xff);
       
    36   WriteU8 ((data >> 48) & 0xff);
       
    37   WriteU8 ((data >> 54) & 0xff);
       
    38 }
       
    39 uint8_t  
       
    40 MtagBuffer::ReadU8 (void)
       
    41 {
       
    42   NS_ASSERT (m_current + 1 <= m_end);
       
    43   uint8_t v;
       
    44   v = *m_current;
       
    45   m_current++;
       
    46   return v;
       
    47 }
       
    48 uint16_t 
       
    49 MtagBuffer::ReadU16 (void)
       
    50 {
       
    51   uint8_t byte0 = ReadU8 ();
       
    52   uint8_t byte1 = ReadU8 ();
       
    53   uint16_t data = byte1;
       
    54   data <<= 8;
       
    55   data |= byte0;
       
    56   return data;
       
    57 }
       
    58 uint32_t 
       
    59 MtagBuffer::ReadU32 (void)
       
    60 {
       
    61   uint8_t byte0 = ReadU8 ();
       
    62   uint8_t byte1 = ReadU8 ();
       
    63   uint8_t byte2 = ReadU8 ();
       
    64   uint8_t byte3 = ReadU8 ();
       
    65   uint32_t data = byte3;
       
    66   data <<= 8;
       
    67   data |= byte2;
       
    68   data <<= 8;
       
    69   data |= byte1;
       
    70   data <<= 8;
       
    71   data |= byte0;
       
    72   return data;
       
    73 }
       
    74 uint64_t 
       
    75 MtagBuffer::ReadU64 (void)
       
    76 {
       
    77   uint8_t byte0 = ReadU8 ();
       
    78   uint8_t byte1 = ReadU8 ();
       
    79   uint8_t byte2 = ReadU8 ();
       
    80   uint8_t byte3 = ReadU8 ();
       
    81   uint8_t byte4 = ReadU8 ();
       
    82   uint8_t byte5 = ReadU8 ();
       
    83   uint8_t byte6 = ReadU8 ();
       
    84   uint8_t byte7 = ReadU8 ();
       
    85   uint32_t data = byte7;
       
    86   data <<= 8;
       
    87   data |= byte6;
       
    88   data <<= 8;
       
    89   data |= byte5;
       
    90   data <<= 8;
       
    91   data |= byte4;
       
    92   data <<= 8;
       
    93   data |= byte3;
       
    94   data <<= 8;
       
    95   data |= byte2;
       
    96   data <<= 8;
       
    97   data |= byte1;
       
    98   data <<= 8;
       
    99   data |= byte0;
       
   100 
       
   101   return data;
       
   102 }
       
   103 MtagBuffer::MtagBuffer (uint8_t *start, uint8_t *end)
       
   104   : m_current (start),
       
   105     m_end (end)
       
   106 {}
       
   107 
       
   108 void 
       
   109 MtagBuffer::TrimAtEnd (uint32_t trim)
       
   110 {
       
   111   NS_ASSERT (m_current <= (m_end - trim));
       
   112   m_end -= trim;
       
   113 }
       
   114 
       
   115 void 
       
   116 MtagBuffer::CopyFrom (MtagBuffer o)
       
   117 {
       
   118   uint32_t size = o.m_end - o.m_current;
       
   119   NS_ASSERT (size <= m_end - m_current);
       
   120   memcpy (m_current, o.m_current, size);
       
   121   m_current += size;
       
   122 }
       
   123 
       
   124 } // namespace ns3