22#include <fmt/format.h>
37 size_t buffer_chunk_size_;
40 FormatHandler(
size_t buffer_chunk_size = 64 * 1024) : buffer_chunk_size_(buffer_chunk_size) {}
45 for (
const auto &
b : blocks_) {
46 fwrite(
b.data(), 1,
b.size(), f);
54 for (
const auto &
b : blocks_) {
55 s.append(
b.data(),
b.size());
61 return blocks_.
size();
67 std::make_move_iterator(
v.blocks_.begin()),
68 std::make_move_iterator(
v.blocks_.end()));
74 write_impl(
"v {:.6f} {:.6f} {:.6f}\n", x, y,
z);
78 write_impl(
"v {:.6f} {:.6f} {:.6f} {:.4f} {:.4f} {:.4f}\n", x, y,
z, r, g,
b);
82 write_impl(
"vt {:.6f} {:.6f}\n", x, y);
86 write_impl(
"vn {:.4f} {:.4f} {:.4f}\n", x, y,
z);
98 write_impl(
" {}/{}/{}",
v, uv, n);
102 write_impl(
" {}//{}",
v, n);
106 write_impl(
" {}/{}",
v, uv);
110 write_impl(
" {}",
v);
114 write_impl(
"usemtl {}\n", s);
118 write_impl(
"mtllib {}\n", s);
122 write_impl(
"s {}\n", s);
126 write_impl(
"g {}\n", s);
130 write_impl(
"o {}\n", s);
134 write_impl(
"l {} {}\n", a,
b);
138 write_impl(
"cstype bspline\n");
142 write_impl(
"deg {}\n",
deg);
146 write_impl(
"curv 0.0 1.0");
154 write_impl(
"parm u 0.0");
158 write_impl(
" {:.6f}",
v);
162 write_impl(
" 1.0\n");
175 write_impl(
"newmtl {}\n", s);
179 write_impl(
"{} {:.6f}\n", type,
v);
183 write_impl(
"{} {:.6f} {:.6f} {:.6f}\n", type, r, g,
b);
187 write_impl(
"illum {}\n", mode);
192 write_impl(
"{}{} {}\n", type,
options, value);
197 write_impl(
"{}\n", s);
203 void ensure_space(
size_t at_least)
205 if (blocks_.
is_empty() || (blocks_.
last().capacity() - blocks_.
last().size() < at_least)) {
206 blocks_.
append(VectorChar());
207 blocks_.
last().reserve(std::max(at_least, buffer_chunk_size_));
211 template<
typename... T>
void write_impl(
const char *fmt, T &&...args)
214 fmt::memory_buffer buf;
215 fmt::format_to(fmt::appender(buf), fmt, std::forward<T>(args)...);
216 size_t len = buf.size();
218 VectorChar &bb = blocks_.
last();
219 bb.insert(bb.end(), buf.begin(), buf.end());
File and directory operations.
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
void append(const T &value)
void insert(const int64_t insert_index, const T &value)
const T & last(const int64_t n=0) const
local_group_size(16, 16) .push_constant(Type b
CCL_NAMESPACE_BEGIN struct Options options