20#ifndef PLYWOOT_BINARY_WRITER_POLICY_HPP
21#define PLYWOOT_BINARY_WRITER_POLICY_HPP
30namespace plywoot::detail {
33template<
typename Endianness>
34class BinaryWriterPolicy
37 BinaryWriterPolicy(std::ostream &os) : os_{os} {}
41 template<
typename T,
typename EndiannessDependent = Endianness>
42 void writeNumber(T t)
const
44 if constexpr (std::is_same_v<EndiannessDependent, HostEndian>)
46 os_.write(
reinterpret_cast<const char *
>(&t),
sizeof(T));
51 os_.write(
reinterpret_cast<const char *
>(&bs),
sizeof(T));
59 template<
typename PlySizeT,
typename PlyT,
typename SrcT,
typename EndiannessDependent = Endianness>
60 void writeList(
const SrcT *t, std::size_t n)
const
62 writeNumber<PlySizeT>(n);
63 writeNumbers<PlyT, SrcT>(t, n);
68 template<
typename PlyT,
typename SrcT,
typename EndiannessDependent = Endianness>
69 void writeNumbers(
const SrcT *t, std::size_t n)
const
71 if constexpr (std::is_same_v<PlyT, SrcT> && std::is_same_v<EndiannessDependent, HostEndian>)
73 os_.write(
reinterpret_cast<const char *
>(t),
sizeof(SrcT) * n);
77 for (std::size_t i = 0; i < n; ++i) { writeNumber<PlyT>(*t++); }
86 void writeMissingProperties(PlyPropertyConstIterator first, PlyPropertyConstIterator last)
const
90 switch (first->isList() ? first->sizeType() : first->type())
92 case PlyDataType::Char:
95 case PlyDataType::UChar:
96 writeNumber<unsigned char>(0);
98 case PlyDataType::Short:
99 writeNumber<short>(0);
101 case PlyDataType::UShort:
102 writeNumber<unsigned short>(0);
104 case PlyDataType::Int:
107 case PlyDataType::UInt:
108 writeNumber<unsigned int>(0);
110 case PlyDataType::Float:
111 writeNumber<float>(0);
113 case PlyDataType::Double:
114 writeNumber<double>(0);
122 void writeNewline()
const {}
124 void writeTokenSeparator()
const {}
127 mutable detail::BufferedOStream os_;
BinaryWriterPolicy< BigEndian > BinaryBigEndianWriterPolicy
Convenience type alias for the binary big endian writer policy.
BinaryWriterPolicy< LittleEndian > BinaryLittleEndianWriterPolicy
Convenience type alias for the binary little endian writer policy.