diff --git a/src/Magnum/DebugTools/FrameProfiler.cpp b/src/Magnum/DebugTools/FrameProfiler.cpp index 34f519669..db33b80c9 100644 --- a/src/Magnum/DebugTools/FrameProfiler.cpp +++ b/src/Magnum/DebugTools/FrameProfiler.cpp @@ -682,14 +682,14 @@ namespace Corrade { namespace Utility { using namespace Magnum; #ifdef MAGNUM_TARGET_GL -std::string ConfigurationValue::toString(const DebugTools::FrameProfilerGL::Value value, ConfigurationValueFlags) { +Containers::String ConfigurationValue::toString(const DebugTools::FrameProfilerGL::Value value, ConfigurationValueFlags) { const UnsignedInt bit = Math::log2(UnsignedShort(value)); if(1 << bit == UnsignedShort(value)) return DebugTools::FrameProfilerGLValueNames[bit]; return ""; } -DebugTools::FrameProfilerGL::Value ConfigurationValue::fromString(const std::string& value, ConfigurationValueFlags) { +DebugTools::FrameProfilerGL::Value ConfigurationValue::fromString(Containers::StringView value, ConfigurationValueFlags) { for(std::size_t i = 0; i != Containers::arraySize(DebugTools::FrameProfilerGLValueNames); ++i) if(DebugTools::FrameProfilerGLValueNames[i] == value) return DebugTools::FrameProfilerGL::Value(1 << i); @@ -697,7 +697,7 @@ DebugTools::FrameProfilerGL::Value ConfigurationValue::toString(const DebugTools::FrameProfilerGL::Values value, ConfigurationValueFlags) { +Containers::String ConfigurationValue::toString(const DebugTools::FrameProfilerGL::Values value, ConfigurationValueFlags) { std::string out; for(std::size_t i = 0; i != Containers::arraySize(DebugTools::FrameProfilerGLValueNames); ++i) { @@ -711,8 +711,8 @@ std::string ConfigurationValue::toString(co return out; } -DebugTools::FrameProfilerGL::Values ConfigurationValue::fromString(const std::string& value, ConfigurationValueFlags) { - const std::vector bits = Utility::String::splitWithoutEmptyParts(value); +DebugTools::FrameProfilerGL::Values ConfigurationValue::fromString(Containers::StringView value, ConfigurationValueFlags) { + const Containers::Array bits = value.splitWithoutEmptyParts(); DebugTools::FrameProfilerGL::Values values; for(const std::string& bit: bits) diff --git a/src/Magnum/DebugTools/FrameProfiler.h b/src/Magnum/DebugTools/FrameProfiler.h index 81e1aebbf..924deb385 100644 --- a/src/Magnum/DebugTools/FrameProfiler.h +++ b/src/Magnum/DebugTools/FrameProfiler.h @@ -735,14 +735,14 @@ template<> struct MAGNUM_DEBUGTOOLS_EXPORT ConfigurationValue struct MAGNUM_DEBUGTOOLS_EXPORT ConfigurationValue struct MAGNUM_DEBUGTOOLS_EXPORT ConfigurationValue +#include #include #include "Magnum/Math/Angle.h" @@ -57,12 +57,12 @@ template struct ConfigurationValue> { ConfigurationValue() = delete; /** @brief Writes degrees as a number */ - static std::string toString(const Magnum::Math::Deg& value, ConfigurationValueFlags flags) { + static Containers::String toString(const Magnum::Math::Deg& value, ConfigurationValueFlags flags) { return ConfigurationValue::toString(T(value), flags); } /** @brief Reads degrees as a number */ - static Magnum::Math::Deg fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::Deg fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { return Magnum::Math::Deg(ConfigurationValue::fromString(stringValue, flags)); } }; @@ -72,12 +72,12 @@ template struct ConfigurationValue> { ConfigurationValue() = delete; /** @brief Writes degrees as a number */ - static std::string toString(const Magnum::Math::Rad& value, ConfigurationValueFlags flags) { + static Containers::String toString(const Magnum::Math::Rad& value, ConfigurationValueFlags flags) { return ConfigurationValue::toString(T(value), flags); } /** @brief Reads degrees as a number */ - static Magnum::Math::Rad fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::Rad fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { return Magnum::Math::Rad(ConfigurationValue::fromString(stringValue, flags)); } }; @@ -87,33 +87,34 @@ template struct ConfigurationValue& value, ConfigurationValueFlags flags) { - std::string output; + static Containers::String toString(const Magnum::Math::Vector& value, ConfigurationValueFlags flags) { + Containers::String output; for(std::size_t i = 0; i != size; ++i) { - if(!output.empty()) output += ' '; - output += ConfigurationValue::toString(value[i], flags); + if(!output.isEmpty()) output = output + " "; + output = output + ConfigurationValue::toString(value[i], flags); } return output; } /** @brief Reads elements separated with whitespace */ - static Magnum::Math::Vector fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::Vector fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { Magnum::Math::Vector result; - std::size_t oldpos = 0, pos = std::string::npos, i = 0; + Containers::StringView next, cursor = stringValue; + std::size_t i = 0; do { - pos = stringValue.find(' ', oldpos); - std::string part = stringValue.substr(oldpos, pos-oldpos); + next = cursor.find(" "); + Containers::StringView part = cursor.exceptSuffix(next); - if(!part.empty()) { + if(!part.isEmpty()) { result[i] = ConfigurationValue::fromString(part, flags); ++i; } - oldpos = pos+1; - } while(pos != std::string::npos && i != size); + cursor = cursor.exceptPrefix(next); + } while(cursor); return result; } @@ -158,13 +159,13 @@ template struct ConfigurationValue< ConfigurationValue() = delete; /** @brief Writes elements separated with spaces */ - static std::string toString(const Magnum::Math::RectangularMatrix& value, ConfigurationValueFlags flags) { - std::string output; + static Containers::String toString(const Magnum::Math::RectangularMatrix& value, ConfigurationValueFlags flags) { + Containers::String output; for(std::size_t row = 0; row != rows; ++row) { for(std::size_t col = 0; col != cols; ++col) { - if(!output.empty()) output += ' '; - output += ConfigurationValue::toString(value[col][row], flags); + if(!output.isEmpty()) output = output + " "; + output = output + ConfigurationValue::toString(value[col][row], flags); } } @@ -172,21 +173,22 @@ template struct ConfigurationValue< } /** @brief Reads elements separated with whitespace */ - static Magnum::Math::RectangularMatrix fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::RectangularMatrix fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { Magnum::Math::RectangularMatrix result; - std::size_t oldpos = 0, pos = std::string::npos, i = 0; + Containers::StringView next, cursor = stringValue; + std::size_t i = 0; do { - pos = stringValue.find(' ', oldpos); - std::string part = stringValue.substr(oldpos, pos-oldpos); + next = cursor.find(" "); + Containers::StringView part = cursor.exceptSuffix(next); - if(!part.empty()) { + if(!part.isEmpty()) { result[i%cols][i/cols] = ConfigurationValue::fromString(part, flags); ++i; } - oldpos = pos+1; - } while(pos != std::string::npos && i != cols*rows); + cursor = cursor.exceptPrefix(next); + } while(cursor); return result; } @@ -234,13 +236,13 @@ template struct ConfigurationValue& value, const ConfigurationValueFlags flags) { + static Containers::String toString(const Magnum::Math::Range& value, const ConfigurationValueFlags flags) { return ConfigurationValue>::toString( reinterpret_cast&>(value), flags); } /** @brief Reads elements separated with whitespace */ - static Magnum::Math::Range fromString(const std::string& stringValue, const ConfigurationValueFlags flags) { + static Magnum::Math::Range fromString(Containers::StringView stringValue, const ConfigurationValueFlags flags) { const auto vec = ConfigurationValue>::fromString(stringValue, flags); return *reinterpret_cast*>(vec.data()); } @@ -267,12 +269,12 @@ template struct ConfigurationValue> { ConfigurationValue() = delete; /** @brief Writes elements separated with spaces */ - static std::string toString(const Magnum::Math::Complex& value, ConfigurationValueFlags flags) { + static Containers::String toString(const Magnum::Math::Complex& value, ConfigurationValueFlags flags) { return ConfigurationValue>::toString(reinterpret_cast&>(value), flags); } /** @brief Reads elements separated with whitespace */ - static Magnum::Math::Complex fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::Complex fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { const Magnum::Math::Vector<2, T> value = ConfigurationValue>::fromString(stringValue, flags); return reinterpret_cast&>(value); } @@ -283,12 +285,12 @@ template struct ConfigurationValue> { ConfigurationValue() = delete; /** @brief Writes elements separated with spaces */ - static std::string toString(const Magnum::Math::DualComplex& value, ConfigurationValueFlags flags) { + static Containers::String toString(const Magnum::Math::DualComplex& value, ConfigurationValueFlags flags) { return ConfigurationValue>::toString(reinterpret_cast&>(value), flags); } /** @brief Reads elements separated with whitespace */ - static Magnum::Math::DualComplex fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::DualComplex fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { const Magnum::Math::Vector<4, T> value = ConfigurationValue>::fromString(stringValue, flags); return reinterpret_cast&>(value); } @@ -302,12 +304,12 @@ template struct ConfigurationValue> { ConfigurationValue() = delete; /** @brief Writes elements separated with spaces */ - static std::string toString(const Magnum::Math::Quaternion& value, ConfigurationValueFlags flags) { + static Containers::String toString(const Magnum::Math::Quaternion& value, ConfigurationValueFlags flags) { return ConfigurationValue>::toString(reinterpret_cast&>(value), flags); } /** @brief Reads elements separated with whitespace */ - static Magnum::Math::Quaternion fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::Quaternion fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { const Magnum::Math::Vector<4, T> value = ConfigurationValue>::fromString(stringValue, flags); return reinterpret_cast&>(value); } @@ -321,12 +323,12 @@ template struct ConfigurationValue> { ConfigurationValue() = delete; /** @brief Writes elements separated with spaces */ - static std::string toString(const Magnum::Math::DualQuaternion& value, ConfigurationValueFlags flags) { + static Containers::String toString(const Magnum::Math::DualQuaternion& value, ConfigurationValueFlags flags) { return ConfigurationValue>::toString(reinterpret_cast&>(value), flags); } /** @brief Reads elements separated with whitespace */ - static Magnum::Math::DualQuaternion fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::DualQuaternion fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { const Magnum::Math::Vector<8, T> value = ConfigurationValue>::fromString(stringValue, flags); return reinterpret_cast&>(value); } @@ -343,13 +345,13 @@ template str ConfigurationValue() = delete; /** @brief Writes elements separated with spaces */ - static std::string toString(const Magnum::Math::Bezier& value, ConfigurationValueFlags flags) { - std::string output; + static Containers::String toString(const Magnum::Math::Bezier& value, ConfigurationValueFlags flags) { + Containers::String output; for(std::size_t o = 0; o != order + 1; ++o) { for(std::size_t i = 0; i != dimensions; ++i) { - if(!output.empty()) output += ' '; - output += ConfigurationValue::toString(value[o][i], flags); + if(!output.isEmpty()) output = output + " "; + output = output + ConfigurationValue::toString(value[o][i], flags); } } @@ -357,21 +359,22 @@ template str } /** @brief Reads elements separated with whitespace */ - static Magnum::Math::Bezier fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + static Magnum::Math::Bezier fromString(Containers::StringView stringValue, ConfigurationValueFlags flags) { Magnum::Math::Bezier result; - std::size_t oldpos = 0, pos = std::string::npos, i = 0; + Containers::StringView next, cursor = stringValue; + std::size_t i = 0; do { - pos = stringValue.find(' ', oldpos); - std::string part = stringValue.substr(oldpos, pos-oldpos); + next = cursor.find(" "); + Containers::StringView part = cursor.exceptSuffix(next); - if(!part.empty()) { + if(!part.isEmpty()) { result[i/dimensions][i%dimensions] = ConfigurationValue::fromString(part, flags); ++i; } - oldpos = pos+1; - } while(pos != std::string::npos); + cursor = cursor.exceptPrefix(next); + } while(cursor); return result; }