| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438 |
- /*
- -----------------------------------------------------------------------------
- This source file is part of OGRE
- (Object-oriented Graphics Rendering Engine)
- For the latest info, see http://www.ogre3d.org/
- Copyright (c) 2000-2011 Torus Knot Software Ltd
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- -----------------------------------------------------------------------------
- */
- #include "OgreStringConverter.h"
- namespace Ogre {
- //-----------------------------------------------------------------------
- String StringConverter::toString(Real val, unsigned short precision,
- unsigned short width, char fill, std::ios::fmtflags flags)
- {
- stringstream stream;
- stream.precision(precision);
- stream.width(width);
- stream.fill(fill);
- if (flags)
- stream.setf(flags);
- stream << val;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(int val,
- unsigned short width, char fill, std::ios::fmtflags flags)
- {
- stringstream stream;
- stream.width(width);
- stream.fill(fill);
- if (flags)
- stream.setf(flags);
- stream << val;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- #if CM_ARCH_TYPE == CM_ARCHITECTURE_64 || CM_PLATFORM == CM_PLATFORM_APPLE || CM_PLATFORM == OGRE_PLATFORM_IPHONE
- String StringConverter::toString(unsigned int val,
- unsigned short width, char fill, std::ios::fmtflags flags)
- {
- stringstream stream;
- stream.width(width);
- stream.fill(fill);
- if (flags)
- stream.setf(flags);
- stream << val;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(size_t val,
- unsigned short width, char fill, std::ios::fmtflags flags)
- {
- stringstream stream;
- stream.width(width);
- stream.fill(fill);
- if (flags)
- stream.setf(flags);
- stream << val;
- return stream.str();
- }
- #if CM_COMPILER == CM_COMPILER_MSVC
- //-----------------------------------------------------------------------
- String StringConverter::toString(unsigned long val,
- unsigned short width, char fill, std::ios::fmtflags flags)
- {
- stringstream stream;
- stream.width(width);
- stream.fill(fill);
- if (flags)
- stream.setf(flags);
- stream << val;
- return stream.str();
- }
- #endif
- //-----------------------------------------------------------------------
- #else
- String StringConverter::toString(size_t val,
- unsigned short width, char fill, std::ios::fmtflags flags)
- {
- stringstream stream;
- stream.width(width);
- stream.fill(fill);
- if (flags)
- stream.setf(flags);
- stream << val;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(unsigned long val,
- unsigned short width, char fill, std::ios::fmtflags flags)
- {
- stringstream stream;
- stream.width(width);
- stream.fill(fill);
- if (flags)
- stream.setf(flags);
- stream << val;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- #endif
- String StringConverter::toString(long val,
- unsigned short width, char fill, std::ios::fmtflags flags)
- {
- stringstream stream;
- stream.width(width);
- stream.fill(fill);
- if (flags)
- stream.setf(flags);
- stream << val;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(const Vector2& val)
- {
- stringstream stream;
- stream << val.x << " " << val.y;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(const Vector3& val)
- {
- stringstream stream;
- stream << val.x << " " << val.y << " " << val.z;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(const Vector4& val)
- {
- stringstream stream;
- stream << val.x << " " << val.y << " " << val.z << " " << val.w;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(const Matrix3& val)
- {
- stringstream stream;
- stream << val[0][0] << " "
- << val[0][1] << " "
- << val[0][2] << " "
- << val[1][0] << " "
- << val[1][1] << " "
- << val[1][2] << " "
- << val[2][0] << " "
- << val[2][1] << " "
- << val[2][2];
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(bool val, bool yesNo)
- {
- if (val)
- {
- if (yesNo)
- {
- return "yes";
- }
- else
- {
- return "true";
- }
- }
- else
- if (yesNo)
- {
- return "no";
- }
- else
- {
- return "false";
- }
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(const Matrix4& val)
- {
- stringstream stream;
- stream << val[0][0] << " "
- << val[0][1] << " "
- << val[0][2] << " "
- << val[0][3] << " "
- << val[1][0] << " "
- << val[1][1] << " "
- << val[1][2] << " "
- << val[1][3] << " "
- << val[2][0] << " "
- << val[2][1] << " "
- << val[2][2] << " "
- << val[2][3] << " "
- << val[3][0] << " "
- << val[3][1] << " "
- << val[3][2] << " "
- << val[3][3];
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(const Quaternion& val)
- {
- stringstream stream;
- stream << val.w << " " << val.x << " " << val.y << " " << val.z;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(const ColourValue& val)
- {
- stringstream stream;
- stream << val.r << " " << val.g << " " << val.b << " " << val.a;
- return stream.str();
- }
- //-----------------------------------------------------------------------
- String StringConverter::toString(const std::vector<Ogre::String>& val)
- {
- stringstream stream;
- std::vector<Ogre::String>::const_iterator i, iend, ibegin;
- ibegin = val.begin();
- iend = val.end();
- for (i = ibegin; i != iend; ++i)
- {
- if (i != ibegin)
- stream << " ";
- stream << *i;
- }
- return stream.str();
- }
- //-----------------------------------------------------------------------
- Real StringConverter::parseReal(const String& val, Real defaultValue)
- {
- // Use istringstream for direct correspondence with toString
- StringStream str(val);
- Real ret = defaultValue;
- str >> ret;
- return ret;
- }
- //-----------------------------------------------------------------------
- int StringConverter::parseInt(const String& val, int defaultValue)
- {
- // Use istringstream for direct correspondence with toString
- StringStream str(val);
- int ret = defaultValue;
- str >> ret;
- return ret;
- }
- //-----------------------------------------------------------------------
- unsigned int StringConverter::parseUnsignedInt(const String& val, unsigned int defaultValue)
- {
- // Use istringstream for direct correspondence with toString
- StringStream str(val);
- unsigned int ret = defaultValue;
- str >> ret;
- return ret;
- }
- //-----------------------------------------------------------------------
- long StringConverter::parseLong(const String& val, long defaultValue)
- {
- // Use istringstream for direct correspondence with toString
- StringStream str(val);
- long ret = defaultValue;
- str >> ret;
- return ret;
- }
- //-----------------------------------------------------------------------
- unsigned long StringConverter::parseUnsignedLong(const String& val, unsigned long defaultValue)
- {
- // Use istringstream for direct correspondence with toString
- StringStream str(val);
- unsigned long ret = defaultValue;
- str >> ret;
- return ret;
- }
- //-----------------------------------------------------------------------
- bool StringConverter::parseBool(const String& val, bool defaultValue)
- {
- if ((StringUtil::startsWith(val, "true") || StringUtil::startsWith(val, "yes")
- || StringUtil::startsWith(val, "1")))
- return true;
- else if ((StringUtil::startsWith(val, "false") || StringUtil::startsWith(val, "no")
- || StringUtil::startsWith(val, "0")))
- return false;
- else
- return defaultValue;
- }
- //-----------------------------------------------------------------------
- Vector2 StringConverter::parseVector2(const String& val, const Vector2& defaultValue)
- {
- // Split on space
- vector<String>::type vec = StringUtil::split(val);
- if (vec.size() != 2)
- {
- return defaultValue;
- }
- else
- {
- return Vector2(parseReal(vec[0]),parseReal(vec[1]));
- }
- }
- //-----------------------------------------------------------------------
- Vector3 StringConverter::parseVector3(const String& val, const Vector3& defaultValue)
- {
- // Split on space
- vector<String>::type vec = StringUtil::split(val);
- if (vec.size() != 3)
- {
- return defaultValue;
- }
- else
- {
- return Vector3(parseReal(vec[0]),parseReal(vec[1]),parseReal(vec[2]));
- }
- }
- //-----------------------------------------------------------------------
- Vector4 StringConverter::parseVector4(const String& val, const Vector4& defaultValue)
- {
- // Split on space
- vector<String>::type vec = StringUtil::split(val);
- if (vec.size() != 4)
- {
- return defaultValue;
- }
- else
- {
- return Vector4(parseReal(vec[0]),parseReal(vec[1]),parseReal(vec[2]),parseReal(vec[3]));
- }
- }
- //-----------------------------------------------------------------------
- Matrix3 StringConverter::parseMatrix3(const String& val, const Matrix3& defaultValue)
- {
- // Split on space
- vector<String>::type vec = StringUtil::split(val);
- if (vec.size() != 9)
- {
- return defaultValue;
- }
- else
- {
- return Matrix3(parseReal(vec[0]),parseReal(vec[1]),parseReal(vec[2]),
- parseReal(vec[3]),parseReal(vec[4]),parseReal(vec[5]),
- parseReal(vec[6]),parseReal(vec[7]),parseReal(vec[8]));
- }
- }
- //-----------------------------------------------------------------------
- Matrix4 StringConverter::parseMatrix4(const String& val, const Matrix4& defaultValue)
- {
- // Split on space
- vector<String>::type vec = StringUtil::split(val);
- if (vec.size() != 16)
- {
- return defaultValue;
- }
- else
- {
- return Matrix4(parseReal(vec[0]),parseReal(vec[1]),parseReal(vec[2]), parseReal(vec[3]),
- parseReal(vec[4]),parseReal(vec[5]), parseReal(vec[6]), parseReal(vec[7]),
- parseReal(vec[8]),parseReal(vec[9]), parseReal(vec[10]), parseReal(vec[11]),
- parseReal(vec[12]),parseReal(vec[13]), parseReal(vec[14]), parseReal(vec[15]));
- }
- }
- //-----------------------------------------------------------------------
- Quaternion StringConverter::parseQuaternion(const String& val, const Quaternion& defaultValue)
- {
- // Split on space
- vector<String>::type vec = StringUtil::split(val);
- if (vec.size() != 4)
- {
- return defaultValue;
- }
- else
- {
- return Quaternion(parseReal(vec[0]),parseReal(vec[1]),parseReal(vec[2]), parseReal(vec[3]));
- }
- }
- //-----------------------------------------------------------------------
- ColourValue StringConverter::parseColourValue(const String& val, const ColourValue& defaultValue)
- {
- // Split on space
- vector<String>::type vec = StringUtil::split(val);
- if (vec.size() == 4)
- {
- return ColourValue(parseReal(vec[0]),parseReal(vec[1]),parseReal(vec[2]), parseReal(vec[3]));
- }
- else if (vec.size() == 3)
- {
- return ColourValue(parseReal(vec[0]),parseReal(vec[1]),parseReal(vec[2]), 1.0f);
- }
- else
- {
- return defaultValue;
- }
- }
- //-----------------------------------------------------------------------
- std::vector<Ogre::String> StringConverter::parseStringVector(const String& val)
- {
- return StringUtil::split(val);
- }
- //-----------------------------------------------------------------------
- bool StringConverter::isNumber(const String& val)
- {
- StringStream str(val);
- float tst;
- str >> tst;
- return !str.fail() && str.eof();
- }
- }
|