STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ... ATLSTL - Template Software for the Active Template Library COMSTL - The Standard Template Library meets the Component Object Model .netSTL - Standard Template Library meets the Microsoft.NET Common Language Runtime InetSTL - The Standard Template Library meets WinInet MFCSTL - Template Software for the Microsoft Foundation Classes UNIXSTL - Template Software for the UNIX Operating System WinSTL - where the Standard Template Library meets the Win32 API

Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

stlsoft_limit_traits.h

Go to the documentation of this file.
00001 /* 
00002  * File:        stlsoft_limit_traits.h
00003  *
00004  * Purpose:     limit_traits classes. Provides nothing that is not in
00005  *              std::numeric_limits, but uses minimum() and maximum() rather
00006  *              than min() and max(), since some compilers are not well-behaved
00007  *              in making these functions rather than macros.
00008  *
00009  * Created:     16th January 2002
00010  * Updated:     11th September 2004
00011  *
00012  * Home:        http://stlsoft.org/
00013  *
00014  * Copyright (c) 2002-2004, Matthew Wilson and Synesis Software
00015  * All rights reserved.
00016  *
00017  * Redistribution and use in source and binary forms, with or without
00018  * modification, are permitted provided that the following conditions are met:
00019  *
00020  * - Redistributions of source code must retain the above copyright notice, this
00021  *   list of conditions and the following disclaimer.
00022  * - Redistributions in binary form must reproduce the above copyright notice,
00023  *   this list of conditions and the following disclaimer in the documentation
00024  *   and/or other materials provided with the distribution.
00025  * - Neither the name(s) of Matthew Wilson and Synesis Software nor the names of
00026  *   any contributors may be used to endorse or promote products derived from
00027  *   this software without specific prior written permission.
00028  *
00029  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00030  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00031  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00032  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00033  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00034  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00035  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00036  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00037  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00038  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00039  * POSSIBILITY OF SUCH DAMAGE.
00040  *
00041  * 
00042 
00043 
00047 
00048 #ifndef STLSOFT_INCL_H_STLSOFT_LIMIT_TRAITS
00049 #define STLSOFT_INCL_H_STLSOFT_LIMIT_TRAITS
00050 
00051 #ifndef __STLSOFT_DOCUMENTATION_SKIP_SECTION
00052 # define STLSOFT_VER_H_STLSOFT_LIMIT_TRAITS_MAJOR        2
00053 # define STLSOFT_VER_H_STLSOFT_LIMIT_TRAITS_MINOR        0
00054 # define STLSOFT_VER_H_STLSOFT_LIMIT_TRAITS_REVISION     1
00055 # define STLSOFT_VER_H_STLSOFT_LIMIT_TRAITS_EDIT         30
00056 #endif /* !__STLSOFT_DOCUMENTATION_SKIP_SECTION */
00057 
00058 /* 
00059  * Includes
00060  */
00061 
00062 #ifndef STLSOFT_INCL_H_STLSOFT
00063 # include "stlsoft.h"   // Include the STLSoft root header
00064 #endif /* !STLSOFT_INCL_H_STLSOFT */
00065 
00066 /* 
00067  * Namespace
00068  */
00069 
00070 #ifndef _STLSOFT_NO_NAMESPACE
00071 namespace stlsoft
00072 {
00073 #endif /* _STLSOFT_NO_NAMESPACE */
00074 
00075 /* 
00076  * Constants & definitions
00077  */
00078 
00079 #ifndef __STLSOFT_DOCUMENTATION_SKIP_SECTION
00080 
00081 #define __STLSOFT_GEN_SINT8_SUFFIX(i)           (i)
00082 #define __STLSOFT_GEN_UINT8_SUFFIX(i)           (i ## U)
00083 #define __STLSOFT_GEN_SINT16_SUFFIX(i)          (i)
00084 #define __STLSOFT_GEN_UINT16_SUFFIX(i)          (i ## U)
00085 #define __STLSOFT_GEN_SINT32_SUFFIX(i)          (i ## L)
00086 #define __STLSOFT_GEN_UINT32_SUFFIX(i)          (i ## UL)
00087 #if (   defined(__STLSOFT_COMPILER_IS_DMC) || \
00088         defined(__STLSOFT_COMPILER_IS_COMO) || \
00089         defined(__STLSOFT_COMPILER_IS_GCC) || \
00090         defined(__STLSOFT_COMPILER_IS_MWERKS))
00091 # define __STLSOFT_GEN_SINT64_SUFFIX(i)         (i ## LL)
00092 # define __STLSOFT_GEN_UINT64_SUFFIX(i)         (i ## ULL)
00093 #elif ( defined(__STLSOFT_COMPILER_IS_BORLAND) || \
00094         defined(__STLSOFT_COMPILER_IS_INTEL) || \
00095         defined(__STLSOFT_COMPILER_IS_MSVC) || \
00096         defined(__STLSOFT_COMPILER_IS_VECTORC) || \
00097         defined(__STLSOFT_COMPILER_IS_WATCOM))
00098 # define __STLSOFT_GEN_SINT64_SUFFIX(i)         (i ## L)
00099 # define __STLSOFT_GEN_UINT64_SUFFIX(i)         (i ## UL)
00100 #else
00101 #error Compiler not discriminated
00102 #endif /* __STLSOFT_DVS_COMPILER_GNUC || __STLSOFT_DVS_COMPILER_DECCXX */
00103 
00104 
00105 #define __STLSOFT_LIMIT_TRAITS__SINT8_MIN       (- __STLSOFT_GEN_SINT8_SUFFIX(127) - 1)
00106 #define __STLSOFT_LIMIT_TRAITS__SINT8_MAX       (+ __STLSOFT_GEN_SINT8_SUFFIX(127))
00107 
00108 #define __STLSOFT_LIMIT_TRAITS__UINT8_MIN       (  __STLSOFT_GEN_UINT8_SUFFIX(0))
00109 #define __STLSOFT_LIMIT_TRAITS__UINT8_MAX       (  __STLSOFT_GEN_UINT8_SUFFIX(255))
00110 
00111 
00112 #define __STLSOFT_LIMIT_TRAITS__SINT16_MIN      (- __STLSOFT_GEN_SINT16_SUFFIX(32767) - 1)
00113 #define __STLSOFT_LIMIT_TRAITS__SINT16_MAX      (+ __STLSOFT_GEN_SINT16_SUFFIX(32767))
00114 
00115 #define __STLSOFT_LIMIT_TRAITS__UINT16_MIN      (  __STLSOFT_GEN_UINT16_SUFFIX(0))
00116 #define __STLSOFT_LIMIT_TRAITS__UINT16_MAX      (  __STLSOFT_GEN_UINT16_SUFFIX(65535))
00117 
00118 
00119 #define __STLSOFT_LIMIT_TRAITS__SINT32_MIN      (- __STLSOFT_GEN_SINT32_SUFFIX(2147483647) - 1)
00120 #define __STLSOFT_LIMIT_TRAITS__SINT32_MAX      (+ __STLSOFT_GEN_SINT32_SUFFIX(2147483647))
00121 
00122 #define __STLSOFT_LIMIT_TRAITS__UINT32_MIN      (  __STLSOFT_GEN_UINT32_SUFFIX(0))
00123 #define __STLSOFT_LIMIT_TRAITS__UINT32_MAX      (  __STLSOFT_GEN_UINT32_SUFFIX(4294967295))
00124 
00125 
00126 #define __STLSOFT_LIMIT_TRAITS__SINT64_MIN      (- __STLSOFT_GEN_SINT64_SUFFIX(9223372036854775807) - 1)
00127 #define __STLSOFT_LIMIT_TRAITS__SINT64_MAX      (+ __STLSOFT_GEN_SINT64_SUFFIX(9223372036854775807) )
00128 
00129 #define __STLSOFT_LIMIT_TRAITS__UINT64_MIN      (  __STLSOFT_GEN_UINT64_SUFFIX(0) )
00130 #define __STLSOFT_LIMIT_TRAITS__UINT64_MAX      (  __STLSOFT_GEN_UINT64_SUFFIX(18446744073709551615) )
00131 
00132 #endif /* !__STLSOFT_DOCUMENTATION_SKIP_SECTION */
00133 
00134 /* 
00135  * Classes
00136  */
00137 
00138 #ifdef __STLSOFT_DOCUMENTATION_SKIP_SECTION
00148 template <ss_typename_param_k T>
00149 struct limit_traits
00150 {
00151 public:
00153     typedef T value_type;
00154 
00155 public:
00157     static value_type       minimum();
00159     static value_type       maximum();
00160 
00161 #ifdef STLSOFT_CF_MEMBER_CONSTANT_SUPPORT
00162     static const value_type minimum_value = ???;
00163     static const value_type maximum_value = ???;
00164 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00165 };
00166 
00167 #else
00168 
00169 // class limit_traits
00170 
00171 template <ss_typename_param_k T>
00172 struct limit_traits;
00173 
00174 /* s/uint8 */
00175 STLSOFT_TEMPLATE_SPECIALISATION
00176 struct limit_traits<ss_sint8_t>
00177 {
00178 public:
00179     typedef ss_sint8_t  value_type;
00180 
00181 public:
00182     static value_type       minimum() { return __STLSOFT_LIMIT_TRAITS__SINT8_MIN; }
00183     static value_type       maximum() { return __STLSOFT_LIMIT_TRAITS__SINT8_MAX; }
00184 
00185 #ifdef STLSOFT_CF_MEMBER_CONSTANT_SUPPORT
00186     static const value_type minimum_value = __STLSOFT_LIMIT_TRAITS__SINT8_MIN;
00187     static const value_type maximum_value = __STLSOFT_LIMIT_TRAITS__SINT8_MAX;
00188 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00189 };
00190 
00191 STLSOFT_TEMPLATE_SPECIALISATION
00192 struct limit_traits<ss_uint8_t>
00193 {
00194 public:
00195     typedef ss_uint8_t  value_type;
00196 
00197 public:
00198     static value_type   minimum() { return __STLSOFT_LIMIT_TRAITS__UINT8_MIN; }
00199     static value_type   maximum() { return __STLSOFT_LIMIT_TRAITS__UINT8_MAX; }
00200 
00201 #ifdef STLSOFT_CF_MEMBER_CONSTANT_SUPPORT
00202     static const value_type minimum_value = __STLSOFT_LIMIT_TRAITS__UINT8_MIN;
00203     static const value_type maximum_value = __STLSOFT_LIMIT_TRAITS__UINT8_MAX;
00204 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00205 };
00206 
00207 /* s/uint16 */
00208 STLSOFT_TEMPLATE_SPECIALISATION
00209 struct limit_traits<ss_sint16_t>
00210 {
00211 public:
00212     typedef ss_sint16_t value_type;
00213 
00214 public:
00215     static value_type   minimum() { return __STLSOFT_LIMIT_TRAITS__SINT16_MIN; }
00216     static value_type   maximum() { return __STLSOFT_LIMIT_TRAITS__SINT16_MAX; }
00217 
00218 #ifdef STLSOFT_CF_MEMBER_CONSTANT_SUPPORT
00219     static const value_type minimum_value = __STLSOFT_LIMIT_TRAITS__SINT16_MIN;
00220     static const value_type maximum_value = __STLSOFT_LIMIT_TRAITS__SINT16_MAX;
00221 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00222 };
00223 
00224 STLSOFT_TEMPLATE_SPECIALISATION
00225 struct limit_traits<ss_uint16_t>
00226 {
00227 public:
00228     typedef ss_uint16_t value_type;
00229 
00230 public:
00231     static value_type   minimum() { return __STLSOFT_LIMIT_TRAITS__UINT16_MIN; }
00232     static value_type   maximum() { return __STLSOFT_LIMIT_TRAITS__UINT16_MAX; }
00233 
00234 #ifdef STLSOFT_CF_MEMBER_CONSTANT_SUPPORT
00235     static const value_type minimum_value = __STLSOFT_LIMIT_TRAITS__UINT16_MIN;
00236     static const value_type maximum_value = __STLSOFT_LIMIT_TRAITS__UINT16_MAX;
00237 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00238 };
00239 
00240 /* s/uint32 */
00241 STLSOFT_TEMPLATE_SPECIALISATION
00242 struct limit_traits<ss_sint32_t>
00243 {
00244 public:
00245     typedef ss_sint32_t value_type;
00246 
00247 public:
00248     static value_type   minimum() { return __STLSOFT_LIMIT_TRAITS__SINT32_MIN; }
00249     static value_type   maximum() { return __STLSOFT_LIMIT_TRAITS__SINT32_MAX; }
00250 
00251 #ifdef STLSOFT_CF_MEMBER_CONSTANT_SUPPORT
00252     static const value_type minimum_value = __STLSOFT_LIMIT_TRAITS__SINT32_MIN;
00253     static const value_type maximum_value = __STLSOFT_LIMIT_TRAITS__SINT32_MAX;
00254 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00255 };
00256 
00257 STLSOFT_TEMPLATE_SPECIALISATION
00258 struct limit_traits<ss_uint32_t>
00259 {
00260 public:
00261     typedef ss_uint32_t value_type;
00262 
00263 public:
00264     static value_type   minimum() { return __STLSOFT_LIMIT_TRAITS__UINT32_MIN; }
00265     static value_type   maximum() { return __STLSOFT_LIMIT_TRAITS__UINT32_MAX; }
00266 
00267 #ifdef STLSOFT_CF_MEMBER_CONSTANT_SUPPORT
00268     static const value_type minimum_value = __STLSOFT_LIMIT_TRAITS__UINT32_MIN;
00269     static const value_type maximum_value = __STLSOFT_LIMIT_TRAITS__UINT32_MAX;
00270 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00271 };
00272 
00273 #ifdef STLSOFT_CF_64BIT_INT_SUPPORT
00274 
00275 /* s/uint64 */
00276 STLSOFT_TEMPLATE_SPECIALISATION
00277 struct limit_traits<ss_sint64_t>
00278 {
00279 public:
00280     typedef ss_sint64_t value_type;
00281 
00282 public:
00283     static value_type   minimum() { return __STLSOFT_LIMIT_TRAITS__SINT64_MIN; }
00284     static value_type   maximum() { return __STLSOFT_LIMIT_TRAITS__SINT64_MAX; }
00285 
00286 #if defined(STLSOFT_CF_MEMBER_CONSTANT_SUPPORT) && \
00287     !defined(__STLSOFT_COMPILER_IS_BORLAND)
00288     static const value_type minimum_value = __STLSOFT_LIMIT_TRAITS__SINT64_MIN;
00289     static const value_type maximum_value = __STLSOFT_LIMIT_TRAITS__SINT64_MAX;
00290 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00291 };
00292 
00293 STLSOFT_TEMPLATE_SPECIALISATION
00294 struct limit_traits<ss_uint64_t>
00295 {
00296 public:
00297     typedef ss_uint64_t value_type;
00298 
00299 public:
00300     static value_type   minimum() { return __STLSOFT_LIMIT_TRAITS__UINT64_MIN; }
00301     static value_type   maximum() { return __STLSOFT_LIMIT_TRAITS__UINT64_MAX; }
00302 
00303 #if defined(STLSOFT_CF_MEMBER_CONSTANT_SUPPORT) && \
00304     !defined(__STLSOFT_COMPILER_IS_BORLAND)
00305     static const value_type minimum_value = __STLSOFT_LIMIT_TRAITS__UINT64_MIN;
00306     static const value_type maximum_value = __STLSOFT_LIMIT_TRAITS__UINT64_MAX;
00307 #endif /* STLSOFT_CF_MEMBER_CONSTANT_SUPPORT */
00308 };
00309 #endif /* STLSOFT_CF_64BIT_INT_SUPPORT */
00310 
00311 #endif /* !__STLSOFT_DOCUMENTATION_SKIP_SECTION */
00312 
00313 /* 
00314 
00315 #ifndef _STLSOFT_NO_NAMESPACE
00316 } // namespace stlsoft
00317 #endif /* _STLSOFT_NO_NAMESPACE */
00318 
00319 /* 
00320 
00321 #endif /* !STLSOFT_INCL_H_STLSOFT_LIMIT_TRAITS */
00322 
00323 /* 

STLSoft Libraries documentation © Synesis Software Pty Ltd, 2001-2004