#pragma once #include "coding/endianness.hpp" #include #include template std::enable_if_t::value || std::is_enum::value, void> WriteToSink( Sink & sink, T const & v) { T const t = SwapIfBigEndianMacroBased(v); sink.Write(&t, sizeof(T)); } template void WriteZeroesToSink(Sink & sink, uint64_t size) { uint8_t const zeroes[256] = { 0 }; for (uint64_t i = 0; i < (size >> 8); ++i) sink.Write(zeroes, 256); sink.Write(zeroes, size & 255); } template class WriterFunctor { public: explicit WriterFunctor(Sink & sink) : m_sink(sink) {} template void operator() (T const & t) const { m_sink.Write(&t, sizeof(T)); } private: Sink & m_sink; };