Skip to content

Commit

Permalink
Making metadata block in DRC files deterministic.
Browse files Browse the repository at this point in the history
  • Loading branch information
Igor Vytyaz committed Sep 13, 2019
1 parent 9fa96af commit adb34a7
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 12 deletions.
10 changes: 5 additions & 5 deletions src/draco/metadata/metadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
#include <cstring>
#include <memory>
#include <string>
#include <unordered_map>
#include <map>
#include <vector>

#include "draco/core/hash_utils.h"
Expand Down Expand Up @@ -150,10 +150,10 @@ class Metadata {
void RemoveEntry(const std::string &name);

int num_entries() const { return static_cast<int>(entries_.size()); }
const std::unordered_map<std::string, EntryValue> &entries() const {
const std::map<std::string, EntryValue> &entries() const {
return entries_;
}
const std::unordered_map<std::string, std::unique_ptr<Metadata>>
const std::map<std::string, std::unique_ptr<Metadata>>
&sub_metadatas() const {
return sub_metadatas_;
}
Expand All @@ -178,8 +178,8 @@ class Metadata {
return itr->second.GetValue(entry_value);
}

std::unordered_map<std::string, EntryValue> entries_;
std::unordered_map<std::string, std::unique_ptr<Metadata>> sub_metadatas_;
std::map<std::string, EntryValue> entries_;
std::map<std::string, std::unique_ptr<Metadata>> sub_metadatas_;

friend struct MetadataHasher;
};
Expand Down
7 changes: 3 additions & 4 deletions src/draco/metadata/metadata_encoder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ namespace draco {

bool MetadataEncoder::EncodeMetadata(EncoderBuffer *out_buffer,
const Metadata *metadata) {
const std::unordered_map<std::string, EntryValue> &entries =
metadata->entries();
const std::map<std::string, EntryValue> &entries = metadata->entries();
// Encode number of entries.
EncodeVarint(static_cast<uint32_t>(metadata->num_entries()), out_buffer);
// Encode all entries.
Expand All @@ -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<std::string, std::unique_ptr<Metadata>>
&sub_metadatas = metadata->sub_metadatas();
const std::map<std::string, std::unique_ptr<Metadata>> &sub_metadatas =
metadata->sub_metadatas();
// Encode number of sub-metadata
EncodeVarint(static_cast<uint32_t>(sub_metadatas.size()), out_buffer);
// Encode each sub-metadata
Expand Down
6 changes: 3 additions & 3 deletions src/draco/metadata/metadata_encoder_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string, draco::EntryValue> &entries0 =
const std::map<std::string, draco::EntryValue> &entries0 =
metadata0.entries();
const std::unordered_map<std::string, draco::EntryValue> &entries1 =
const std::map<std::string, draco::EntryValue> &entries1 =
metadata1.entries();
for (const auto &entry : entries0) {
const std::string &entry_name = entry.first;
Expand All @@ -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<std::string, std::unique_ptr<draco::Metadata>>
const std::map<std::string, std::unique_ptr<draco::Metadata>>
&sub_metadatas0 = metadata0.sub_metadatas();
// Encode each sub-metadata
for (auto &&sub_metadata_entry0 : sub_metadatas0) {
Expand Down

0 comments on commit adb34a7

Please sign in to comment.