#pragma once #include "../base/std_serialization.hpp" #include "../storage/defines.hpp" #include "../coding/streams_sink.hpp" #include "../geometry/rect2d.hpp" #include "../std/string.hpp" #include "../std/tuple.hpp" #include "../base/start_mem_debug.hpp" namespace feature { /// All file sizes are in bytes class DataHeader { private: typedef tuple< pair // boundary; > params_t; params_t m_params; enum param_t { EBoundary }; template typename tuple_element::type const & Get() const { return m_params.get(); } template void Set(T const & t) { m_params.get() = t; } public: DataHeader(); /// Zeroes all fields void Reset(); m2::RectD const Bounds() const; void SetBounds(m2::RectD const & r); /// @name Serialization //@{ template void Save(TWriter & writer) const { stream::SinkWriterStream w(writer); w << MAPS_MAJOR_VERSION_BINARY_FORMAT; serial::save_tuple(w, m_params); } /// @return false if header can't be read (invalid or newer version format) template bool Load(TReader & reader) { stream::SinkReaderStream r(reader); uint32_t ver; r >> ver; if (ver > MAPS_MAJOR_VERSION_BINARY_FORMAT) return false; Reset(); serial::load_tuple(r, m_params); return true; } //@} }; } #include "../base/stop_mem_debug.hpp"