fcml 1.3.0
Loading...
Searching...
No Matches
fcml_types.h
Go to the documentation of this file.
1/*
2 * FCML - Free Code Manipulation Library.
3 * Copyright (C) 2010-2020 Slawomir Wojtasiak
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library 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 GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
27#ifndef FCML_TYPES_H_
28#define FCML_TYPES_H_
29
30/* If config.h is available, we depend on it; otherwise we give
31 * the responsibility to handle headers appropriately to the compiler runtime.
32 **/
33#ifdef HAVE_CONFIG_H
34#include <config.h>
35#ifdef HAVE_STDDEF_H
36#include <stddef.h>
37#endif
38#if HAVE_STDINT_H
39#include <stdint.h>
40#endif
41#if HAVE_INTTYPES_H
42#include <inttypes.h>
43#endif
44#else
45#if defined(_MSC_VER) && defined(_WIN32)
46#include <windows.h>
47#define FCML_MSCC
48/* Disable unit specific lexer features. */
49#define YY_NO_INPUT 1
50#define YY_NO_UNISTD_H 1
51#else
52#include <stddef.h>
53#include <stdint.h>
54#include <inttypes.h>
55#endif
56#endif
57
58#include "fcml_lib_export.h"
59
61#define FCML_TEXT(x) x
62#define _FT(x) FCML_TEXT(x)
63
64#ifdef FCML_MSCC
65
66#define FCML_PRI_INT8_DEC "%d"
67#define FCML_PRI_INT16_DEC "%d"
68#define FCML_PRI_INT32_DEC "%d"
69#define FCML_PRI_INT64_DEC "%lld"
70
71#define FCML_PRI_UINT8_DEC "%u"
72#define FCML_PRI_UINT16_DEC "%u"
73#define FCML_PRI_UINT32_DEC "%u"
74#define FCML_PRI_UINT64_DEC "%llu"
75
76#define FCML_PRI_INT8_HEX "%02x"
77#define FCML_PRI_INT16_HEX "%04x"
78#define FCML_PRI_INT32_HEX "%08x"
79#define FCML_PRI_INT64_HEX "%016llx"
80
81#define FCML_PRI_INT8_HEX_NO_ZEROS "%x"
82#define FCML_PRI_INT16_HEX_NO_ZEROS "%x"
83#define FCML_PRI_INT32_HEX_NO_ZEROS "%x"
84#define FCML_PRI_INT64_HEX_NO_ZEROS "%llx"
85
86typedef int fcml_int;
87typedef int fcml_bool;
88typedef __int8 fcml_int8_t;
89typedef unsigned __int8 fcml_uint8_t;
90typedef __int16 fcml_int16_t;
91typedef unsigned __int16 fcml_uint16_t;
92typedef __int32 fcml_int32_t;
93typedef unsigned __int32 fcml_uint32_t;
94typedef __int64 fcml_int64_t;
95typedef unsigned __int64 fcml_uint64_t;
96
97/* Signed integers. */
98#define FCML_INT64_MAX _I64_MAX
99#define FCML_INT64_MIN _I64_MIN
100#define FCML_INT32_MAX INT_MAX
101#define FCML_INT32_MIN INT_MIN
102#define FCML_INT16_MAX SHRT_MAX
103#define FCML_INT16_MIN SHRT_MIN
104#define FCML_INT8_MAX SCHAR_MAX
105#define FCML_INT8_MIN SCHAR_MIN
106
107/* Unsigned integers. */
108#define FCML_UINT8_MAX UCHAR_MAX
109#define FCML_UINT16_MAX USHRT_MAX
110#define FCML_UINT32_MAX UINT_MAX
111#define FCML_UINT64_MAX _UI64_MAX
112
113#else
114
115#ifdef PRId8
116#define FCML_PRI_INT8_DEC "%" PRId8
117#endif
118#ifdef PRId16
119#define FCML_PRI_INT16_DEC "%" PRId16
120#endif
121#ifdef PRId32
122#define FCML_PRI_INT32_DEC "%" PRId32
123#endif
124#ifdef PRId64
125#define FCML_PRI_INT64_DEC "%" PRId64
126#endif
127
128#ifdef PRIu8
129#define FCML_PRI_UINT8_DEC "%" PRIu8
130#endif
131#ifdef PRIu16
132#define FCML_PRI_UINT16_DEC "%" PRIu16
133#endif
134#ifdef PRIu32
135#define FCML_PRI_UINT32_DEC "%" PRIu32
136#endif
137#ifdef PRIu64
138#define FCML_PRI_UINT64_DEC "%" PRIu64
139#endif
140
141#ifdef PRIx8
142#define FCML_PRI_INT8_HEX "%02" PRIx8
143#endif
144#ifdef PRIx16
145#define FCML_PRI_INT16_HEX "%04" PRIx16
146#endif
147#ifdef PRIx32
148#define FCML_PRI_INT32_HEX "%08" PRIx32
149#endif
150#ifdef PRIx64
151#define FCML_PRI_INT64_HEX "%016" PRIx64
152#endif
153
154#ifdef PRIx8
155#define FCML_PRI_INT8_HEX_NO_ZEROS "%" PRIx8
156#endif
157#ifdef PRIx16
158#define FCML_PRI_INT16_HEX_NO_ZEROS "%" PRIx16
159#endif
160#ifdef PRIx32
161#define FCML_PRI_INT32_HEX_NO_ZEROS "%" PRIx32
162#endif
163#ifdef PRIx64
164#define FCML_PRI_INT64_HEX_NO_ZEROS "%" PRIx64
165#endif
166
167typedef int fcml_int;
168typedef unsigned int fcml_uint;
169typedef int fcml_bool;
170typedef int8_t fcml_int8_t;
171typedef uint8_t fcml_uint8_t;
172typedef int16_t fcml_int16_t;
173typedef uint16_t fcml_uint16_t;
174typedef int32_t fcml_int32_t;
175typedef uint32_t fcml_uint32_t;
176typedef int64_t fcml_int64_t;
177typedef uint64_t fcml_uint64_t;
178
179/* Signed integers. */
180#define FCML_INT64_MAX INT64_MAX
181#define FCML_INT64_MIN INT64_MIN
182#define FCML_INT32_MAX INT32_MAX
183#define FCML_INT32_MIN INT32_MIN
184#define FCML_INT16_MAX INT16_MAX
185#define FCML_INT16_MIN INT16_MIN
186#define FCML_INT8_MAX INT8_MAX
187#define FCML_INT8_MIN INT8_MIN
188
189/* Unsigned integers. */
190#define FCML_UINT8_MAX UINT8_MAX
191#define FCML_UINT16_MAX UINT16_MAX
192#define FCML_UINT32_MAX UINT32_MAX
193#define FCML_UINT64_MAX UINT64_MAX
194
195#endif
196
197typedef char fcml_char;
198#define fcml_string char*
199typedef float fcml_float;
200typedef void* fcml_ptr;
201typedef fcml_uint32_t fcml_flags;
202
203typedef fcml_uint32_t fcml_usize;
204typedef fcml_int32_t fcml_size;
205
206#define FCML_TRUE 1
207#define FCML_FALSE 0
208
209/* Macro for bit manipulations. */
210
211#define FCML_TP_SET_BIT(x,y) ( ( x ) | ( 0x01 << ( y ) ) )
212#define FCML_TP_GET_BIT(x,y) ( ( x >> y ) & 0x01 )
213#define FCML_TP_CLEAR_BIT(x,y) ( ( x ) &= ~( 1 << ( y ) ) )
214
215/* Nulleable types. */
216
217typedef struct fcml_nuint8_t {
218 fcml_uint8_t value;
219 fcml_bool is_not_null;
221
222typedef struct fcml_nuint16_t {
223 fcml_uint16_t value;
224 fcml_bool is_not_null;
226
227typedef struct fcml_nuint32_t {
228 fcml_uint32_t value;
229 fcml_bool is_not_null;
231
232typedef struct fcml_nuint64_t {
233 fcml_uint64_t value;
234 fcml_bool is_not_null;
236
237typedef struct fcml_nint8_t {
238 fcml_int8_t value;
239 fcml_bool is_not_null;
241
242typedef struct fcml_nint16_t {
243 fcml_int16_t value;
244 fcml_bool is_not_null;
246
247typedef struct fcml_nint32_t {
248 fcml_int32_t value;
249 fcml_bool is_not_null;
251
252typedef struct fcml_nint64_t {
253 fcml_int64_t value;
254 fcml_bool is_not_null;
256
257typedef struct fcml_st_integer {
258 fcml_usize size;
259 fcml_bool is_signed;
260 // Data fields.
261 fcml_int8_t int8;
262 fcml_int16_t int16;
263 fcml_int32_t int32;
264 fcml_int64_t int64;
266
267#define FCML_SET_VALUE(x, y) x.value = y; x.is_not_null = FCML_TRUE;
268#define FCML_SET_NULL(x) x.value = 0; x.is_not_null = FCML_FALSE;
269#define FCML_IS_NULL(x) ((x).is_not_null == FCML_FALSE)
270
271#endif /* FCML_TYPES_H_ */
Handles Win32 DLL symbols importing/exporting.
Definition fcml_types.h:242
Definition fcml_types.h:247
Definition fcml_types.h:252
Definition fcml_types.h:237
Definition fcml_types.h:222
Definition fcml_types.h:227
Definition fcml_types.h:232
Definition fcml_types.h:217
Definition fcml_types.h:257