Browse Source

Math: ability to save and restore Deg and Rad from configuration.

pull/157/head
Vladimír Vondruš 10 years ago
parent
commit
9508d94aae
  1. 34
      src/Magnum/Math/Angle.h
  2. 29
      src/Magnum/Math/Test/AngleTest.cpp

34
src/Magnum/Math/Angle.h

@ -268,4 +268,38 @@ extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utili
}}
namespace Corrade { namespace Utility {
/** @configurationvalue{Magnum::Math::Deg} */
template<class T> struct ConfigurationValue<Magnum::Math::Deg<T>> {
ConfigurationValue() = delete;
/** @brief Writes degrees as a number */
static std::string toString(const Magnum::Math::Deg<T>& value, ConfigurationValueFlags flags) {
return ConfigurationValue<T>::toString(T(value), flags);
}
/** @brief Reads degrees as a number */
static Magnum::Math::Deg<T> fromString(const std::string& stringValue, ConfigurationValueFlags flags) {
return Magnum::Math::Deg<T>(ConfigurationValue<T>::fromString(stringValue, flags));
}
};
/** @configurationvalue{Magnum::Math::Rad} */
template<class T> struct ConfigurationValue<Magnum::Math::Rad<T>> {
ConfigurationValue() = delete;
/** @brief Writes degrees as a number */
static std::string toString(const Magnum::Math::Rad<T>& value, ConfigurationValueFlags flags) {
return ConfigurationValue<T>::toString(T(value), flags);
}
/** @brief Reads degrees as a number */
static Magnum::Math::Rad<T> fromString(const std::string& stringValue, ConfigurationValueFlags flags) {
return Magnum::Math::Rad<T>(ConfigurationValue<T>::fromString(stringValue, flags));
}
};
}}
#endif

29
src/Magnum/Math/Test/AngleTest.cpp

@ -25,6 +25,7 @@
#include <sstream>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/Utility/Configuration.h>
#include "Magnum/Math/Angle.h"
@ -40,6 +41,8 @@ struct AngleTest: Corrade::TestSuite::Tester {
void debugDeg();
void debugRad();
void configurationDeg();
void configurationRad();
};
typedef Math::Deg<Float> Deg;
@ -56,7 +59,9 @@ AngleTest::AngleTest() {
&AngleTest::conversion,
&AngleTest::debugDeg,
&AngleTest::debugRad});
&AngleTest::debugRad,
&AngleTest::configurationDeg,
&AngleTest::configurationRad});
}
void AngleTest::construct() {
@ -175,6 +180,28 @@ void AngleTest::debugRad() {
CORRADE_COMPARE(o.str(), "Rad(-1.5708)\n");
}
void AngleTest::configurationDeg() {
Corrade::Utility::Configuration c;
Deg angle{25.3f};
std::string value("25.3");
c.setValue("angle", angle);
CORRADE_COMPARE(c.value("angle"), value);
CORRADE_COMPARE(c.value<Deg>("angle"), angle);
}
void AngleTest::configurationRad() {
Corrade::Utility::Configuration c;
Rad angle{3.14159f};
std::string value("3.14159");
c.setValue("angle", angle);
CORRADE_COMPARE(c.value("angle"), value);
CORRADE_COMPARE(c.value<Rad>("angle"), angle);
}
}}}
CORRADE_TEST_MAIN(Magnum::Math::Test::AngleTest)

Loading…
Cancel
Save