28 : m_buffer(new
Buffer(totalReserve))
30 m_begin = m_end = m_buffer->end() - (reserveFromBack < totalReserve ? reserveFromBack : 0);
37 , m_end(m_buffer->
begin() + (block.
end() - m_buffer->
begin()))
47 if ((m_end + size) > m_buffer->end())
54 if ((m_buffer->begin() +
size) > m_begin)
62 return Block(m_buffer,
70 if (size < m_buffer->
size()) {
71 size = m_buffer->size();
75 size_t diffEnd = m_buffer->end() - m_end;
76 size_t diffBegin = m_buffer->end() - m_begin;
79 std::copy_backward(m_buffer->begin(), m_buffer->end(), buf->end());
83 m_end = m_buffer->end() - diffEnd;
84 m_begin = m_buffer->end() - diffBegin;
87 size_t diffEnd = m_end - m_buffer->begin();
88 size_t diffBegin = m_begin - m_buffer->begin();
91 std::copy(m_buffer->begin(), m_buffer->end(), buf->begin());
95 m_end = m_buffer->begin() + diffEnd;
96 m_begin = m_buffer->begin() + diffBegin;
130 std::copy(array, array + length, m_begin);
139 std::copy(array, array + length, m_end);
148 if (varNumber < 253) {
152 else if (varNumber <= std::numeric_limits<uint16_t>::max()) {
153 uint16_t value = htobe16(static_cast<uint16_t>(varNumber));
158 else if (varNumber <= std::numeric_limits<uint32_t>::max()) {
159 uint32_t value = htobe32(static_cast<uint32_t>(varNumber));
165 uint64_t value = htobe64(varNumber);
175 if (varNumber < 253) {
179 else if (varNumber <= std::numeric_limits<uint16_t>::max()) {
181 uint16_t value = htobe16(static_cast<uint16_t>(varNumber));
185 else if (varNumber <= std::numeric_limits<uint32_t>::max()) {
187 uint32_t value = htobe32(static_cast<uint32_t>(varNumber));
193 uint64_t value = htobe64(varNumber);
203 if (varNumber <= std::numeric_limits<uint8_t>::max()) {
204 return prependByte(static_cast<uint8_t>(varNumber));
206 else if (varNumber <= std::numeric_limits<uint16_t>::max()) {
207 uint16_t value = htobe16(static_cast<uint16_t>(varNumber));
210 else if (varNumber <= std::numeric_limits<uint32_t>::max()) {
211 uint32_t value = htobe32(static_cast<uint32_t>(varNumber));
215 uint64_t value = htobe64(varNumber);
223 if (varNumber <= std::numeric_limits<uint8_t>::max()) {
224 return appendByte(static_cast<uint8_t>(varNumber));
226 else if (varNumber <= std::numeric_limits<uint16_t>::max()) {
227 uint16_t value = htobe16(static_cast<uint16_t>(varNumber));
230 else if (varNumber <= std::numeric_limits<uint32_t>::max()) {
231 uint32_t value = htobe32(static_cast<uint32_t>(varNumber));
235 uint64_t value = htobe64(varNumber);
size_t prependByteArray(const uint8_t *array, size_t length)
Prepend a byte array array of length length.
void reserveFront(size_t size)
Reserve at least isze bytes at the beginning of the underlying buffer.
size_t appendVarNumber(uint64_t varNumber)
Prepend VarNumber varNumber of NDN TLV encoding.
iterator begin()
Get an iterator pointing to the first byte of the encoded buffer.
Copyright (c) 2013-2017 Regents of the University of California.
size_t size() const
Get size of the encoded buffer.
size_t prependByte(uint8_t value)
Prepend a byte.
iterator end()
Get an iterator pointing to the past-the-end byte of the encoded buffer.
Represents a TLV element of NDN packet format.
void reserve(size_t size, bool addInFront)
Reserve size bytes for the underlying buffer.
void reserveBack(size_t size)
Reserve at least size bytes at the back of the underlying buffer.
size_t size() const
Get size of encoded wire, including Type-Length-Value.
size_t prependVarNumber(uint64_t varNumber)
Prepend VarNumber varNumber of NDN TLV encoding.
size_t prependBlock(const Block &block)
Prepend TLV block block.
size_t appendBlock(const Block &block)
Append TLV block block.
shared_ptr< Buffer > getBuffer()
Get underlying buffer.
Block block(bool verifyLength=true) const
Create Block from the underlying buffer.
size_t appendByte(uint8_t value)
Append a byte.
size_t prependByteArrayBlock(uint32_t type, const uint8_t *array, size_t arraySize)
Prepend TLV block of type type and value from buffer array of size arraySize.
size_t value_size() const
Get size of TLV-VALUE aka TLV-LENGTH.
size_t appendByteArray(const uint8_t *array, size_t length)
Append a byte array array of length length.
uint32_t type() const
Get TLV-TYPE.
uint8_t * buf()
Get a pointer to the first byte of the encoded buffer.
const uint8_t * wire() const
Get pointer to encoded wire.
bool hasWire() const
Check if the Block has fully encoded wire.
const uint8_t * value() const
Get pointer to TLV-VALUE.
size_t prependNonNegativeInteger(uint64_t integer)
Prepend non-negative integer integer of NDN TLV encoding.
size_t appendByteArrayBlock(uint32_t type, const uint8_t *array, size_t arraySize)
Append TLV block of type type and value from buffer array of size arraySize.
size_t appendNonNegativeInteger(uint64_t integer)
Append non-negative integer integer of NDN TLV encoding.
General-purpose automatically managed/resized buffer.
Encoder(size_t totalReserve=MAX_NDN_PACKET_SIZE, size_t reserveFromBack=400)
Create instance of the encoder with the specified reserved sizes.