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