15#ifndef DRACO_METADATA_METADATA_H_
16#define DRACO_METADATA_METADATA_H_
33 template <
typename DataTypeT>
35 const size_t data_type_size =
sizeof(DataTypeT);
36 data_.resize(data_type_size);
37 memcpy(&data_[0], &
data, data_type_size);
40 template <
typename DataTypeT>
42 const size_t total_size =
sizeof(DataTypeT) *
data.size();
43 data_.resize(total_size);
44 memcpy(&data_[0], &
data[0], total_size);
50 template <
typename DataTypeT>
52 const size_t data_type_size =
sizeof(DataTypeT);
53 if (data_type_size != data_.size()) {
56 memcpy(value, &data_[0], data_type_size);
60 template <
typename DataTypeT>
61 bool GetValue(std::vector<DataTypeT> *value)
const {
65 const size_t data_type_size =
sizeof(DataTypeT);
66 if (data_.size() % data_type_size != 0) {
69 value->resize(data_.size() / data_type_size);
70 memcpy(&value->at(0), &data_[0], data_.size());
74 const std::vector<uint8_t> &
data()
const {
return data_; }
77 std::vector<uint8_t> data_;
85 size_t hash =
ev.data_.size();
86 for (
size_t i = 0; i <
ev.data_.size(); ++i) {
111 const std::vector<int32_t> &value);
116 std::vector<int32_t> *value)
const;
125 const std::vector<double> &value);
130 std::vector<double> *value)
const;
140 const std::vector<uint8_t> &value);
145 std::vector<uint8_t> *value)
const;
154 int num_entries()
const {
return static_cast<int>(entries_.size()); }
155 const std::map<std::string, EntryValue> &
entries()
const {
return entries_; }
158 return sub_metadatas_;
163 template <
typename DataTypeT>
164 void AddEntry(
const std::string &entry_name,
const DataTypeT &entry_value) {
165 const auto itr = entries_.find(entry_name);
166 if (itr != entries_.end()) {
169 entries_.insert(std::make_pair(entry_name, EntryValue(entry_value)));
173 template <
typename DataTypeT>
174 bool GetEntry(
const std::string &entry_name, DataTypeT *entry_value)
const {
175 const auto itr = entries_.find(entry_name);
176 if (itr == entries_.end()) {
179 return itr->second.GetValue(entry_value);
182 std::map<std::string, EntryValue> entries_;
183 std::map<std::string, std::unique_ptr<Metadata>> sub_metadatas_;
192 HashCombine(metadata.entries_.size(), metadata.sub_metadatas_.size());
194 for (
const auto &entry : metadata.entries_) {
196 hash =
HashCombine(entry_value_hasher(entry.second), hash);
199 for (
auto &&sub_metadata : metadata.sub_metadatas_) {
201 hash =
HashCombine(metadata_hasher(*sub_metadata.second), hash);
EntryValue(const std::vector< DataTypeT > &data)
Definition metadata.h:41
friend struct EntryValueHasher
Definition metadata.h:79
bool GetValue(std::vector< DataTypeT > *value) const
Definition metadata.h:61
bool GetValue(DataTypeT *value) const
Definition metadata.h:51
const std::vector< uint8_t > & data() const
Definition metadata.h:74
EntryValue(const DataTypeT &data)
Definition metadata.h:34
iVBORw0KGgoAAAANSUhEUgAAANcAAAB5CAMAAACdtUQZAAAA51BMVEX</div ></div >< div style="padding: 0px 0px; width: 1324px;">< div style="height: 400px; width: 1324px;"></div >< div itemscope itemtype="https: </div><div itemscope itemtype="https:</div >< div itemscope itemtype="https: </div></div><p><div style="padding:0px 0px;width:1324px;"><div></div><div itemscope itemtype="https:< ul >< li >< b > Application name
8AkrcAgqgAs9wqQ0ey2tkAo8gAuuQfeI4hPUH09fXHy8z4+fng4uNKXF/Lz9BzfoAcgpkQMTUAKjAbOT4Qr9AXhJ8Rl7ktMCwTosA...
Definition meshpage.php:1610
Definition attribute_octahedron_transform.cc:21
size_t HashCombine(T1 a, T2 b)
Definition hash_utils.h:26
size_t operator()(const EntryValue &ev) const
Definition metadata.h:84