#pragma once namespace search { struct SearchIndexHeader { public: enum class Version : uint8_t { V0 = 0, V1 = 1, V2 = 2, Latest = V2 }; template void Serialize(Sink & sink) const { CHECK_EQUAL(static_cast(m_version), static_cast(Version::V2), ()); WriteToSink(sink, static_cast(m_version)); WriteToSink(sink, m_indexOffset); WriteToSink(sink, m_indexSize); } void Read(Reader & reader) { NonOwningReaderSource source(reader); m_version = static_cast(ReadPrimitiveFromSource(source)); CHECK_EQUAL(static_cast(m_version), static_cast(Version::V2), ()); m_indexOffset = ReadPrimitiveFromSource(source); m_indexSize = ReadPrimitiveFromSource(source); } Version m_version = Version::Latest; // All offsets are relative to the start of the section (offset of header is zero). uint32_t m_indexOffset = 0; uint32_t m_indexSize = 0; }; } // namespace search