1.0.0 API documentation
Loading...
Searching...
No Matches
io.hpp
Go to the documentation of this file.
1
19
20#pragma once
21
22// Dependency:
23#include "../glm.hpp"
24#include "../gtx/quaternion.hpp"
25
26#ifndef GLM_ENABLE_EXPERIMENTAL
27# error "GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it."
28#elif GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)
29# pragma message("GLM: GLM_GTX_io extension included")
30#endif
31
32#if GLM_COMPILER & GLM_COMPILER_CLANG
33# pragma clang diagnostic push
34# pragma clang diagnostic ignored "-Wpadded"
35# pragma clang diagnostic ignored "-Wshorten-64-to-32"
36# pragma clang diagnostic ignored "-Wglobal-constructors"
37#endif
38
39#include <iosfwd> // std::basic_ostream<> (fwd)
40#include <locale> // std::locale, std::locale::facet, std::locale::id
41#include <utility> // std::pair<>
42
43namespace glm
44{
47
48 namespace io
49 {
50 enum order_type { column_major, row_major};
51
52 template<typename CTy>
53 class format_punct : public std::locale::facet
54 {
55 typedef CTy char_type;
56
57 public:
58
59 static std::locale::id id;
60
61 bool formatted;
62 unsigned precision;
63 unsigned width;
64 char_type separator;
65 char_type delim_left;
66 char_type delim_right;
67 char_type space;
68 char_type newline;
69 order_type order;
70
71 GLM_FUNC_DISCARD_DECL explicit format_punct(size_t a = 0);
72 GLM_FUNC_DISCARD_DECL explicit format_punct(format_punct const&);
73 };
74
75 template<typename CTy, typename CTr = std::char_traits<CTy> >
76 class basic_state_saver {
77
78 public:
79
80 GLM_FUNC_DISCARD_DECL explicit basic_state_saver(std::basic_ios<CTy,CTr>&);
81 GLM_FUNC_DISCARD_DECL ~basic_state_saver();
82
83 private:
84
85 typedef ::std::basic_ios<CTy,CTr> state_type;
86 typedef typename state_type::char_type char_type;
87 typedef ::std::ios_base::fmtflags flags_type;
88 typedef ::std::streamsize streamsize_type;
89 typedef ::std::locale const locale_type;
90
91 state_type& state_;
92 flags_type flags_;
93 streamsize_type precision_;
94 streamsize_type width_;
95 char_type fill_;
96 locale_type locale_;
97
98 GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&);
99 };
100
101 typedef basic_state_saver<char> state_saver;
102 typedef basic_state_saver<wchar_t> wstate_saver;
103
104 template<typename CTy, typename CTr = std::char_traits<CTy> >
105 class basic_format_saver
106 {
107 public:
108
109 GLM_FUNC_DISCARD_DECL explicit basic_format_saver(std::basic_ios<CTy,CTr>&);
110 GLM_FUNC_DISCARD_DECL ~basic_format_saver();
111
112 private:
113
114 basic_state_saver<CTy> const bss_;
115
116 GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&);
117 };
118
119 typedef basic_format_saver<char> format_saver;
120 typedef basic_format_saver<wchar_t> wformat_saver;
121
122 struct precision
123 {
124 unsigned value;
125
126 GLM_FUNC_DISCARD_DECL explicit precision(unsigned);
127 };
128
129 struct width
130 {
131 unsigned value;
132
133 GLM_FUNC_DISCARD_DECL explicit width(unsigned);
134 };
135
136 template<typename CTy>
137 struct delimeter
138 {
139 CTy value[3];
140
141 GLM_FUNC_DISCARD_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ',');
142 };
143
144 struct order
145 {
146 order_type value;
147
148 GLM_FUNC_DISCARD_DECL explicit order(order_type);
149 };
150
151 // functions, inlined (inline)
152
153 template<typename FTy, typename CTy, typename CTr>
154 FTy const& get_facet(std::basic_ios<CTy,CTr>&);
155 template<typename FTy, typename CTy, typename CTr>
156 std::basic_ios<CTy,CTr>& formatted(std::basic_ios<CTy,CTr>&);
157 template<typename FTy, typename CTy, typename CTr>
158 std::basic_ios<CTy,CTr>& unformatted(std::basic_ios<CTy,CTr>&);
159
160 template<typename CTy, typename CTr>
161 std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, precision const&);
162 template<typename CTy, typename CTr>
163 std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, width const&);
164 template<typename CTy, typename CTr>
165 std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, delimeter<CTy> const&);
166 template<typename CTy, typename CTr>
167 std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, order const&);
168 }//namespace io
169
170 template<typename CTy, typename CTr, typename T, qualifier Q>
171 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, qua<T, Q> const&);
172 template<typename CTy, typename CTr, typename T, qualifier Q>
173 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<1, T, Q> const&);
174 template<typename CTy, typename CTr, typename T, qualifier Q>
175 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<2, T, Q> const&);
176 template<typename CTy, typename CTr, typename T, qualifier Q>
177 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<3, T, Q> const&);
178 template<typename CTy, typename CTr, typename T, qualifier Q>
179 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<4, T, Q> const&);
180 template<typename CTy, typename CTr, typename T, qualifier Q>
181 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 2, T, Q> const&);
182 template<typename CTy, typename CTr, typename T, qualifier Q>
183 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 3, T, Q> const&);
184 template<typename CTy, typename CTr, typename T, qualifier Q>
185 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 4, T, Q> const&);
186 template<typename CTy, typename CTr, typename T, qualifier Q>
187 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 2, T, Q> const&);
188 template<typename CTy, typename CTr, typename T, qualifier Q>
189 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 3, T, Q> const&);
190 template<typename CTy, typename CTr, typename T, qualifier Q>
191 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 4, T, Q> const&);
192 template<typename CTy, typename CTr, typename T, qualifier Q>
193 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 2, T, Q> const&);
194 template<typename CTy, typename CTr, typename T, qualifier Q>
195 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 3, T, Q> const&);
196 template<typename CTy, typename CTr, typename T, qualifier Q>
197 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 4, T, Q> const&);
198
199 template<typename CTy, typename CTr, typename T, qualifier Q>
200 GLM_FUNC_DISCARD_DECL std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr> &,
201 std::pair<mat<4, 4, T, Q> const, mat<4, 4, T, Q> const> const&);
202
204}//namespace glm
205
206#if GLM_COMPILER & GLM_COMPILER_CLANG
207# pragma clang diagnostic pop
208#endif
209
210#include "io.inl"