v0.2.1
Fast, portable C library for geometry input/output
Main Page
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Modules
gmio_core
global.h
Go to the documentation of this file.
1
/****************************************************************************
2
** gmio
3
** Copyright Fougue (24 Jun. 2016)
4
** contact@fougue.pro
5
**
6
** This software is a reusable library whose purpose is to provide complete
7
** I/O support for various CAD file formats (eg. STL)
8
**
9
** This software is governed by the CeCILL-B license under French law and
10
** abiding by the rules of distribution of free software. You can use,
11
** modify and/ or redistribute the software under the terms of the CeCILL-B
12
** license as circulated by CEA, CNRS and INRIA at the following URL
13
** "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html".
14
****************************************************************************/
15
27
#ifndef GMIO_GLOBAL_H
28
#define GMIO_GLOBAL_H
29
30
/* "config.h" is generated by cmake, it should reside in the out-of-source
31
* build dir.
32
* In CMakeFiles.txt, the directory where resides "config.h" is added to the
33
* include path list
34
*/
35
#include "config.h"
36
37
/* GMIO_OS_WIN */
38
#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) \
39
|| defined(WIN32) || defined(_WIN32) || defined(__WIN32__) \
40
|| defined(__NT__)
41
# define GMIO_OS_WIN
42
#endif
43
44
/* GMIO_OS_LINUX */
45
#if defined(__linux) || defined(__linux__) || defined(linux)
46
# define GMIO_OS_LINUX
47
#endif
48
49
/* GMIO_OS_MAC */
50
#if defined(__APPLE__)
51
# define GMIO_OS_MAC
52
#endif
53
54
/* GMIO_DECL_IMPORT */
55
/* GMIO_DECL_EXPORT */
56
#ifdef GMIO_OS_WIN
57
# define GMIO_DECL_EXPORT __declspec(dllexport)
58
# define GMIO_DECL_IMPORT __declspec(dllimport)
59
#else
60
61
# define GMIO_DECL_EXPORT
62
63
# define GMIO_DECL_IMPORT
64
#endif
65
66
/* GMIO_API */
67
#ifdef GMIO_DLL
68
# ifdef GMIO_MAKING_DLL
69
# define GMIO_API GMIO_DECL_EXPORT
70
# else
71
# define GMIO_API GMIO_DECL_IMPORT
72
# endif
/* GMIO_MAKING_DLL */
73
#else
74
76
# define GMIO_API
77
#endif
78
79
/* GMIO_HAVE_INT64_TYPE */
80
#if defined(GMIO_HAVE_INT64_T) \
81
|| defined(GMIO_HAVE_MSVC_INT64) \
82
|| defined(GMIO_HAVE_LONG_LONG)
83
# define GMIO_HAVE_INT64_TYPE
84
#endif
85
86
/* Typedefs for specific width integers */
87
#ifdef GMIO_HAVE_STDINT_H
88
# include <stdint.h>
89
#else
90
typedef
char
int8_t;
91
typedef
unsigned
char
uint8_t;
92
93
# if GMIO_SIZEOF_SHORT == 2
94
typedef
short
int16_t;
95
typedef
unsigned
short
uint16_t;
96
# else
97
# error Not supported: sizeof(short) != 2
98
# endif
99
100
# if GMIO_SIZEOF_INT == 4
101
typedef
int
int32_t;
102
typedef
unsigned
int
uint32_t;
103
# elif GMIO_SIZEOF_LONG == 4
104
typedef
long
int32_t;
105
typedef
unsigned
long
uint32_t;
106
# else
107
# error Failed to find a 32bit integer type with 'int' and 'long'
108
# endif
109
110
# ifndef GMIO_HAVE_INT64_T
111
# if defined(GMIO_HAVE_MSVC_INT64)
112
typedef
__int64_t int64_t;
113
typedef
unsigned
__int64_t uint64_t;
114
# elif defined(GMIO_HAVE_LONG_LONG)
115
typedef
long
long
int64_t;
116
typedef
unsigned
long
long
uint64_t;
117
# endif
118
#endif
119
120
# ifdef GMIO_HAVE_INT64_TYPE
121
typedef
int64_t intmax_t;
122
typedef
uint64_t uintmax_t;
123
# else
124
typedef
int32_t intmax_t;
125
typedef
uint32_t uintmax_t;
126
# endif
127
128
#endif
129
130
/* GMIO_HAVE_STDBOOL_H */
131
#ifdef GMIO_HAVE_STDBOOL_H
132
# include <stdbool.h>
133
#elif !defined(DOXYGEN) && !defined(__cplusplus)
134
typedef
int
bool;
135
enum
gmio_bool_value
136
{
137
false
= 0,
138
true
= 1
139
};
140
#endif
141
142
/* GMIO_UNUSED */
144
#define GMIO_UNUSED(x) (void)x;
145
146
/* GMIO_INLINE */
147
#ifndef GMIO_INLINE
148
# if defined(__GNUC__)
149
# define GMIO_INLINE __inline__ static
/* Compatible with C90 */
150
# elif defined(_MSC_VER)
151
# define GMIO_INLINE __inline static
152
# elif !defined(DOXYGEN)
153
# define GMIO_INLINE static
154
# else
155
156
# define GMIO_INLINE
157
# endif
158
#endif
159
160
/* GMIO_RESTRICT */
161
#ifndef GMIO_RESTRICT
162
# if defined(__GNUC__)
163
# define GMIO_RESTRICT __restrict__
/* Compatible with C90 */
164
# elif defined(_MSC_VER)
165
# define GMIO_RESTRICT __restrict
166
# elif defined(GMIO_HAVE_C99_RESTRICT)
/* TODO: add cmake detectection */
167
# define GMIO_RESTRICT restrict
168
# else
169
170
# define GMIO_RESTRICT
171
# endif
172
#endif
173
174
/* GMIO_C_LINKAGE_BEGIN */
175
/* GMIO_C_LINKAGE_END */
176
#ifdef __cplusplus
177
# define GMIO_C_LINKAGE_BEGIN extern "C" {
178
# define GMIO_C_LINKAGE_END }
179
#else
180
181
# define GMIO_C_LINKAGE_BEGIN
182
183
# define GMIO_C_LINKAGE_END
184
#endif
185
186
/* GMIO_PRAGMA_MSVC_WARNING_PUSH_AND_DISABLE */
187
/* GMIO_PRAGMA_MSVC_WARNING_POP */
188
#if defined(_MSC_VER) && _MSC_VER >= 1400
/* Visual C++ 2008 */
189
# define GMIO_PRAGMA_MSVC_WARNING_PUSH_AND_DISABLE(__code__) \
190
__pragma(warning(push)) \
191
__pragma(warning(disable: __code__))
192
# define GMIO_PRAGMA_MSVC_WARNING_POP() \
193
__pragma(warning(pop))
194
#else
195
203
# define GMIO_PRAGMA_MSVC_WARNING_PUSH_AND_DISABLE(__code__)
204
211
# define GMIO_PRAGMA_MSVC_WARNING_POP()
212
#endif
213
215
#define GMIO_ARRAY_SIZE(array) sizeof(array) / sizeof(*array)
216
217
#endif
/* GMIO_GLOBAL_H */
218
Fougue © 2016
Last Update: Thu Jun 30 2016