Main Page Class Hierarchy Compound List File List Compound Members File Members

Basics.h

Go to the documentation of this file.
00001 /*
00002 File: Basics.h
00003 
00004 Function: Basic definitions for all files. Contains type definitions,
00005 assertion and debugging facilities, and miscellaneous
00006 useful template functions.
00007 
00008 Author(s): Andrew Willmott
00009 
00010 Copyright: (c) 1995-2000, Andrew Willmott
00011 
00012 Notes: This header is affected by the following defines:
00013 
00014 CL_CHECKING - Include code for assertions,
00015 range errors and warnings.
00016 CL_DEBUG - Enables misc. debugging statements.
00017 CL_FLOAT - Use floats for real numbers. (Doubles
00018 are the default.)
00019 CL_NO_BOOL - There is no bool type.
00020 CL_NO_TF - true and false are not predefined.
00021 */
00022 
00023 #ifndef __Basics__
00024 #define __Basics__ 
00025 
00026 #include "cl/CLConfig.h"
00027 #include <iostream.h>
00028 #include <math.h>
00029 
00030 
00031 // --- Basic types -------------------------------------------------------------
00032 
00033  typedef void Void;
00034  typedef float Float;
00035  typedef double Double;
00036 
00037  typedef int Int;
00038  typedef long Long;
00039 
00040  typedef signed int SInt;
00041  typedef signed long SLong;
00042  typedef signed short SInt16;
00043  typedef signed long SInt32;
00044 
00045  typedef unsigned int UInt;
00046  typedef unsigned long ULong;
00047  typedef unsigned short UInt16;
00048  typedef unsigned int UInt32;
00049 #ifdef CL_64_BIT
00050 typedef signed long SInt64;
00051 typedef unsigned long UInt64;
00052 #endif
00053 
00054 #ifndef CL_64_BIT
00055  typedef signed long SAddrInt;
00056  typedef unsigned long UAddrInt;
00057 #else
00058 typedef signed long long SAddrInt;
00059 typedef unsigned long long UAddrInt;
00060 #endif
00061 // Integral type that is the same size as a pointer.
00062 
00063  typedef unsigned char Byte;
00064  typedef unsigned char SByte;
00065  typedef char Char;
00066 
00067 #ifndef CL_FLOAT
00068  typedef Double Real;
00069 #else
00070 typedef Float Real;
00071 #endif
00072 
00073  #define SELF (*this) // A syntactic convenience. 
00074 
00075 
00076 // --- Boolean type ------------------------------------------------------------
00077 
00078 // X11 #defines 'Bool' -- typical.
00079 
00080 #ifdef Bool 
00081 #undef Bool
00082 #endif
00083 
00084 #ifndef CL_NO_BOOL
00085 // if the compiler implements the bool type...
00086  typedef bool Bool;
00087 #else
00088 // if not, make up our own.
00089 class Bool 
00090 {
00091 public:
00092 
00093 Bool() : val(0) {};
00094 Bool(Int b) : val(b) {};
00095 
00096 operator Int() { return val; };
00097 
00098 private:
00099 Int val;
00100 };
00101 #ifdef CL_NO_TF
00102 enum {false, true};
00103 #endif
00104 #endif
00105 
00106 
00107 // --- Assertions and Range checking -------------------------------------------
00108 
00109  #define _Error(e) _Assert(false, e, __FILE__, __LINE__)
00110  #define _Warning(w) _Expect(false, w, __FILE__, __LINE__)
00111 
00112 #if defined(CL_CHECKING) || defined(VL_CHECKING)
00113 #define Assert(b, e) _Assert(b, e, __FILE__, __LINE__)
00114 // Assert that b is true. e is an error message to be printed if b
00115 // is false.
00116 #define Expect(b, w) _Expect(b, w, __FILE__, __LINE__)
00117 // Prints warning w if b is false
00118 #define CheckRange(i, l, u, r) _CheckRange(i, l, u, r, __FILE__, __LINE__)
00119 // Checks whether i is in the range [lowerBound, upperBound).
00120 #else
00121  #define Assert(b, e)
00122  #define Expect(b, w)
00123  #define CheckRange(a, l, u, r)
00124 #endif
00125 
00126 Void _Assert(Int condition, const Char *errorMessage, const Char *file, Int line);
00127 Void _Expect(Int condition, const Char *warningMessage, const Char *file, Int line);
00128 Void _CheckRange(Int i, Int lowerBound, Int upperBound, const Char *rangeMessage,
00129 const Char *file, Int line);
00130 
00131 
00132 // --- Inlines -----------------------------------------------------------------
00133 
00134 template<class Value>
00135  inline Value Min(Value x, Value y)
00136 {
00137 if (x <= y)
00138 return(x);
00139 else
00140 return(y);
00141 };
00142 
00143 template<class Value>
00144  inline Value Max(Value x, Value y)
00145 {
00146 if (x >= y)
00147 return(x);
00148 else
00149 return(y);
00150 };
00151 
00152 template<class Value>
00153  inline Void Swap(Value &x, Value &y)
00154 {
00155 Value t;
00156 
00157 t = x;
00158 x = y;
00159 y = t;
00160 };
00161 
00162 template<class Value>
00163  inline Value Mix(Value x, Value y, Real s)
00164 {
00165 return(x + (y - x) * s);
00166 };
00167 
00168 template<class Value>
00169  inline Value Clip(Value x, Value min, Value max)
00170 {
00171 if (x < min)
00172 return(min);
00173 else if (x > max)
00174 return(max);
00175 else
00176 return(x);
00177 };
00178 
00179 template<class Value>
00180  inline Value sqr(Value x)
00181 {
00182 return(x * x);
00183 };
00184 
00185 #endif

Generated at Sat Aug 5 00:16:31 2000 for Class Library by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000

AltStyle によって変換されたページ (->オリジナル) /