/*-----------------------------------------------------------------------------+ | |
Copyright (c) 2008-2009: Joachim Faulhaber | |
+------------------------------------------------------------------------------+ | |
Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin | |
+------------------------------------------------------------------------------+ | |
Distributed under the Boost Software License, Version 1.0. | |
(See accompanying file LICENCE.txt or copy at | |
http://www.boost.org/LICENSE_1_0.txt) | |
+-----------------------------------------------------------------------------*/ | |
#ifndef BOOST_ICL_VALUE_SIZE_HPP_JOFA_081004 | |
#define BOOST_ICL_VALUE_SIZE_HPP_JOFA_081004 | |
namespace boost{ namespace icl | |
{ | |
template <typename Type> | |
Type abs(Type val) { return val < 0 ? -val : val; } | |
/// static class template for the size of a type's value | |
/** This function is needed to be able to order values according | |
to their size. This is used to e.g. prefer simple test | |
instances and to express this simplicity independent of the | |
type of the test case. | |
@author Joachim Faulhaber | |
*/ | |
template <class Type> | |
struct value_size | |
{ | |
/** The size of a value is used to be able to order values according to | |
their simplicity */ | |
static std::size_t apply(const Type& val); | |
}; | |
template<> inline std::size_t value_size<int>::apply(const int& value) | |
{ return abs(value); } | |
template<> inline std::size_t value_size<double>::apply(const double& value) | |
{ return static_cast<int>(abs(value)); } | |
template <typename Type> | |
inline std::size_t value_size<Type>::apply(const Type& value) | |
{ return icl::iterative_size(value); } | |
}} // namespace boost icl | |
#endif | |