12 template<
typename CTy>
13 GLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(
size_t a)
14 : std::locale::facet(a)
17 , width(1 + 4 + 1 + precision)
26 template<
typename CTy>
27 GLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(format_punct
const& a)
28 : std::locale::facet(0)
29 , formatted(a.formatted)
30 , precision(a.precision)
32 , separator(a.separator)
33 , delim_left(a.delim_left)
34 , delim_right(a.delim_right)
40 template<
typename CTy> std::locale::id format_punct<CTy>::id;
42 template<
typename CTy,
typename CTr>
43 GLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::basic_state_saver(std::basic_ios<CTy, CTr>& a)
46 , precision_(a.precision())
52 template<
typename CTy,
typename CTr>
53 GLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::~basic_state_saver()
55 state_.imbue(locale_);
58 state_.precision(precision_);
62 template<
typename CTy,
typename CTr>
63 GLM_FUNC_QUALIFIER basic_format_saver<CTy, CTr>::basic_format_saver(std::basic_ios<CTy, CTr>& a)
66 a.imbue(std::locale(a.getloc(),
new format_punct<CTy>(get_facet<format_punct<CTy> >(a))));
69 template<
typename CTy,
typename CTr>
71 basic_format_saver<CTy, CTr>::~basic_format_saver()
74 GLM_FUNC_QUALIFIER precision::precision(
unsigned a)
78 GLM_FUNC_QUALIFIER width::width(
unsigned a)
82 template<
typename CTy>
83 GLM_FUNC_QUALIFIER delimeter<CTy>::delimeter(CTy a, CTy b, CTy c)
91 GLM_FUNC_QUALIFIER order::order(order_type a)
95 template<
typename FTy,
typename CTy,
typename CTr>
96 GLM_FUNC_QUALIFIER FTy
const& get_facet(std::basic_ios<CTy, CTr>& ios)
98 if(!std::has_facet<FTy>(ios.getloc()))
99 ios.imbue(std::locale(ios.getloc(),
new FTy));
101 return std::use_facet<FTy>(ios.getloc());
104 template<
typename CTy,
typename CTr>
105 GLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& formatted(std::basic_ios<CTy, CTr>& ios)
107 const_cast<format_punct<CTy>&
>(get_facet<format_punct<CTy> >(ios)).formatted =
true;
111 template<
typename CTy,
typename CTr>
112 GLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& unformatted(std::basic_ios<CTy, CTr>& ios)
114 const_cast<format_punct<CTy>&
>(get_facet<format_punct<CTy> >(ios)).formatted =
false;
118 template<
typename CTy,
typename CTr>
119 GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, precision
const& a)
121 const_cast<format_punct<CTy>&
>(get_facet<format_punct<CTy> >(os)).precision = a.value;
125 template<
typename CTy,
typename CTr>
126 GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, width
const& a)
128 const_cast<format_punct<CTy>&
>(get_facet<format_punct<CTy> >(os)).width = a.value;
132 template<
typename CTy,
typename CTr>
133 GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, delimeter<CTy>
const& a)
135 format_punct<CTy> & fmt(
const_cast<format_punct<CTy>&
>(get_facet<format_punct<CTy> >(os)));
137 fmt.delim_left = a.value[0];
138 fmt.delim_right = a.value[1];
139 fmt.separator = a.value[2];
144 template<
typename CTy,
typename CTr>
145 GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, order
const& a)
147 const_cast<format_punct<CTy>&
>(get_facet<format_punct<CTy> >(os)).order = a.value;
154 template<
typename CTy,
typename CTr,
typename V>
155 GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>&
156 print_vector_on(std::basic_ostream<CTy, CTr>& os, V
const& a)
158 typename std::basic_ostream<CTy, CTr>::sentry
const cerberus(os);
162 io::format_punct<CTy>
const& fmt(io::get_facet<io::format_punct<CTy> >(os));
164 length_t
const& components(type<V>::components);
168 io::basic_state_saver<CTy>
const bss(os);
170 os << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left;
172 for(length_t i(0); i < components; ++i)
174 os << std::setw(fmt.width) << a[i];
175 if(components-1 != i)
179 os << fmt.delim_right;
183 for(length_t i(0); i < components; ++i)
187 if(components-1 != i)
197 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
198 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, qua<T, Q>
const& a)
200 return detail::print_vector_on(os, a);
203 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
204 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<1, T, Q>
const& a)
206 return detail::print_vector_on(os, a);
209 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
210 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<2, T, Q>
const& a)
212 return detail::print_vector_on(os, a);
215 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
216 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<3, T, Q>
const& a)
218 return detail::print_vector_on(os, a);
221 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
222 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<4, T, Q>
const& a)
224 return detail::print_vector_on(os, a);
229 template<
typename CTy,
typename CTr,
template<length_t, length_t,
typename, qualifier>
class M, length_t C, length_t R,
typename T,
qualifier Q>
230 GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_on(std::basic_ostream<CTy, CTr>& os, M<C, R, T, Q>
const& a)
232 typename std::basic_ostream<CTy,CTr>::sentry
const cerberus(os);
236 io::format_punct<CTy>
const& fmt(io::get_facet<io::format_punct<CTy> >(os));
238 length_t
const& cols(type<M<C, R, T, Q> >::cols);
239 length_t
const& rows(type<M<C, R, T, Q> >::rows);
243 os << fmt.newline << fmt.delim_left;
247 case io::column_major:
249 for(length_t i(0); i < rows; ++i)
264 for(length_t i(0); i < cols; ++i)
278 os << fmt.delim_right;
284 case io::column_major:
286 for(length_t i(0); i < cols; ++i)
298 for (length_t i(0); i < rows; ++i)
315 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
316 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 2, T, Q>
const& a)
318 return detail::print_matrix_on(os, a);
321 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
322 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 3, T, Q>
const& a)
324 return detail::print_matrix_on(os, a);
327 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
328 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 4, T, Q>
const& a)
330 return detail::print_matrix_on(os, a);
333 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
334 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 2, T, Q>
const& a)
336 return detail::print_matrix_on(os, a);
339 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
340 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 3, T, Q>
const& a)
342 return detail::print_matrix_on(os, a);
345 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
346 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 4, T, Q>
const& a)
348 return detail::print_matrix_on(os, a);
351 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
352 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 2, T, Q>
const& a)
354 return detail::print_matrix_on(os, a);
357 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
358 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 3, T, Q>
const& a)
360 return detail::print_matrix_on(os, a);
363 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
364 GLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 4, T, Q>
const& a)
366 return detail::print_matrix_on(os, a);
371 template<
typename CTy,
typename CTr,
template<length_t, length_t,
typename, qualifier>
class M, length_t C, length_t R,
typename T,
qualifier Q>
372 GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_pair_on(std::basic_ostream<CTy, CTr>& os, std::pair<M<C, R, T, Q>
const, M<C, R, T, Q>
const>
const& a)
374 typename std::basic_ostream<CTy,CTr>::sentry
const cerberus(os);
378 io::format_punct<CTy>
const& fmt(io::get_facet<io::format_punct<CTy> >(os));
379 M<C, R, T, Q>
const& ml(a.first);
380 M<C, R, T, Q>
const& mr(a.second);
381 length_t
const& cols(type<M<C, R, T, Q> >::cols);
382 length_t
const& rows(type<M<C, R, T, Q> >::rows);
386 os << fmt.newline << fmt.delim_left;
390 case io::column_major:
392 for(length_t i(0); i < rows; ++i)
397 os << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i);
406 for(length_t i(0); i < cols; ++i)
411 os << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i);
420 os << fmt.delim_right;
424 os << ml << fmt.space << mr;
432 template<
typename CTy,
typename CTr,
typename T, qualifier Q>
433 GLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(
434 std::basic_ostream<CTy, CTr> & os,
435 std::pair<mat<4, 4, T, Q>
const,
436 mat<4, 4, T, Q>
const>
const& a)
438 return detail::print_matrix_pair_on(os, a);
detail namespace with internal helper functions
Definition json.h:249
Core features
Definition common.hpp:21
qualifier
Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp,...
Definition qualifier.hpp:9