00001 /* 00002 File: VL.h 00003 00004 Function: Header file for the VL library. Provides macro definitions 00005 so that the library can be templated by type. 00006 00007 Author(s): Andrew Willmott 00008 00009 Version 1.2.0 00010 00011 Copyright: (c) 1995-2000, Andrew Willmott 00012 */ 00013 00014 #ifndef __VL__ 00015 #define __VL__ 00016 00017 #define VL_VERSION "1.2" 00018 #define VL_VER_NUM 10200 00019 00020 /* 00021 This header file is included before any other when compiling VL. Its 00022 purpose is to translate the types that VL is templated on (TReal, TVec2, 00023 TVec3, etc.), replacing them with real types. In this way the same 00024 code can be used to compile float-based, double-based, and other 00025 type-based versions of the vector and matrix routines. 00026 00027 VL.h expects VL_V_REAL and VL_M_REAL to be set to the element types for 00028 vectors and matrices respectively, and the VL_V_SUFF and VL_M_SUFF 00029 macros to append a suffix indicating the vector or matrix type to their 00030 arguments. If these macros are not defined, vectors and matrices will 00031 be based on the type 'Real', and there will be no suffixes. 00032 00033 See VLf.h, VLfd.h, and SVL.h for examples of how this facility is used. 00034 00035 The VL library used to use C++ templates rather than the current cpp 00036 macros. The state of both the C++ languange and its compilers made this 00037 unworkable, however, especially when targetting more than one compiler. 00038 */ 00039 00040 #include "cl/Basics.h" 00041 #include "vl/VLConfig.h" 00042 #include "vl/VLConstants.h" 00043 #include "vl/VLMath.h" 00044 00045 #ifndef VL_V_REAL 00046 #define VL_V_REAL Real 00047 #define VL_M_REAL Real 00048 #endif 00049 00050 #ifndef VL_V_SUFF 00051 #define VL_V_SUFF(X) X 00052 #define VL_M_SUFF(X) X 00053 #endif 00054 00055 #ifndef VL_M_REAL 00056 #define VL_M_REAL VL_V_REAL 00057 #define VL_M_SUFF(X) VL_V_SUFF(X) 00058 #endif 00059 00060 #define TVReal VL_V_REAL 00061 #define TMReal VL_M_REAL 00062 00063 #define TVec2 VL_V_SUFF(Vec2) 00064 #define TMVec2 VL_M_SUFF(Vec2) 00065 #define TMat2 VL_M_SUFF(Mat2) 00066 00067 #define TVec3 VL_V_SUFF(Vec3) 00068 #define TMVec3 VL_M_SUFF(Vec3) 00069 #define TMat3 VL_M_SUFF(Mat3) 00070 00071 #define TVec4 VL_V_SUFF(Vec4) 00072 #define TQuaternion VL_M_SUFF(Vec4) 00073 #define TMVec4 VL_M_SUFF(Vec4) 00074 #define TMat4 VL_M_SUFF(Mat4) 00075 00076 #define TVec VL_V_SUFF(Vec) 00077 #define TMVec VL_M_SUFF(Vec) 00078 #define TMat VL_M_SUFF(Mat) 00079 #define TSubVec VL_V_SUFF(SubVec) 00080 #define TMSubVec VL_M_SUFF(SubVec) 00081 #define TSubMat VL_M_SUFF(SubMat) 00082 00083 #define TSparseVec VL_V_SUFF(SparseVec) 00084 #define TSparseMat VL_M_SUFF(SparseMat) 00085 #define TSubSVec VL_V_SUFF(SubSVec) 00086 #define TMSubSVec VL_M_SUFF(SubSVec) 00087 #define TSubSMat VL_M_SUFF(SubSMat) 00088 00089 #define TSparsePair VL_V_SUFF(SparsePair) 00090 #define TMSparseVec VL_M_SUFF(SparseVec) 00091 #define TSVIter VL_V_SUFF(SVIter) 00092 #define TMSVIter VL_M_SUFF(SVIter) 00093 00094 #endif