Browse Source

Debug output and configuration parser for Type enum.

pull/7/head
Vladimír Vondruš 14 years ago
parent
commit
ca0bbe79fb
  1. 1
      src/Test/CMakeLists.txt
  2. 47
      src/Test/TypeTraitsTest.cpp
  3. 32
      src/Test/TypeTraitsTest.h
  4. 61
      src/TypeTraits.cpp
  5. 26
      src/TypeTraits.h

1
src/Test/CMakeLists.txt

@ -1,5 +1,6 @@
corrade_add_test2(ColorTest ColorTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test2(ResourceManagerTest ResourceManagerTest.cpp LIBRARIES MagnumTestLib)
corrade_add_test2(SwizzleTest SwizzleTest.cpp LIBRARIES MagnumMathTestLib)
corrade_add_test2(TypeTraitsTest TypeTraitsTest.cpp LIBRARIES Magnum)
set_target_properties(ResourceManagerTest PROPERTIES COMPILE_FLAGS -DCORRADE_GRACEFUL_ASSERT)

47
src/Test/TypeTraitsTest.cpp

@ -0,0 +1,47 @@
/*
Copyright © 2010, 2011, 2012 Vladimír Vondruš <mosra@centrum.cz>
This file is part of Magnum.
Magnum is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License version 3
only, as published by the Free Software Foundation.
Magnum is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License version 3 for more details.
*/
#include "TypeTraitsTest.h"
#include <Utility/Configuration.h>
#include "TypeTraits.h"
CORRADE_TEST_MAIN(Magnum::Test::TypeTraitsTest)
using namespace Corrade::Utility;
namespace Magnum { namespace Test {
TypeTraitsTest::TypeTraitsTest() {
addTests(&TypeTraitsTest::debug,
&TypeTraitsTest::configuration);
}
void TypeTraitsTest::debug() {
std::ostringstream o;
Debug(&o) << Type::UnsignedShort;
CORRADE_COMPARE(o.str(), "Type::UnsignedShort\n");
}
void TypeTraitsTest::configuration() {
Configuration c;
c.setValue("type", Type::Byte);
CORRADE_COMPARE(c.value<std::string>("type"), "Byte");
CORRADE_COMPARE(c.value<Type>("type"), Type::Byte);
}
}}

32
src/Test/TypeTraitsTest.h

@ -0,0 +1,32 @@
#ifndef Magnum_Test_TypeTraitsTest_h
#define Magnum_Test_TypeTraitsTest_h
/*
Copyright © 2010, 2011, 2012 Vladimír Vondruš <mosra@centrum.cz>
This file is part of Magnum.
Magnum is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License version 3
only, as published by the Free Software Foundation.
Magnum is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License version 3 for more details.
*/
#include <TestSuite/Tester.h>
namespace Magnum { namespace Test {
class TypeTraitsTest: public Corrade::TestSuite::Tester<TypeTraitsTest> {
public:
TypeTraitsTest();
void debug();
void configuration();
};
}}
#endif

61
src/TypeTraits.cpp

@ -16,6 +16,7 @@
#include "TypeTraits.h"
#include <type_traits>
#include <Utility/Debug.h>
using namespace std;
@ -67,4 +68,64 @@ bool TypeInfo::isIntegral(Type type) {
}
}
#ifndef DOXYGEN_GENERATING_OUTPUT
Debug operator<<(Debug debug, Type value) {
switch(value) {
#define _c(value) case Type::value: return debug << "Type::" #value;
_c(UnsignedByte)
_c(Byte)
_c(UnsignedShort)
_c(Short)
_c(UnsignedInt)
_c(Int)
_c(Float)
#ifndef MAGNUM_TARGET_GLES
_c(Double)
#endif
#undef _c
}
return debug << "Type::(invalid)";
}
#endif
}
namespace Corrade { namespace Utility {
std::string ConfigurationValue<Magnum::Type>::toString(Magnum::Type value, ConfigurationValueFlags) {
switch(value) {
#define _c(value) case Magnum::Type::value: return #value;
_c(UnsignedByte)
_c(Byte)
_c(UnsignedShort)
_c(Short)
_c(UnsignedInt)
_c(Int)
_c(Float)
#ifndef MAGNUM_TARGET_GLES
_c(Double)
#endif
#undef _c
}
return "";
}
Magnum::Type ConfigurationValue<Magnum::Type>::fromString(const std::string& stringValue, ConfigurationValueFlags) {
#define _c(value) if(stringValue == #value) return Magnum::Type::value;
_c(UnsignedByte)
_c(Byte)
_c(UnsignedShort)
_c(Short)
_c(UnsignedInt)
_c(Int)
#ifndef MAGNUM_TARGET_GLES
_c(Double)
#endif
#undef _c
return Magnum::Type::Float;
}
}}

26
src/TypeTraits.h

@ -19,6 +19,8 @@
* @brief Enum Magnum::Type, class Magnum::TypeOf, Magnum::TypeInfo, Magnum::TypeTraits
*/
#include <Utility/ConfigurationValue.h>
#include "Math/MathTypeTraits.h"
#include "AbstractImage.h"
@ -114,6 +116,9 @@ enum class Type: GLenum {
#endif
};
/** @debugoperator{Magnum::TypeInfo} */
Debug MAGNUM_EXPORT operator<<(Debug debug, Type value);
/**
@brief Class for converting Type enum values to types
@ -340,4 +345,25 @@ template<class T> struct TypeTraits<Math::Matrix4<T>>: TypeTraits<Math::Matrix<4
}
namespace Corrade { namespace Utility {
/** @configurationvalue{Magnum::TypeInfo} */
template<> struct MAGNUM_EXPORT ConfigurationValue<Magnum::Type> {
/**
* @brief Writes enum value as string
*
* If the value is invalid, returns empty string.
*/
static std::string toString(Magnum::Type value, ConfigurationValueFlags);
/**
* @brief Reads enum value as string
*
* If the value is invalid, returns @ref Magnum::Type "Magnum::Type::Float".
*/
static Magnum::Type fromString(const std::string& stringValue, ConfigurationValueFlags);
};
}}
#endif

Loading…
Cancel
Save