Daniel@0: /* $Id: arith.h,v 1.16 2009/06/03 01:10:51 ellson Exp $ $Revision: 1.16 $ */ Daniel@0: /* vim:set shiftwidth=4 ts=8: */ Daniel@0: Daniel@0: /********************************************************** Daniel@0: * This software is part of the graphviz package * Daniel@0: * http://www.graphviz.org/ * Daniel@0: * * Daniel@0: * Copyright (c) 1994-2004 AT&T Corp. * Daniel@0: * and is licensed under the * Daniel@0: * Common Public License, Version 1.0 * Daniel@0: * by AT&T Corp. * Daniel@0: * * Daniel@0: * Information and Software Systems Research * Daniel@0: * AT&T Research, Florham Park NJ * Daniel@0: **********************************************************/ Daniel@0: Daniel@0: /* geometric functions (e.g. on points and boxes) with application to, but Daniel@0: * no specific dependance on graphs */ Daniel@0: Daniel@0: #ifndef GV_ARITH_H Daniel@0: #define GV_ARITH_H Daniel@0: Daniel@0: /* for sincos */ Daniel@0: #ifndef _GNU_SOURCE Daniel@0: #define _GNU_SOURCE 1 Daniel@0: #endif Daniel@0: Daniel@0: #include Daniel@0: #ifdef HAVE_VALUES_H Daniel@0: #include Daniel@0: #endif Daniel@0: #include Daniel@0: Daniel@0: #ifdef __cplusplus Daniel@0: extern "C" { Daniel@0: #endif Daniel@0: Daniel@0: #ifdef MIN Daniel@0: #undef MIN Daniel@0: #endif Daniel@0: #define MIN(a,b) ((a)<(b)?(a):(b)) Daniel@0: Daniel@0: #ifdef MAX Daniel@0: #undef MAX Daniel@0: #endif Daniel@0: #define MAX(a,b) ((a)>(b)?(a):(b)) Daniel@0: Daniel@0: #ifdef ABS Daniel@0: #undef ABS Daniel@0: #endif Daniel@0: #define ABS(a) ((a) >= 0 ? (a) : -(a)) Daniel@0: Daniel@0: #define AVG(a,b) ((a + b) / 2) Daniel@0: #define SGN(a) (((a)<0)? -1 : 1) Daniel@0: #define CMP(a,b) (((a)<(b)) ? -1 : (((a)>(b)) ? 1 : 0)) Daniel@0: Daniel@0: #ifndef INT_MAX Daniel@0: #define INT_MAX ((int)(~(unsigned)0 >> 1)) Daniel@0: #endif Daniel@0: Daniel@0: #ifndef INT_MIN Daniel@0: #define INT_MIN (-INT_MAX - 1) Daniel@0: #endif Daniel@0: Daniel@0: #ifndef MAXSHORT Daniel@0: #define MAXSHORT (0x7fff) Daniel@0: #endif Daniel@0: Daniel@0: #ifndef MAXDOUBLE Daniel@0: #define MAXDOUBLE 1.7976931348623157e+308 Daniel@0: #endif Daniel@0: Daniel@0: #ifndef MAXFLOAT Daniel@0: #define MAXFLOAT ((float)3.40282347e+38) Daniel@0: #endif Daniel@0: Daniel@0: #ifdef BETWEEN Daniel@0: #undef BETWEEN Daniel@0: #endif Daniel@0: #define BETWEEN(a,b,c) (((a) <= (b)) && ((b) <= (c))) Daniel@0: Daniel@0: #ifndef M_PI Daniel@0: #define M_PI 3.14159265358979323846 Daniel@0: #endif Daniel@0: Daniel@0: #ifndef SQRT2 Daniel@0: #define SQRT2 1.41421356237309504880 Daniel@0: #endif Daniel@0: Daniel@0: #define ROUND(f) ((f>=0)?(int)(f + .5):(int)(f - .5)) Daniel@0: #define RADIANS(deg) ((deg)/180.0 * M_PI) Daniel@0: #define DEGREES(rad) ((rad)/M_PI * 180.0) Daniel@0: Daniel@0: #define SQR(a) ((a) * (a)) Daniel@0: Daniel@0: #ifdef HAVE_SINCOS Daniel@0: extern void sincos(double x, double *s, double *c); Daniel@0: #else Daniel@0: # define sincos(x,s,c) *s = sin(x); *c = cos(x) Daniel@0: #endif Daniel@0: Daniel@0: #ifdef __cplusplus Daniel@0: } Daniel@0: #endif Daniel@0: Daniel@0: #endif