⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imathlimits.h

📁 image converter source code
💻 H
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2002, Industrial Light & Magic, a division of Lucas// Digital Ltd. LLC// // All rights reserved.// // Redistribution and use in source and binary forms, with or without// modification, are permitted provided that the following conditions are// met:// *       Redistributions of source code must retain the above copyright// notice, this list of conditions and the following disclaimer.// *       Redistributions in binary form must reproduce the above// copyright notice, this list of conditions and the following disclaimer// in the documentation and/or other materials provided with the// distribution.// *       Neither the name of Industrial Light & Magic nor the names of// its contributors may be used to endorse or promote products derived// from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE./////////////////////////////////////////////////////////////////////////////#ifndef INCLUDED_IMATHLIMITS_H#define INCLUDED_IMATHLIMITS_H//----------------------------------------------------------------////	Limitations of the basic C++ numerical data types////----------------------------------------------------------------#include <float.h>#include <limits.h>//------------------------------------------// In Windows, min and max are macros.  Yay.//------------------------------------------#if defined _WIN32 || defined _WIN64    #ifdef min        #undef min    #endif    #ifdef max        #undef max    #endif#endifnamespace Imath {//-----------------------------------------------------------------//// Template class limits<T> returns information about the limits// of numerical data type T:////	min()		largest possible negative value of type T////	max()		largest possible positive value of type T////	smallest()	smallest possible positive value of type T////	epsilon()	smallest possible e of type T, for which//			1 + e != 1////	isIntegral()	returns true if T is an integral type////	isSigned()	returns true if T is signed//// Class limits<T> is useful to implement template classes or// functions which depend on the limits of a numerical type// which is not known in advance; for example:////	template <class T> max (T x[], int n)//	{//	    T m = limits<T>::min();////	    for (int i = 0; i < n; i++)//		if (m < x[i])//		    m = x[i];////	    return m;//	}//// Class limits<T> has been implemented for the following types:////	char, signed char, unsigned char//	short, unsigned short//	int, unsigned int//	long, unsigned long//	float//	double//	long double//// Class limits<T> has only static member functions, all of which// are implemented as inlines.  No objects of type limits<T> are// ever created.////-----------------------------------------------------------------template <class T> struct limits{    static T	min();    static T	max();    static T	smallest();    static T	epsilon();    static bool	isIntegral();    static bool	isSigned();};//---------------// Implementation//---------------template <>struct limits <char>{    static char			min()		{return CHAR_MIN;}    static char			max()		{return CHAR_MAX;}    static char			smallest()	{return 1;}    static char			epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return (char) ~0 < 0;}};template <>struct limits <signed char>{    static signed char		min()		{return SCHAR_MIN;}    static signed char		max()		{return SCHAR_MAX;}    static signed char		smallest()	{return 1;}    static signed char		epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return true;}};template <>struct limits <unsigned char>{    static unsigned char	min()		{return 0;}    static unsigned char	max()		{return UCHAR_MAX;}    static unsigned char	smallest()	{return 1;}    static unsigned char	epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return false;}};template <>struct limits <short>{    static short		min()		{return SHRT_MIN;}    static short		max()		{return SHRT_MAX;}    static short		smallest()	{return 1;}    static short		epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return true;}};template <>struct limits <unsigned short>{    static unsigned short	min()		{return 0;}    static unsigned short	max()		{return USHRT_MAX;}    static unsigned short	smallest()	{return 1;}    static unsigned short	epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return false;}};template <>struct limits <int>{    static int			min()		{return INT_MIN;}    static int			max()		{return INT_MAX;}    static int			smallest()	{return 1;}    static int			epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return true;}};template <>struct limits <unsigned int>{    static unsigned int		min()		{return 0;}    static unsigned int		max()		{return UINT_MAX;}    static unsigned int		smallest()	{return 1;}    static unsigned int		epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return false;}};template <>struct limits <long>{    static long			min()		{return LONG_MIN;}    static long			max()		{return LONG_MAX;}    static long			smallest()	{return 1;}    static long			epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return true;}};template <>struct limits <unsigned long>{    static unsigned long	min()		{return 0;}    static unsigned long	max()		{return ULONG_MAX;}    static unsigned long	smallest()	{return 1;}    static unsigned long	epsilon()	{return 1;}    static bool			isIntegral()	{return true;}    static bool			isSigned()	{return false;}};template <>struct limits <float>{    static float		min()		{return -FLT_MAX;}    static float		max()		{return FLT_MAX;}    static float		smallest()	{return FLT_MIN;}    static float		epsilon()	{return FLT_EPSILON;}    static bool			isIntegral()	{return false;}    static bool			isSigned()	{return true;}};template <>struct limits <double>{    static double		min()		{return -DBL_MAX;}    static double		max()		{return DBL_MAX;}    static double		smallest()	{return DBL_MIN;}    static double		epsilon()	{return DBL_EPSILON;}    static bool			isIntegral()	{return false;}    static bool			isSigned()	{return true;}};template <>struct limits <long double>{    static long double		min()		{return -LDBL_MAX;}    static long double		max()		{return LDBL_MAX;}    static long double		smallest()	{return LDBL_MIN;}    static long double		epsilon()	{return LDBL_EPSILON;}    static bool			isIntegral()	{return false;}    static bool			isSigned()	{return true;}};} // namespace Imath#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -