C Standard Library Extensions  1.2
cxtypes.h
1 /* $Id: cxtypes.h,v 1.4 2012-08-17 13:58:45 rpalsa Exp $
2  *
3  * This file is part of the ESO C Extension Library
4  * Copyright (C) 2001-2011 European Southern Observatory
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef _CX_TYPES_H
22 #define _CX_TYPES_H
23 
24 #include <cxconfig.h>
25 #include <cxmacros.h>
26 
27 
28 CX_BEGIN_DECLS
29 
30 /*
31  * Some mathematical constants. Some strict ISO C implementations
32  * don't provide them as symbols. The constants provide enough
33  * digits for the 128 bit IEEE quad
34  */
35 
36 #define CX_E 2.7182818284590452353602874713526625L
37 #define CX_LN2 0.6931471805599453094172321214581766L
38 #define CX_LN10 2.3025850929940456840179914546843642L
39 #define CX_PI 3.1415926535897932384626433832795029L
40 #define CX_PI_2 1.5707963267948966192313216916397514L
41 #define CX_PI_4 0.7853981633974483096156608458198757L
42 #define CX_SQRT2 1.4142135623730950488016887242096981L
43 
44 
45 /*
46  * Minimum and maximum constants for fixed size integer types
47  */
48 
49 #define CX_MININT8 ((cxint8) 0x80)
50 #define CX_MAXINT8 ((cxint8) 0x7f)
51 #define CX_MAXUINT8 ((cxuint8) 0xff)
52 
53 #define CX_MININT16 ((cxint16) 0x8000)
54 #define CX_MAXINT16 ((cxint16) 0x7fff)
55 #define CX_MAXUINT16 ((cxuint16) 0xffff)
56 
57 #define CX_MININT32 ((cxint32) 0x80000000)
58 #define CX_MAXINT32 ((cxint32) 0x7fffffff)
59 #define CX_MAXUINT32 ((cxuint32) 0xffffffff)
60 
61 #define CX_MININT64 ((cxint64) CX_INT64_CONSTANT(0x8000000000000000))
62 #define CX_MAXINT64 CX_INT64_CONSTANT(0x7fffffffffffffff)
63 #define CX_MAXUINT64 CX_INT64_CONSTANT(0xffffffffffffffffU)
64 
65 
66 /*
67  * For completeness: Definitions for standard types
68  */
69 
70 typedef char cxchar;
71 typedef short cxshort;
72 typedef int cxint;
73 typedef long cxlong;
74 typedef long long cxllong;
75 typedef cxint cxbool;
76 
77 typedef unsigned char cxuchar;
78 typedef unsigned short cxushort;
79 typedef unsigned int cxuint;
80 typedef unsigned long cxulong;
81 typedef unsigned long long cxullong;
82 typedef cxuchar cxbyte;
83 
84 typedef float cxfloat;
85 typedef double cxdouble;
86 
87 typedef void * cxptr;
88 typedef const void * cxcptr;
89 
90 
91 /*
92  * Generic, frequently used types.
93  */
94 
95 typedef cxint (*cx_compare_func) (cxcptr a, cxcptr b);
96 typedef cxint (*cx_compare_data_func) (cxcptr a, cxcptr b, cxptr data);
97 typedef cxbool (*cx_equal_func) (cxcptr a, cxcptr b);
98 typedef void (*cx_free_func) (cxptr data);
99 
100 CX_END_DECLS
101 
102 #endif /* _CX_TYPES_H */