summaryrefslogtreecommitdiff
path: root/src/include/cctk_Types.h
blob: 9b20baa96d7b890d888668b26099abce06e60907 (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
 /*@@
   @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

/* As long as we don't have 'typedef const void *CCTK_CONST_POINTER;'
   we have CCTK_POINTER as a #define so that one can add a const qualifier
   if needed. */
#if 0
typedef void *CCTK_POINTER;
#else
#define CCTK_POINTER void *
#endif
typedef void (*CCTK_FPOINTER)(void);

/* DEPRECATED IN BETA 12 */
typedef void (*CCTK_FN_POINTER)(void);

#define CCTK_STRING const char *

/* Structures for complex types */

#ifdef CCTK_REAL16
typedef struct
{
  CCTK_REAL16 Re;
  CCTK_REAL16 Im;
} CCTK_COMPLEX32;
#endif

#ifdef CCTK_REAL8
typedef struct
{
  CCTK_REAL8 Re;
  CCTK_REAL8 Im;
} CCTK_COMPLEX16;
#endif

#ifdef CCTK_REAL4
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_STRING CCTK_POINTER

#define CCTK_REAL16 REAL*16
#define CCTK_REAL8  REAL*8
#define CCTK_REAL4  REAL*4

#define CCTK_INT8 INTEGER*8
#define CCTK_INT4 INTEGER*4
#define CCTK_INT2 INTEGER*2

#define CCTK_COMPLEX32  COMPLEX*32
#define CCTK_COMPLEX16  COMPLEX*16
#define CCTK_COMPLEX8   COMPLEX*8

/* 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

/* 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_ */