20#ifndef PLYWOOT_WRITER_VARIANT_HPP
21#define PLYWOOT_WRITER_VARIANT_HPP
32namespace plywoot::detail {
37 WriterVariant(std::ostream &os, PlyFormat format) : variant_{makeVariant(os, format)} {}
39 void write(
const PlyElement &element,
const std::uint8_t *src, std::size_t alignment)
const
42 [&element, src, alignment](
auto &&writer) { writer.write(element, src, alignment); }, variant_);
45 template<
typename... Ts>
46 void write(
const PlyElement &element,
const reflect::Layout<Ts...> layout)
const
48 std::visit([&element, layout](
auto &&writer) { writer.write(element, layout); }, variant_);
52 using Variant = std::variant<
53 detail::Writer<detail::AsciiWriterPolicy>,
54 detail::Writer<detail::BinaryBigEndianWriterPolicy>,
55 detail::Writer<detail::BinaryLittleEndianWriterPolicy>>;
57 Variant makeVariant(std::ostream &os, PlyFormat format)
61 case PlyFormat::Ascii:
62 return Variant{std::in_place_type<detail::Writer<detail::AsciiWriterPolicy>>, os};
63 case PlyFormat::BinaryBigEndian:
64 return Variant{std::in_place_type<detail::Writer<detail::BinaryBigEndianWriterPolicy>>, os};
65 case PlyFormat::BinaryLittleEndian:
70 return Variant{std::in_place_type<detail::Writer<detail::BinaryLittleEndianWriterPolicy>>, os};