#ifndef INCLUDES_H #define INCLUDES_H // __________________________________________________________________________ // Include RCS Id. // $Id: includes.h,v 1.2 2000/12/01 21:56:15 strahs Exp $ // __________________________________________________________________________ // This file contains stuff which ought to be included in every header // and source file. #include #include #include #define exitcheck(x, msg) if (x) { cerr << msg << endl; exit(1); } /*#define WIN95*/ #ifdef WIN95 #define NOX #ifndef INTEL #define INTEL #endif #define rint(x) (int)((x) + 0.5) #define near nearr #define far farr #endif #ifdef WIN95 #define Ifstream(v, f) ifstream v(f, ios::binary) #define Ofstream(v, f) ofstream v(f, ios::binary) #define Open(f) open(f, ios::binary) #define Getline(b, s) getline(b, s, '\n') #else #define Ifstream(v, f) ifstream v(f) #define Ofstream(v, f) ofstream v(f) #define Open(f) open(f) #define Getline(b, s) getline(b, s) #endif #ifndef USE_ASSERTS #define NDEBUG #endif #define STRLEN 255 #define FUZZ 0.001 const int Sint = sizeof(int); const int Slong = sizeof(long); const int Sfloat = sizeof(float); const int Sdouble = sizeof(double); #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) // __________________________________________________________________________ // Commonly used doubles #ifndef PI2 const double PI2 = 6.283185307; #endif #ifndef PI const double PI = 3.141592653; #endif const double PI_2 = 1.570796326; const double PI_4 = 0.785398163; const double PI_8 = 0.392699081; const double PI_16 = 0.196349540; const double PI_32 = 0.098174770; const double SQ2 = 1.414213562; // __________________________________________________________________________ // Standard types typedef unsigned char uchar; typedef unsigned int uint; typedef short unsigned int suint; typedef unsigned long ulong; char *basename(char *name); char *ltos(const long x); // __________________________________________________________________________ template inline double distance(const T x1, const T y1, const T x2, const T y2) { return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); } // __________________________________________________________________________ inline double linfdist(const double x1, const double y1, const double x2, const double y2) { return MAX(fabs(x2 - x1), fabs(y2 - y1)); } inline int linfdist(int x1, int y1, int x2, int y2) { return MAX(abs(x2 - x1), abs(y2 - y1)); } // __________________________________________________________________________ inline double distance_squared(const double x1, const double y1, const double x2, const double y2) { return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); } inline int distance_squared(int x1, int y1, int x2, int y2) { return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); } // __________________________________________________________________________ // This apparently works even if (x1, y1) == (x2, y2) template inline double angle(const T x1, const T y1, const T x2, const T y2) { return atan2(y1 - y2, x2 - x1); } // __________________________________________________________________________ // Swap the contents of 'a' and 'b'. Requires operator=(). template inline void swap(T& a, T& b) { T tmp; tmp = a; a = b; b = tmp; } // __________________________________________________________________________ #define gridfun(f, u) \ { \ for (int i = 0; i < u.dimx(); ++i) \ for (int j = 0; j < u.dimy(); ++j) \ u(i, j) = f; \ } // __________________________________________________________________________ #endif // INCLUDES_H