summaryrefslogtreecommitdiff
path: root/src/include/cctk_Types.h
blob: d9252080476e071bd0bfbf273ce8c4a891a7f077 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
 /*@@
   @header    cctk_types.h
   @date      Mon Jun 21 21:03:27 1999
   @author    Tom Goodale
   @desc 
   Defines the appropriate types based upon the precision.
   Should be included by cctk_Config.h .
   @enddesc 
 @@*/

#ifndef _CCTK_TYPES_H_
#define _CCTK_TYPES_H_

/* Make sure that cctk_config.h is available in case someone includes
 * this by hand.
 */
#ifndef _CCTK_CONFIG_H_
#include "cctk_Config.h"
#endif

/* Define stuff for C. */
#ifdef CCODE

typedef void *CCTK_POINTER;
typedef const void *CCTK_POINTER_TO_CONST;
typedef void (*CCTK_FPOINTER)(void);

#define CCTK_STRING const char *

/* Structures for complex types */

#ifdef CCTK_HAVE_REAL16
#define CCTK_HAVE_COMPLEX32 1
typedef struct
{
  CCTK_REAL16 Re;
  CCTK_REAL16 Im;
} CCTK_COMPLEX32;
#endif

#ifdef CCTK_HAVE_REAL8
#define CCTK_HAVE_COMPLEX16 1
typedef struct
{
  CCTK_REAL8 Re;
  CCTK_REAL8 Im;
} CCTK_COMPLEX16;
#endif

#ifdef CCTK_HAVE_REAL4
#define CCTK_HAVE_COMPLEX8 1
typedef struct
{
  CCTK_REAL4 Re;
  CCTK_REAL4 Im;
} CCTK_COMPLEX8;
#endif

/* Character type */
/* DEPRECATED IN BETA 10 */
typedef unsigned char CCTK_CHAR;

typedef unsigned char CCTK_BYTE;

#endif /* CCODE */

/* Define stuff for fortran. */
#ifdef FCODE

#define CCTK_POINTER          integer*SIZEOF_CHAR_P
#define CCTK_POINTER_TO_CONST integer*SIZEOF_CHAR_P
/* TODO: add autoconf for determining the size of function pointers */
#define CCTK_FPOINTER         integer*SIZEOF_CHAR_P

#define CCTK_STRING CCTK_POINTER

#ifdef CCTK_HAVE_INT8
#define CCTK_INT8 INTEGER*8
#endif
#ifdef CCTK_HAVE_INT4
#define CCTK_INT4 INTEGER*4
#endif
#ifdef CCTK_HAVE_INT2
#define CCTK_INT2 INTEGER*2
#endif
#ifdef CCTK_HAVE_INT1
#define CCTK_INT1 INTEGER*1
#endif

#ifdef CCTK_HAVE_REAL16
#define CCTK_REAL16 REAL*16
#define CCTK_HAVE_COMPLEX32 1
#define CCTK_COMPLEX32  COMPLEX*32
#endif

#ifdef CCTK_HAVE_REAL8
#define CCTK_REAL8  REAL*8
#define CCTK_HAVE_COMPLEX16 1
#define CCTK_COMPLEX16  COMPLEX*16
#endif

#ifdef CCTK_HAVE_REAL4
#define CCTK_REAL4  REAL*4
#define CCTK_HAVE_COMPLEX8 1
#define CCTK_COMPLEX8   COMPLEX*8
#endif

/* DEPRECATED IN BETA 10 */
#define CCTK_CHAR CHARACTER

#define CCTK_BYTE INTEGER*1

#endif /*FCODE */

/* Now pick the types based upon the precision variable. */

/* Floating point precision */
#ifdef CCTK_REAL_PRECISION_16
#define CCTK_REAL CCTK_REAL16
#endif

#ifdef CCTK_REAL_PRECISION_8
#define CCTK_REAL CCTK_REAL8
#endif

#ifdef CCTK_REAL_PRECISION_4
#define CCTK_REAL CCTK_REAL4
#endif

/* Integer precision */

#ifdef CCTK_INTEGER_PRECISION_8
#define CCTK_INT CCTK_INT8
#endif

#ifdef CCTK_INTEGER_PRECISION_4
#define CCTK_INT CCTK_INT4
#endif

#ifdef CCTK_INTEGER_PRECISION_2
#define CCTK_INT CCTK_INT2
#endif

#ifdef CCTK_INTEGER_PRECISION_1
#define CCTK_INT CCTK_INT1
#endif

/* Complex precision */
#ifdef CCTK_REAL_PRECISION_16
#define CCTK_COMPLEX CCTK_COMPLEX32
#endif

#ifdef CCTK_REAL_PRECISION_8
#define CCTK_COMPLEX CCTK_COMPLEX16
#endif

#ifdef CCTK_REAL_PRECISION_4
#define CCTK_COMPLEX CCTK_COMPLEX8
#endif

#endif /*_CCTK_TYPES_H_ */