From adb34a7af2b775f8831c047c6a026d8038b97cc4 Mon Sep 17 00:00:00 2001 From: Igor Vytyaz Date: Fri, 13 Sep 2019 10:49:12 -0700 Subject: [PATCH] Making metadata block in DRC files deterministic. --- src/draco/metadata/metadata.h | 10 +++++----- src/draco/metadata/metadata_encoder.cc | 7 +++---- src/draco/metadata/metadata_encoder_test.cc | 6 +++--- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/draco/metadata/metadata.h b/src/draco/metadata/metadata.h index c483949..bf0be36 100644 --- a/src/draco/metadata/metadata.h +++ b/src/draco/metadata/metadata.h @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include "draco/core/hash_utils.h" @@ -150,10 +150,10 @@ class Metadata { void RemoveEntry(const std::string &name); int num_entries() const { return static_cast(entries_.size()); } - const std::unordered_map &entries() const { + const std::map &entries() const { return entries_; } - const std::unordered_map> + const std::map> &sub_metadatas() const { return sub_metadatas_; } @@ -178,8 +178,8 @@ class Metadata { return itr->second.GetValue(entry_value); } - std::unordered_map entries_; - std::unordered_map> sub_metadatas_; + std::map entries_; + std::map> sub_metadatas_; friend struct MetadataHasher; }; diff --git a/src/draco/metadata/metadata_encoder.cc b/src/draco/metadata/metadata_encoder.cc index c98a334..6e85ce6 100644 --- a/src/draco/metadata/metadata_encoder.cc +++ b/src/draco/metadata/metadata_encoder.cc @@ -20,8 +20,7 @@ namespace draco { bool MetadataEncoder::EncodeMetadata(EncoderBuffer *out_buffer, const Metadata *metadata) { - const std::unordered_map &entries = - metadata->entries(); + const std::map &entries = metadata->entries(); // Encode number of entries. EncodeVarint(static_cast(metadata->num_entries()), out_buffer); // Encode all entries. @@ -33,8 +32,8 @@ bool MetadataEncoder::EncodeMetadata(EncoderBuffer *out_buffer, EncodeVarint(data_size, out_buffer); out_buffer->Encode(entry_value.data(), data_size); } - const std::unordered_map> - &sub_metadatas = metadata->sub_metadatas(); + const std::map> &sub_metadatas = + metadata->sub_metadatas(); // Encode number of sub-metadata EncodeVarint(static_cast(sub_metadatas.size()), out_buffer); // Encode each sub-metadata diff --git a/src/draco/metadata/metadata_encoder_test.cc b/src/draco/metadata/metadata_encoder_test.cc index fbda613..d8f7f2f 100644 --- a/src/draco/metadata/metadata_encoder_test.cc +++ b/src/draco/metadata/metadata_encoder_test.cc @@ -75,9 +75,9 @@ class MetadataEncoderTest : public ::testing::Test { void CheckMetadatasAreEqual(const draco::Metadata &metadata0, const draco::Metadata &metadata1) { ASSERT_EQ(metadata0.num_entries(), metadata1.num_entries()); - const std::unordered_map &entries0 = + const std::map &entries0 = metadata0.entries(); - const std::unordered_map &entries1 = + const std::map &entries1 = metadata1.entries(); for (const auto &entry : entries0) { const std::string &entry_name = entry.first; @@ -90,7 +90,7 @@ class MetadataEncoderTest : public ::testing::Test { // Check nested metadata. ASSERT_EQ(metadata0.sub_metadatas().size(), metadata1.sub_metadatas().size()); - const std::unordered_map> + const std::map> &sub_metadatas0 = metadata0.sub_metadatas(); // Encode each sub-metadata for (auto &&sub_metadata_entry0 : sub_metadatas0) {