/** * @author Edouard DUPIN * * @copyright 2011, Edouard DUPIN, all right reserved * * @license APACHE v2.0 (see license file) */ #include #include std::ostream& etk::operator <<(std::ostream& _os, const etk::Vector2D& _obj) { _os << "("; _os << _obj.x(); _os << ","; _os << _obj.y(); _os << ")"; return _os; } std::ostream& etk::operator <<(std::ostream& _os, const etk::Vector2D& _obj) { _os << "("; _os << _obj.x(); _os << ","; _os << _obj.y(); _os << ")"; return _os; } std::ostream& etk::operator <<(std::ostream& _os, const etk::Vector2D& _obj) { _os << "("; _os << _obj.x(); _os << ","; _os << _obj.y(); _os << ")"; return _os; } std::ostream& etk::operator <<(std::ostream& _os, const etk::Vector2D& _obj) { _os << "("; _os << _obj.x(); _os << ","; _os << _obj.y(); _os << ")"; return _os; } std::ostream& etk::operator <<(std::ostream& _os, const std::vector& _obj) { for (size_t iii = 0; iii < _obj.size(); ++iii) { if (iii != 0) { _os << " "; } _os << _obj[iii]; } return _os; } std::ostream& etk::operator <<(std::ostream& _os, const std::vector& _obj) { for (size_t iii = 0; iii < _obj.size(); ++iii) { if (iii != 0) { _os << " "; } _os << _obj[iii]; } return _os; } std::ostream& etk::operator <<(std::ostream& _os, const std::vector& _obj) { for (size_t iii = 0; iii < _obj.size(); ++iii) { if (iii != 0) { _os << " "; } _os << _obj[iii]; } return _os; } std::ostream& etk::operator <<(std::ostream& _os, const std::vector& _obj) { for (size_t iii = 0; iii < _obj.size(); ++iii) { if (iii != 0) { _os << " "; } _os << _obj[iii]; } return _os; } vec2 vec2rotate(const vec2& _val, const vec2& _point, float _angle) { vec2 out = _val; #if (defined(__TARGET_OS__MacOs) || defined(__TARGET_OS__IOs) || __cplusplus < 201103L) float sinAngle = sin(_angle); float cosAngle = cos(_angle); #else float sinAngle = std::sin(_angle); float cosAngle = std::cos(_angle); #endif if (_point == vec2(0,0)) { float tempX = out.x() * cosAngle - out.y() * sinAngle; float xVal = out.x(); out.setValue(tempX, out.y() * cosAngle + xVal * sinAngle); } else { float tempX = out.x() - _point.x(); float tempY = out.y() - _point.y(); out.setValue(tempX * cosAngle - tempY * sinAngle + _point.x(), tempY * cosAngle + tempX * sinAngle + _point.y()); } return out; } namespace etk { template<> Vector2D::operator std::string() const { std::string str; str = "("; str += etk::to_string(x()); str += ","; str += etk::to_string(y()); str += ")"; return str; } #if __CPP_VERSION__ >= 2011 template<> Vector2D::operator std::u32string() const { std::u32string str; str = U"("; str += etk::to_u32string(x()); str += U","; str += etk::to_u32string(y()); str += U")"; return str; } #endif template<> Vector2D::Vector2D(const std::string& _str) { m_floats[0] = false; m_floats[1] = false; // copy to permit to modify it : std::string tmpStr = _str; if (tmpStr[0] == '(') { tmpStr.erase(tmpStr.begin()); } if (tmpStr[tmpStr.size()-1] == ')') { tmpStr.erase(tmpStr.end()-1); } size_t posComa = tmpStr.find(','); if (posComa == std::string::npos) { // no coma ... // in every case, we parse the first element : m_floats[0] = etk::string_to_bool(tmpStr); m_floats[1] = m_floats[0]; } else { m_floats[0] = etk::string_to_bool(std::string(tmpStr, 0, posComa)); tmpStr.erase(0, posComa+1); m_floats[1] = etk::string_to_bool(tmpStr); } TK_VERBOSE("Parse : '" << _str << "' ==> " << *this); } #if __CPP_VERSION__ >= 2011 template<> Vector2D::Vector2D(const std::u32string& _str) { m_floats[0] = false; m_floats[1] = false; // copy to permit to modify it : std::u32string tmpStr = _str; if (tmpStr[0] == '(') { tmpStr.erase(tmpStr.begin()); } if (tmpStr[tmpStr.size()-1] == ')') { tmpStr.erase(tmpStr.end()-1); } size_t posComa = tmpStr.find(','); if (posComa == std::string::npos) { // no coma ... // in every case, we parse the first element : m_floats[0] = etk::string_to_bool(tmpStr); m_floats[1] = m_floats[0]; } else { m_floats[0] = etk::string_to_bool(std::u32string(tmpStr, 0, posComa)); tmpStr.erase(0, posComa+1); m_floats[1] = etk::string_to_bool(tmpStr); } TK_VERBOSE("Parse : '" << _str << "' ==> " << *this); } #endif template<> Vector2D::operator std::string() const { std::string str; str = "("; str += etk::to_string(x()); str += ","; str += etk::to_string(y()); str += ")"; return str; } #if __CPP_VERSION__ >= 2011 template<> Vector2D::operator std::u32string() const { std::u32string str; str = U"("; str += etk::to_u32string(x()); str += U","; str += etk::to_u32string(y()); str += U")"; return str; } #endif template<> Vector2D::Vector2D(const std::string& _str) { m_floats[0] = 0; m_floats[1] = 0; // copy to permit to modify it : std::string tmpStr = _str; if (tmpStr[0] == '(') { tmpStr.erase(tmpStr.begin()); } if (tmpStr[tmpStr.size()-1] == ')') { tmpStr.erase(tmpStr.end()-1); } size_t posComa = tmpStr.find(','); if (posComa == std::string::npos) { // no coma ... // in every case, we parse the first element : m_floats[0] = etk::string_to_int32_t(tmpStr); m_floats[1] = m_floats[0]; } else { m_floats[0] = etk::string_to_int32_t(std::string(tmpStr, 0, posComa)); tmpStr.erase(0,posComa+1); m_floats[1] = etk::string_to_int32_t(tmpStr); } TK_VERBOSE("Parse : \"" << _str << "\" ==> " << *this); } #if __CPP_VERSION__ >= 2011 template<> Vector2D::Vector2D(const std::u32string& _str) { m_floats[0] = 0; m_floats[1] = 0; // copy to permit to modify it : std::u32string tmpStr = _str; if (tmpStr[0] == '(') { tmpStr.erase(tmpStr.begin()); } if (tmpStr[tmpStr.size()-1] == ')') { tmpStr.erase(tmpStr.end()-1); } size_t posComa = tmpStr.find(','); if (posComa == 0) { // no coma ... // in every case, we parse the first element : m_floats[0] = etk::string_to_int32_t(tmpStr); m_floats[1] = m_floats[0]; } else { m_floats[0] = etk::string_to_int32_t(std::u32string(tmpStr, 0, posComa)); tmpStr.erase(0,posComa+1); m_floats[1] = etk::string_to_int32_t(tmpStr); } TK_VERBOSE("Parse : \"" << _str << "\" ==> " << *this); } #endif template<> Vector2D::operator std::string() const { std::string str; str = "("; str += etk::to_string(x()); str += ","; str += etk::to_string(y()); str += ")"; return str; } #if __CPP_VERSION__ >= 2011 template<> Vector2D::operator std::u32string() const { std::u32string str; str = U"("; str += etk::to_u32string(x()); str += U","; str += etk::to_u32string(y()); str += U")"; return str; } #endif template<> Vector2D::Vector2D(const std::string& _str) { m_floats[0] = 0; m_floats[1] = 0; // copy to permit to modify it : std::string tmpStr = _str; if (tmpStr[0] == '(') { tmpStr.erase(tmpStr.begin()); } if (tmpStr[tmpStr.size()-1] == ')') { tmpStr.erase(tmpStr.end()-1); } size_t posComa = tmpStr.find(','); if (posComa == std::string::npos) { // no coma ... // in every case, we parse the first element : m_floats[0] = etk::string_to_int32_t(tmpStr); m_floats[1] = m_floats[0]; } else { m_floats[0] = etk::string_to_int32_t(std::string(tmpStr, 0, posComa)); tmpStr.erase(0,posComa+1); m_floats[1] = etk::string_to_int32_t(tmpStr); } TK_VERBOSE("Parse : \"" << _str << "\" ==> " << *this); } #if __CPP_VERSION__ >= 2011 template<> Vector2D::Vector2D(const std::u32string& _str) { m_floats[0] = 0; m_floats[1] = 0; // copy to permit to modify it : std::u32string tmpStr = _str; if (tmpStr[0] == '(') { tmpStr.erase(tmpStr.begin()); } if (tmpStr[tmpStr.size()-1] == ')') { tmpStr.erase(tmpStr.end()-1); } size_t posComa = tmpStr.find(','); if (posComa == std::string::npos) { // no coma ... // in every case, we parse the first element : m_floats[0] = etk::string_to_int32_t(tmpStr); m_floats[1] = m_floats[0]; } else { m_floats[0] = etk::string_to_int32_t(std::u32string(tmpStr, 0, posComa)); tmpStr.erase(0,posComa+1); m_floats[1] = etk::string_to_int32_t(tmpStr); } TK_VERBOSE("Parse : \"" << _str << "\" ==> " << *this); } #endif template<> Vector2D::operator std::string() const { std::string str; str = "("; str += etk::to_string(x()); str += ","; str += etk::to_string(y()); str += ")"; return str; } #if __CPP_VERSION__ >= 2011 template<> Vector2D::operator std::u32string() const { std::u32string str; str = U"("; str += etk::to_u32string(x()); str += U","; str += etk::to_u32string(y()); str += U")"; return str; } #endif template<> Vector2D::Vector2D(const std::string& _str) { m_floats[0] = 0; m_floats[1] = 0; // copy to permit to modify it : std::string tmpStr = _str; if (tmpStr[0] == '(') { tmpStr.erase(tmpStr.begin()); } if (tmpStr[tmpStr.size()-1] == ')') { tmpStr.erase(tmpStr.end()-1); } size_t posComa = tmpStr.find(','); if (posComa == std::string::npos) { // no coma ... // in every case, we parse the first element : m_floats[0] = etk::string_to_float(tmpStr); m_floats[1] = m_floats[0]; } else { m_floats[0] = etk::string_to_float(std::string(tmpStr, 0, posComa)); tmpStr.erase(0,posComa+1); m_floats[1] = etk::string_to_float(tmpStr); } TK_VERBOSE("Parse : \"" << _str << "\" ==> " << *this); } #if __CPP_VERSION__ >= 2011 template<> Vector2D::Vector2D(const std::u32string& _str) { m_floats[0] = 0; m_floats[1] = 0; // copy to permit to modify it : std::u32string tmpStr = _str; if (tmpStr[0] == '(') { tmpStr.erase(tmpStr.begin()); } if (tmpStr[tmpStr.size()-1] == ')') { tmpStr.erase(tmpStr.end()-1); } size_t posComa = tmpStr.find(','); if (posComa == std::string::npos) { // no coma ... // in every case, we parse the first element : m_floats[0] = etk::string_to_float(tmpStr); m_floats[1] = m_floats[0]; } else { m_floats[0] = etk::string_to_float(std::u32string(tmpStr, 0, posComa)); tmpStr.erase(0,posComa+1); m_floats[1] = etk::string_to_float(tmpStr); } TK_VERBOSE("Parse : \"" << _str << "\" ==> " << *this); } #endif template<> std::string to_string(const vec2& _obj) { std::string str; str = "("; str += etk::to_string(_obj.x()); str += ","; str += etk::to_string(_obj.y()); str += ")"; return str; } #if __CPP_VERSION__ >= 2011 template<> std::u32string to_u32string(const vec2& _obj) { return etk::to_u32string(etk::to_string(_obj)); } #endif template<> std::string to_string(const ivec2& _obj) { std::string str; str = "("; str += etk::to_string(_obj.x()); str += ","; str += etk::to_string(_obj.y()); str += ")"; return str; } #if __CPP_VERSION__ >= 2011 template<> std::u32string to_u32string(const ivec2& _obj) { return etk::to_u32string(etk::to_string(_obj)); } #endif template<> std::string to_string(const uivec2& _obj) { std::string str; str = "("; str += etk::to_string(_obj.x()); str += ","; str += etk::to_string(_obj.y()); str += ")"; return str; } #if __CPP_VERSION__ >= 2011 template<> std::u32string to_u32string(const uivec2& _obj) { return etk::to_u32string(etk::to_string(_obj)); } #endif template<> std::string to_string(const bvec2& _obj) { std::string str; str = "("; str += etk::to_string(_obj.x()); str += ","; str += etk::to_string(_obj.y()); str += ")"; return str; } #if __CPP_VERSION__ >= 2011 template<> std::u32string to_u32string(const bvec2& _obj) { return etk::to_u32string(etk::to_string(_obj)); } #endif template<> bool from_string(vec2& _variableRet, const std::string& _value) { _variableRet = vec2(_value); return true; } #if __CPP_VERSION__ >= 2011 template<> bool from_string(vec2& _variableRet, const std::u32string& _value) { return from_string(_variableRet, etk::to_string(_value)); } #endif template<> bool from_string(ivec2& _variableRet, const std::string& _value) { _variableRet = ivec2(_value); return true; } #if __CPP_VERSION__ >= 2011 template<> bool from_string(ivec2& _variableRet, const std::u32string& _value) { return from_string(_variableRet, etk::to_string(_value)); } #endif template<> bool from_string(uivec2& _variableRet, const std::string& _value) { _variableRet = uivec2(_value); return true; } #if __CPP_VERSION__ >= 2011 template<> bool from_string(uivec2& _variableRet, const std::u32string& _value) { return from_string(_variableRet, etk::to_string(_value)); } #endif template<> bool from_string(bvec2& _variableRet, const std::string& _value) { _variableRet = bvec2(_value); return true; } #if __CPP_VERSION__ >= 2011 template<> bool from_string(bvec2& _variableRet, const std::u32string& _value) { return from_string(_variableRet, etk::to_string(_value)); } #endif };