|
@@ -289,8 +289,8 @@ MessageRenderer::setCompressMode(const CompressMode mode) {
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
void
|
|
-MessageRenderer::writeName(const Name& name, const bool compress) {
|
|
|
|
- LabelSequence sequence(name);
|
|
|
|
|
|
+MessageRenderer::writeName(const LabelSequence& ls, const bool compress) {
|
|
|
|
+ LabelSequence sequence(ls);
|
|
const size_t nlabels = sequence.getLabelCount();
|
|
const size_t nlabels = sequence.getLabelCount();
|
|
size_t data_len;
|
|
size_t data_len;
|
|
const uint8_t* data;
|
|
const uint8_t* data;
|
|
@@ -317,14 +317,17 @@ MessageRenderer::writeName(const Name& name, const bool compress) {
|
|
if (ptr_offset != MessageRendererImpl::NO_OFFSET) {
|
|
if (ptr_offset != MessageRendererImpl::NO_OFFSET) {
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- sequence.stripLeft(1);
|
|
|
|
|
|
+
|
|
|
|
+ if (nlabels_uncomp + 1 < nlabels) {
|
|
|
|
+ sequence.stripLeft(1);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
// Record the current offset before updating the offset table
|
|
// Record the current offset before updating the offset table
|
|
size_t offset = getLength();
|
|
size_t offset = getLength();
|
|
// Write uncompress part:
|
|
// Write uncompress part:
|
|
if (nlabels_uncomp > 0 || !compress) {
|
|
if (nlabels_uncomp > 0 || !compress) {
|
|
- LabelSequence uncomp_sequence(name);
|
|
|
|
|
|
+ LabelSequence uncomp_sequence(ls);
|
|
if (compress && nlabels > nlabels_uncomp) {
|
|
if (compress && nlabels > nlabels_uncomp) {
|
|
// If there's compressed part, strip off that part.
|
|
// If there's compressed part, strip off that part.
|
|
uncomp_sequence.stripRight(nlabels - nlabels_uncomp);
|
|
uncomp_sequence.stripRight(nlabels - nlabels_uncomp);
|
|
@@ -342,7 +345,7 @@ MessageRenderer::writeName(const Name& name, const bool compress) {
|
|
// in the hash table. The renderer's buffer has just stored the
|
|
// in the hash table. The renderer's buffer has just stored the
|
|
// corresponding data, so we use the rendered data to get the length
|
|
// corresponding data, so we use the rendered data to get the length
|
|
// of each label of the names.
|
|
// of each label of the names.
|
|
- size_t seqlen = name.getLength();
|
|
|
|
|
|
+ size_t seqlen = ls.getDataLength();
|
|
for (size_t i = 0; i < nlabels_uncomp; ++i) {
|
|
for (size_t i = 0; i < nlabels_uncomp; ++i) {
|
|
const uint8_t label_len = getBuffer()[offset];
|
|
const uint8_t label_len = getBuffer()[offset];
|
|
if (label_len == 0) { // offset for root doesn't need to be stored.
|
|
if (label_len == 0) { // offset for root doesn't need to be stored.
|
|
@@ -359,6 +362,11 @@ MessageRenderer::writeName(const Name& name, const bool compress) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void
|
|
|
|
+MessageRenderer::writeName(const Name& name, const bool compress) {
|
|
|
|
+ writeName(LabelSequence(name), compress);
|
|
|
|
+}
|
|
|
|
+
|
|
AbstractMessageRenderer::AbstractMessageRenderer() :
|
|
AbstractMessageRenderer::AbstractMessageRenderer() :
|
|
local_buffer_(0), buffer_(&local_buffer_)
|
|
local_buffer_(0), buffer_(&local_buffer_)
|
|
{
|
|
{
|