51 lines
1.6 KiB
C++
Executable File
51 lines
1.6 KiB
C++
Executable File
/*-----------------------------------------------------------------------------+
|
|
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
|