//============================================================================= // // OpenMesh // Copyright (C) 2003 by Computer Graphics Group, RWTH Aachen // www.openmesh.org // //----------------------------------------------------------------------------- // // License // // This library is free software; you can redistribute it and/or modify it // under the terms of the GNU Lesser General Public License as published // by the Free Software Foundation, version 2.1. // // This library 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 for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // //----------------------------------------------------------------------------- // // $Revision: 4254 $ // $Date: 2009-01-12 14:44:00 +0100 (Mo, 12. Jan 2009) $ // //============================================================================= /** \file NumLimitsT.hh Temporary solution until std::numeric_limits is standard. */ //============================================================================= // // CLASS NumLimitsT // //============================================================================= #ifndef OPENMESH_UTILS_NUMLIMITS_HH #define OPENMESH_UTILS_NUMLIMITS_HH //== INCLUDES ================================================================= #include "Config.hh" #include #include //== NAMESPEACES ============================================================== namespace OpenMesh { // BEGIN_NS_OPENMESH namespace Utils { // BEGIN_NS_UTILS //== CLASS DEFINITION ========================================================= /** \class NumLimitsT NumLimitsT.hh int float_min = OpenMesh::NumLimitsT::min(); float double_max = OpenMesh::NumLimitsT::max(); \endcode \note This functionality should be provided by std::numeric_limits. This template does not exist on gcc <= 2.95.3. The class template NumLimitsT is just a workaround. **/ template class NumLimitsT { public: /// Return the smallest \em absolte value a scalar type can store. static inline Scalar min() { return 0; } /// Return the maximum \em absolte value a scalar type can store. static inline Scalar max() { return 0; } static inline bool is_float() { return false; } static inline bool is_integer() { return !NumLimitsT::is_float(); } static inline bool is_signed() { return true; } }; // is_float template<> inline bool NumLimitsT::is_float() { return true; } template<> inline bool NumLimitsT::is_float() { return true; } template<> inline bool NumLimitsT::is_float() { return true; } // is_signed template<> inline bool NumLimitsT::is_signed() { return false; } template<> inline bool NumLimitsT::is_signed() { return false; } template<> inline bool NumLimitsT::is_signed() { return false; } template<> inline bool NumLimitsT::is_signed() { return false; } template<> inline bool NumLimitsT::is_signed() { return false; } // min/max template<> inline int NumLimitsT::min() { return INT_MIN; } template<> inline int NumLimitsT::max() { return INT_MAX; } template<> inline float NumLimitsT::min() { return FLT_MIN; } template<> inline float NumLimitsT::max() { return FLT_MAX; } template<> inline double NumLimitsT::min() { return DBL_MIN; } template<> inline double NumLimitsT::max() { return DBL_MAX; } //============================================================================= } // END_NS_UTILS } // END_NS_OPENMESH //============================================================================= #endif // OPENMESH_NUMLIMITS_HH defined //=============================================================================