ERiC API-Referenz 43.3.2.0
Lade ...
Suche ...
Keine Treffer
platform.h
gehe zur Dokumentation dieser Datei
1/*
2 * Copyright © LfSt Bayern, Muenchen, IuK 111, 2006-2012
3 */
4
5#ifndef ERIC_PLATFORM_H
6#define ERIC_PLATFORM_H
7
8/**
9 * @file
10 * @details Konstanten für verschiedene Betriebssysteme
11 */
12
13
14
15/* Definitionen für die Eigenschaften der unterstützten Prozessorarchitekturen */
16
17/* AMD64 */
18#if defined(__amd64__) || defined(__x86_64__) || defined(__amd64) || defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64)
19# define ARCH_CPU_X86
20# define ARCH_BIT_64
21# define ARCH_AMD64
22
23/* Intel x86 */
24#elif defined(i386) || defined(__i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || \
25 defined(_M_IX86) || defined(__X86__) || defined(_X86_) || defined(__I86__) || defined(__INTEL__) || defined(__THW_INTEL__)
26# define ARCH_CPU_X86
27# define ARCH_BIT_32
28# ifndef __i386__
29# define __i386__ 1
30# endif
31
32/* ARM 64-Bit */
33#elif defined(__aarch64__)
34# define ARCH_CPU_ARM
35# define ARCH_BIT_64
36
37/* ARM 32-Bit */
38#elif defined(__arm__) || defined(_ARM) || defined(_M_ARM) || defined (__arm) || defined(__TARGET_ARCH_ARM)
39# define ARCH_CPU_ARM
40# define ARCH_BIT_32
41
42/* Power 64-Bit */
43#elif defined(_ARCH_PPC64) || defined(__PPC64__) || defined(__powerpc64__)
44# define ARCH_CPU_POWER
45# define ARCH_BIT_64
46
47/* Nicht unterstützte Architekturen */
48#else
49# error Archtitektur wird nicht unterstuetzt!
50#endif
51
52
53
54/* macOS, iOS */
55
56#if defined(__APPLE__)
57 #include "TargetConditionals.h"
58 #if TARGET_IPHONE_SIMULATOR
59 #define __IOS_SIMULATOR__
60 #define __IOS__
61 #define I_OS
62
63 #define FILENAMES_CASE_SENSITIVE 0
64 #define strcasecmp strcmp
65
66 #elif TARGET_OS_IPHONE
67 #define __IOS_DEVICE__
68 #define __IOS__
69 #define I_OS
70
71 #define FILENAMES_CASE_SENSITIVE 0
72 #define strcasecmp strcmp
73
74 #elif TARGET_OS_MAC
75 #define OS_X
76 #define MAC_OS_X
77 #define MAC_OS
78 #ifndef PLATFORM_NAME
79 # define PLATFORM_NAME "Mac OS X"
80 #endif
81
82 #define FILENAMES_CASE_SENSITIVE 0
83 #define strcasecmp strcmp
84 #endif
85#endif
86
87
88/* Windows */
89
90#if defined(WINDOWS) || defined(_WIN32) || defined(_MSC_VER)
91# define WINDOWS_OS
92# ifndef PLATFORM_NAME
93# define PLATFORM_NAME "Windows"
94# endif
95#endif
96
97
98/* Linux */
99
100#if defined(linux) || defined(__linux__)
101# define LINUX_OS
102
103# ifndef PLATFORM_NAME
104# if defined(ARCH_CPU_X86) && defined(ARCH_BIT_64)
105# define PLATFORM_NAME "Linux/x86-64"
106# elif defined(ARCH_CPU_POWER)
107# define PLATFORM_NAME "Linux/PPC"
108# else
109# define PLATFORM_NAME "Linux" /* Generic Linux */
110# endif
111# endif
112
113#endif
114
115#if !defined(LINUX) && defined(LINUX_OS)
116# define LINUX 1
117#endif
118
119
120/* AIX */
121#if defined(_AIX) && !defined(AIX_OS)
122# define AIX_OS
123#endif
124
125
126/* Android */
127#if defined(__ANDROID__) && !defined(ANDROID_OS)
128# define ANDROID_OS
129#endif
130
131/**************************************************/
132
133/* Der gesamte Code innerhalb dieses #ifndef-Blocks wird von Doxygen
134 * für die Generierung der ERiC API HTML-Referenz ignoriert.
135 */
136#ifndef ERIC_DOXYGEN_MODE
137
138
139typedef unsigned char BYTE;
140typedef unsigned char byte;
141
142
143#define ERIC_UINT32_MAX 0xffffffffUL
144
145/**
146 * @brief Definition eines vorzeichenlosen, 32 Bit breiten Integer-Typs.
147 *
148 * Der Typ uint32_t wird für Ganzzahl-Ausgaben der ERiC API verwendet, um
149 * unabhängig von Betriebssystem und Compiler eine eindeutig spezifizierte
150 * Bit-Breite und Kodierung zu gewährleisten.
151 *
152 * Die in ERiC implementierte Definition von uint32_t kommt nur zum Einsatz,
153 * wenn im Code des ERiC-Anwenders kein Präprozessor-define gleichen Namens
154 * existiert und wenn der Header <stdint.h> oder eine Compiler-spezifische
155 * Variante davon nicht bereits importiert wurden. Eventuelle Konflikte zu
156 * gleichnamigen Typ-Definitionen im Code des ERiC-Anwenders können evtl. durch
157 * Auskommentieren der ERiC-spezifischen Variante gelöst werden.
158 *
159 * @note In der HTML-Darstellung dieser Dokumentation wird keine konkrete
160 * Implementierung angezeigt, sondern nur der Platzhalter
161 * <i>__plattformabhaengige_Implementierung__</i>. Die für eine bestimmte
162 * Plattform tatsächlich verwendete Typdefinition wird aus dem betreffenden
163 * Quell-Code in der Datei ericdef.h ersichtlich.
164 */
165
166#include <limits.h>
167#include <stdlib.h>
168#include <sys/types.h>
169
170#if defined(_STDINT_H_) || defined(_STDINT_H) || defined(_STDINT) || defined(_MSC_STDINT_H_)
171# define ERIC_STDINT_VORHANDEN 1
172#else
173# if defined(__has_include)
174# if __has_include("stdint.h")
175# include "stdint.h"
176# define ERIC_STDINT_VORHANDEN 1
177# endif
178# elif defined(__STDC__) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
179 /* Wenn der Compiler den C99-Standard unterstützt, gibt es eine stdint.h */
180# include "stdint.h"
181# define ERIC_STDINT_VORHANDEN 1
182# elif (_MSC_VER >= 1600)
183 /* Visual C++ bringt eine "stdint.h" ab Version 16 (d.h. VC++ 2010) mit */
184# include "stdint.h"
185# define ERIC_STDINT_VORHANDEN 1
186# endif
187#endif
188
189#if !defined(ERIC_STDINT_VORHANDEN)
190# define ERIC_STDINT_VORHANDEN 0
191# if !defined(uint32_t)
192# if (UINT_MAX == ERIC_UINT32_MAX)
193 typedef unsigned int uint32_t;
194# define __uint32_t_defined
195# elif (USHRT_MAX == ERIC_UINT32_MAX)
196 typedef unsigned short uint32_t;
197# define __uint32_t_defined
198# endif
199# endif
200#endif
201
202#else
203/* Dieser Block wird von Doxygen für die Generierung der
204 ERiC API HTML-Referenz ausgewertet */
205
206/**
207 * @details Definition eines vorzeichenlosen, 32 Bit breiten Integer-Typs.
208 *
209 * Siehe Quellcode von platform.h für Implementierung.
210 */
211typedef __plattformabhaengige_Implementierung__ uint32_t;
212
213
214#endif /* ERIC_DOXYGEN_MODE */
215
216
217/*****************************************************/
218
219
220#ifdef WINDOWS_OS
221# ifndef MSVC
222# define WINDOWS_GNUC true
223# endif
224#endif
225
226
227#ifdef WINDOWS_OS
228# define STDCALL __stdcall
229# ifndef CDECL
230# define CDECL __cdecl
231# endif
232
233#else
234# if defined(__GNUC__) || defined(__GNUG__)
235# ifdef STDCALL
236# undef STDCALL
237# endif
238
239# ifdef CDECL
240# undef CDECL
241# endif
242
243# if defined(ARCH_CPU_X86) && defined(ARCH_BIT_32) && !defined(__IOS__) && !defined(ANDROID_OS)
244# define STDCALL __attribute__((__stdcall__))
245# else
246# define STDCALL
247# endif
248# define CDECL __attribute__((__cdecl__))
249# endif
250# if defined(_AIX)
251# ifdef STDCALL
252# undef STDCALL
253# endif
254# define STDCALL
255# endif
256#endif
257
258/************************************************/
259
260
261#if _MSC_VER > 1000
262# ifndef MSVC
263# define MSVC
264# endif
265# pragma warning( disable : 4503 ) /* Laenge des ergaenzten Namens ueberschritten, */
266# pragma warning( disable : 4786 ) /* Bezeichner wurde auf '255' Zeichen in den Browser-Informationen reduziert */
267# pragma warning( disable : 4251 ) /* benoetigt eine DLL-Schnittstelle, die von Clients von class 'XYZ' verwendet wird */
268# pragma warning( disable : 4355 ) /* this wird in initialisierungslisten verwendet */
269# pragma warning( disable : 4275 ) /* class 'xxx' ist keine DLL-Schnittstelle und wurde als Basisklasse für die DLL-Schnittstelle class 'yyy' verwendet */
270# pragma warning( disable : 4231 ) /* key word extern before template explicit instanciation is not standard but required for class EricSafeInt */
271#endif
272
273
274/************************************************/
275
276
277#ifdef MSVC
278# pragma warning( disable : 4250 ) /* 'class1' : inherits 'class2::member' via dominance */
279# define ATOI64 _atoi64
280# define I64(C) C
281#else
282# define ATOI64 atoll
283# define I64(C) C##LL
284#endif
285
286
287#ifndef HAS_FUTIME
288# if defined(LINUX_OS) || defined(MAC_OS_X) || defined(__IOS__)
289# define HAS_FUTIME 0
290# else
291# define HAS_FUTIME 1
292# endif
293#endif
294
295#ifndef UTIME_NEEDS_CLOSED_FILE
296# if defined(LINUX_OS) || defined(MAC_OS_X) || defined(__IOS__)
297# define UTIME_NEEDS_CLOSED_FILE 1
298# else
299# define UTIME_NEEDS_CLOSED_FILE 0
300# endif
301#endif
302
303#if HAS_FUTIME && !defined(_AIX)
304# include <sys/utime.h>
305#else
306# include <utime.h>
307#endif
308
309#endif /* ERIC_PLATFORM_H */
__plattformabhaengige_Implementierung__ uint32_t
Definition platform.h:211