1.1 --- a/src/common/packet-metadata.cc Sat May 31 10:47:24 2008 -0700
1.2 +++ b/src/common/packet-metadata.cc Sat May 31 10:57:49 2008 -0700
1.3 @@ -186,101 +186,6 @@
1.4 buffer[2] = (value >> 16) & 0xff;
1.5 buffer[3] = (value >> 24) & 0xff;
1.6 }
1.7 -bool
1.8 -PacketMetadata::TryToAppend16 (uint16_t value, uint8_t **pBuffer, uint8_t *end)
1.9 -{
1.10 - uint8_t *start = *pBuffer;
1.11 - if (start + 1 < end)
1.12 - {
1.13 - start[0] = value & 0xff;
1.14 - start[1] = value >> 8;
1.15 - *pBuffer = start + 2;
1.16 - return true;
1.17 - }
1.18 - return false;
1.19 -}
1.20 -bool
1.21 -PacketMetadata::TryToAppend32 (uint32_t value, uint8_t **pBuffer, uint8_t *end)
1.22 -{
1.23 - uint8_t *start = *pBuffer;
1.24 - if (start + 3 < end)
1.25 - {
1.26 - start[0] = value & 0xff;
1.27 - start[1] = (value >> 8) & 0xff;
1.28 - start[2] = (value >> 16) & 0xff;
1.29 - start[3] = (value >> 24) & 0xff;
1.30 - *pBuffer = start + 4;
1.31 - return true;
1.32 - }
1.33 - return false;
1.34 -}
1.35 -bool
1.36 -PacketMetadata::TryToAppend (uint32_t value, uint8_t **pBuffer, uint8_t *end)
1.37 -{
1.38 - uint8_t *start = *pBuffer;
1.39 - if (value < 0x80 && start < end)
1.40 - {
1.41 - start[0] = value;
1.42 - *pBuffer = start + 1;
1.43 - return true;
1.44 - }
1.45 - if (value < 0x4000 && start + 1 < end)
1.46 - {
1.47 - uint8_t byte = value & (~0x80);
1.48 - start[0] = 0x80 | byte;
1.49 - value >>= 7;
1.50 - start[1] = value;
1.51 - *pBuffer = start + 2;
1.52 - return true;
1.53 - }
1.54 - if (value < 0x200000 && start + 2 < end)
1.55 - {
1.56 - uint8_t byte = value & (~0x80);
1.57 - start[0] = 0x80 | byte;
1.58 - value >>= 7;
1.59 - byte = value & (~0x80);
1.60 - start[1] = 0x80 | byte;
1.61 - value >>= 7;
1.62 - byte = value & (~0x80);
1.63 - start[2] = value;
1.64 - *pBuffer = start + 3;
1.65 - return true;
1.66 - }
1.67 - if (value < 0x10000000 && start + 3 < end)
1.68 - {
1.69 - uint8_t byte = value & (~0x80);
1.70 - start[0] = 0x80 | byte;
1.71 - value >>= 7;
1.72 - byte = value & (~0x80);
1.73 - start[1] = 0x80 | byte;
1.74 - value >>= 7;
1.75 - byte = value & (~0x80);
1.76 - start[2] = 0x80 | byte;
1.77 - value >>= 7;
1.78 - start[3] = value;
1.79 - *pBuffer = start + 4;
1.80 - return true;
1.81 - }
1.82 - if (start + 4 < end)
1.83 - {
1.84 - uint8_t byte = value & (~0x80);
1.85 - start[0] = 0x80 | byte;
1.86 - value >>= 7;
1.87 - byte = value & (~0x80);
1.88 - start[1] = 0x80 | byte;
1.89 - value >>= 7;
1.90 - byte = value & (~0x80);
1.91 - start[2] = 0x80 | byte;
1.92 - value >>= 7;
1.93 - byte = value & (~0x80);
1.94 - start[3] = 0x80 | byte;
1.95 - value >>= 7;
1.96 - start[4] = value;
1.97 - *pBuffer = start + 5;
1.98 - return true;
1.99 - }
1.100 - return false;
1.101 -}
1.102
1.103 void
1.104 PacketMetadata::AppendValueExtra (uint32_t value, uint8_t *buffer)
1.105 @@ -481,9 +386,6 @@
1.106 * \param extraItem the extra item data to write
1.107 * \param available the number of bytes which can
1.108 * be written without having to rewrite the buffer entirely.
1.109 - *
1.110 - * XXX: should rewrite the code below to avoid using
1.111 - * TryToAppend calls.
1.112 */
1.113 void
1.114 PacketMetadata::ReplaceTail (PacketMetadata::SmallItem *item,
1.115 @@ -507,27 +409,35 @@
1.116 available = m_data->m_size - m_tail;
1.117 }
1.118
1.119 - if (available >= 14 &&
1.120 + uint32_t typeUid = ((item->typeUid & 0x1) == 0x1)?item->typeUid:item->typeUid+1;
1.121 + uint32_t typeUidSize = GetUleb128Size (typeUid);
1.122 + uint32_t sizeSize = GetUleb128Size (item->size);
1.123 + uint32_t fragStartSize = GetUleb128Size (extraItem->fragmentStart);
1.124 + uint32_t fragEndSize = GetUleb128Size (extraItem->fragmentEnd);
1.125 + uint32_t n = 2 + 2 + typeUidSize + sizeSize + 2 + fragStartSize + fragEndSize + 4;
1.126 +
1.127 + if (available >= n &&
1.128 m_data->m_count == 1)
1.129 {
1.130 uint8_t *buffer = &m_data->m_data[m_tail];
1.131 - uint8_t *end = buffer + available;
1.132 -
1.133 Append16 (item->next, buffer);
1.134 buffer += 2;
1.135 Append16 (item->prev, buffer);
1.136 buffer += 2;
1.137 - if (TryToAppend (item->typeUid, &buffer, end) &&
1.138 - TryToAppend (item->size, &buffer, end) &&
1.139 - TryToAppend16 (item->chunkUid, &buffer, end) &&
1.140 - TryToAppend (extraItem->fragmentStart, &buffer, end) &&
1.141 - TryToAppend (extraItem->fragmentEnd, &buffer, end) &&
1.142 - TryToAppend32 (extraItem->packetUid, &buffer, end))
1.143 - {
1.144 - m_used = buffer - &m_data->m_data[0];
1.145 - m_data->m_dirtyEnd = m_used;
1.146 - return;
1.147 - }
1.148 + AppendValue (typeUid, buffer);
1.149 + buffer += typeUidSize;
1.150 + AppendValue (item->size, buffer);
1.151 + buffer += sizeSize;
1.152 + Append16 (item->chunkUid, buffer);
1.153 + buffer += 2;
1.154 + AppendValue (extraItem->fragmentStart, buffer);
1.155 + buffer += fragStartSize;
1.156 + AppendValue (extraItem->fragmentEnd, buffer);
1.157 + buffer += fragEndSize;
1.158 + Append32 (extraItem->packetUid, buffer);
1.159 + m_used = buffer - &m_data->m_data[0];
1.160 + m_data->m_dirtyEnd = m_used;
1.161 + return;
1.162 }
1.163
1.164 // create a copy of the packet.
2.1 --- a/src/common/packet-metadata.h Sat May 31 10:47:24 2008 -0700
2.2 +++ b/src/common/packet-metadata.h Sat May 31 10:57:49 2008 -0700
2.3 @@ -254,9 +254,6 @@
2.4 uint32_t ReadUleb128 (const uint8_t **pBuffer) const;
2.5 inline void Append16 (uint16_t value, uint8_t *buffer);
2.6 inline void Append32 (uint32_t value, uint8_t *buffer);
2.7 - inline bool TryToAppend (uint32_t value, uint8_t **pBuffer, uint8_t *end);
2.8 - inline bool TryToAppend32 (uint32_t value, uint8_t **pBuffer, uint8_t *end);
2.9 - inline bool TryToAppend16 (uint16_t value, uint8_t **pBuffer, uint8_t *end);
2.10 inline void AppendValue (uint32_t value, uint8_t *buffer);
2.11 void AppendValueExtra (uint32_t value, uint8_t *buffer);
2.12 inline void Reserve (uint32_t n);