1 #ifndef STRINGCONVERTIONS_HPP 2 #define STRINGCONVERTIONS_HPP 8 #include <SFML/System/Vector2.hpp> 9 #include <SFML/System/Vector3.hpp> 10 #include <SFML/Graphics/Rect.hpp> 11 #include <SFML/Graphics/Color.hpp> 13 char operator<<(
char* out,
const std::string& in);
15 std::string& operator<<(std::string& out,
char in);
17 unsigned char operator<<(
unsigned char* out,
const std::string& in);
19 std::string& operator<<(std::string& out,
unsigned char in);
25 const std::string& in,
26 typename std::enable_if<!std::is_enum<T>::value>::type* dummy = 0
30 ss.imbue(std::locale(
"C"));
40 const std::string& in,
41 typename std::enable_if<std::is_enum<T>::value>::type* dummy = 0
45 ss.imbue(std::locale(
"C"));
50 *out = static_cast<T>(tmp);
54 T operator<<(T* out,
const std::string& in) {
55 numericConvert(out, in);
59 std::string& operator<<(std::string& out, sf::Color in);
60 sf::Color operator<<(sf::Color* out,
const std::string& in);
63 std::string numericConvert(
65 typename std::enable_if<!std::is_enum<T>::value>::type* dummy = 0
68 ss.imbue(std::locale(
"C"));
69 ss << std::setprecision(32) << in;
74 std::string numericConvert(
76 typename std::enable_if<std::is_enum<T>::value>::type* dummy = 0
79 ss.imbue(std::locale(
"C"));
80 ss << std::setprecision(32) << static_cast<int>(in);
85 std::string& operator<<(std::string& out,
const T& in) {
86 return out += numericConvert(in);
89 template<
typename F,
typename S>
90 std::string& operator<<(std::string& out, const std::pair<F,S>& in) {
92 ss.imbue(std::locale(
"C"));
93 ss << std::setprecision(32);
96 ss << static_cast<long long>(in.first);
104 ss << static_cast<long long>(in.second);
108 return out += ss.str();
111 template<
typename F,
typename S>
112 std::pair<F,S> operator<<(std::pair<F,S>* out,
const std::string& in) {
113 std::pair<F,S> backup(*out);
114 std::stringstream ss;
115 ss.imbue(std::locale(
"C"));
129 return (*out = backup);
140 return (*out = backup);
146 std::string& operator<<(std::string& out, const sf::Vector2<T>& in) {
147 std::stringstream ss;
148 ss.imbue(std::locale(
"C"));
149 ss << std::setprecision(32) << in.x <<
" " << in.y;
150 return out += ss.str();
154 sf::Vector2<T> operator<<(sf::Vector2<T>* out,
const std::string& in) {
155 sf::Vector2<T> backup(*out);
156 std::stringstream ss;
157 ss.imbue(std::locale(
"C"));
164 return (*out = backup);
168 return (*out = backup);
174 std::string& operator<<(std::string& out, const sf::Vector3<T>& in) {
175 std::stringstream ss;
176 ss.imbue(std::locale(
"C"));
177 ss << std::setprecision(32) << in.x <<
" " << in.y <<
" " << in.z;
178 return out += ss.str();
182 sf::Vector3<T> operator<<(sf::Vector3<T>* out,
const std::string& in) {
183 sf::Vector3<T> backup(*out);
184 std::stringstream ss;
185 ss.imbue(std::locale(
"C"));
192 return (*out = backup);
196 return (*out = backup);
200 return (*out = backup);
206 std::string& operator<<(std::string& out, const sf::Rect<T>& in) {
207 std::stringstream ss;
208 ss.imbue(std::locale(
"C"));
209 ss << std::setprecision(32) << in.left <<
" " << in.top <<
" " << in.width <<
" " << in.height;
210 return out += ss.str();
214 sf::Rect<T> operator<<(sf::Rect<T>* out,
const std::string& in) {
215 sf::Rect<T> backup(*out);
216 std::stringstream ss;
217 ss.imbue(std::locale(
"C"));
224 return (*out = backup);
228 return (*out = backup);
232 return (*out = backup);
236 return (*out = backup);
242 std::string& operator<<(std::string& out, const std::vector<T>& in) {
243 std::stringstream ss;
244 ss.imbue(std::locale(
"C"));
245 ss << std::setprecision(32);
247 for(
const auto& e : in) {
252 for(
const auto& e : in) {
257 return out += ss.str();
261 std::string& operator<<(std::string& out, const std::vector<std::basic_string<T>>& in) {
262 std::stringstream ss;
263 ss.imbue(std::locale(
"C"));
264 ss << std::setprecision(32);
266 for(
const auto& e : in) {
270 return out += ss.str();
274 std::vector<T> operator<<(std::vector<T>* out,
const std::string& in) {
275 std::stringstream ss;
276 ss.imbue(std::locale(
"C"));
277 ss << std::setprecision(32);
304 std::vector<std::basic_string<T>> operator<<(std::vector<std::basic_string<T>>* out,
const std::string& in) {
305 std::stringstream ss;
306 ss.imbue(std::locale(
"C"));
307 ss << std::setprecision(32);
311 std::basic_string<T> tmp;
322 #endif // STRINGCONVERIONS_HPP