Zycore 1.4.0.0
Loading...
Searching...
No Matches
Types.h
Go to the documentation of this file.
1/***************************************************************************************************
2
3 Zyan Core Library (Zyan-C)
4
5 Original Author : Florian Bernd, Joel Hoener
6
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24
25***************************************************************************************************/
26
32#ifndef ZYCORE_TYPES_H
33#define ZYCORE_TYPES_H
34
35#include <Zycore/Defines.h>
36
37/* ============================================================================================== */
38/* Integer types */
39/* ============================================================================================== */
40
41#if defined(ZYAN_NO_LIBC) || \
42 (defined(ZYAN_MSVC) && defined(ZYAN_KERNEL)) // The WDK LibC lacks stdint.h.
43 // No LibC mode, use compiler built-in types / macros.
44# if defined(ZYAN_MSVC) || defined(ZYAN_ICC)
45 typedef unsigned __int8 ZyanU8;
46 typedef unsigned __int16 ZyanU16;
47 typedef unsigned __int32 ZyanU32;
48 typedef unsigned __int64 ZyanU64;
49 typedef signed __int8 ZyanI8;
50 typedef signed __int16 ZyanI16;
51 typedef signed __int32 ZyanI32;
52 typedef signed __int64 ZyanI64;
53# if _WIN64
54 typedef ZyanU64 ZyanUSize;
55 typedef ZyanI64 ZyanISize;
56 typedef ZyanU64 ZyanUPointer;
57 typedef ZyanI64 ZyanIPointer;
58# else
59 typedef ZyanU32 ZyanUSize;
60 typedef ZyanI32 ZyanISize;
61 typedef ZyanU32 ZyanUPointer;
62 typedef ZyanI32 ZyanIPointer;
63# endif
64# elif defined(ZYAN_GNUC)
65 typedef __UINT8_TYPE__ ZyanU8;
66 typedef __UINT16_TYPE__ ZyanU16;
67 typedef __UINT32_TYPE__ ZyanU32;
68 typedef __UINT64_TYPE__ ZyanU64;
69 typedef __INT8_TYPE__ ZyanI8;
70 typedef __INT16_TYPE__ ZyanI16;
71 typedef __INT32_TYPE__ ZyanI32;
72 typedef __INT64_TYPE__ ZyanI64;
73 typedef __SIZE_TYPE__ ZyanUSize;
74 typedef __PTRDIFF_TYPE__ ZyanISize;
75 typedef __UINTPTR_TYPE__ ZyanUPointer;
76 typedef __INTPTR_TYPE__ ZyanIPointer;
77# else
78# error "Unsupported compiler for no-libc mode."
79# endif
80
81# if defined(ZYAN_MSVC)
82# define ZYAN_INT8_MIN (-127i8 - 1)
83# define ZYAN_INT16_MIN (-32767i16 - 1)
84# define ZYAN_INT32_MIN (-2147483647i32 - 1)
85# define ZYAN_INT64_MIN (-9223372036854775807i64 - 1)
86# define ZYAN_INT8_MAX 127i8
87# define ZYAN_INT16_MAX 32767i16
88# define ZYAN_INT32_MAX 2147483647i32
89# define ZYAN_INT64_MAX 9223372036854775807i64
90# define ZYAN_UINT8_MAX 0xffui8
91# define ZYAN_UINT16_MAX 0xffffui16
92# define ZYAN_UINT32_MAX 0xffffffffui32
93# define ZYAN_UINT64_MAX 0xffffffffffffffffui64
94# else
95# define ZYAN_INT8_MAX __INT8_MAX__
96# define ZYAN_INT8_MIN (-ZYAN_INT8_MAX - 1)
97# define ZYAN_INT16_MAX __INT16_MAX__
98# define ZYAN_INT16_MIN (-ZYAN_INT16_MAX - 1)
99# define ZYAN_INT32_MAX __INT32_MAX__
100# define ZYAN_INT32_MIN (-ZYAN_INT32_MAX - 1)
101# define ZYAN_INT64_MAX __INT64_MAX__
102# define ZYAN_INT64_MIN (-ZYAN_INT64_MAX - 1)
103# define ZYAN_UINT8_MAX __UINT8_MAX__
104# define ZYAN_UINT16_MAX __UINT16_MAX__
105# define ZYAN_UINT32_MAX __UINT32_MAX__
106# define ZYAN_UINT64_MAX __UINT64_MAX__
107# endif
108#else
109 // If is LibC present, we use stdint types.
110# include <stdint.h>
111# include <stddef.h>
112 typedef uint8_t ZyanU8;
113 typedef uint16_t ZyanU16;
114 typedef uint32_t ZyanU32;
115 typedef uint64_t ZyanU64;
116 typedef int8_t ZyanI8;
117 typedef int16_t ZyanI16;
118 typedef int32_t ZyanI32;
119 typedef int64_t ZyanI64;
120 typedef size_t ZyanUSize;
121 typedef ptrdiff_t ZyanISize;
122 typedef uintptr_t ZyanUPointer;
123 typedef intptr_t ZyanIPointer;
124
125# define ZYAN_INT8_MIN INT8_MIN
126# define ZYAN_INT16_MIN INT16_MIN
127# define ZYAN_INT32_MIN INT32_MIN
128# define ZYAN_INT64_MIN INT64_MIN
129# define ZYAN_INT8_MAX INT8_MAX
130# define ZYAN_INT16_MAX INT16_MAX
131# define ZYAN_INT32_MAX INT32_MAX
132# define ZYAN_INT64_MAX INT64_MAX
133# define ZYAN_UINT8_MAX UINT8_MAX
134# define ZYAN_UINT16_MAX UINT16_MAX
135# define ZYAN_UINT32_MAX UINT32_MAX
136# define ZYAN_UINT64_MAX UINT64_MAX
137#endif
138
139// Verify size assumptions.
140ZYAN_STATIC_ASSERT(sizeof(ZyanU8 ) == 1 );
141ZYAN_STATIC_ASSERT(sizeof(ZyanU16 ) == 2 );
142ZYAN_STATIC_ASSERT(sizeof(ZyanU32 ) == 4 );
143ZYAN_STATIC_ASSERT(sizeof(ZyanU64 ) == 8 );
144ZYAN_STATIC_ASSERT(sizeof(ZyanI8 ) == 1 );
145ZYAN_STATIC_ASSERT(sizeof(ZyanI16 ) == 2 );
146ZYAN_STATIC_ASSERT(sizeof(ZyanI32 ) == 4 );
147ZYAN_STATIC_ASSERT(sizeof(ZyanI64 ) == 8 );
148ZYAN_STATIC_ASSERT(sizeof(ZyanUSize ) == sizeof(void*)); // TODO: This one is incorrect!
149ZYAN_STATIC_ASSERT(sizeof(ZyanISize ) == sizeof(void*)); // TODO: This one is incorrect!
150ZYAN_STATIC_ASSERT(sizeof(ZyanUPointer) == sizeof(void*));
151ZYAN_STATIC_ASSERT(sizeof(ZyanIPointer) == sizeof(void*));
152
153// Verify signedness assumptions (relies on size checks above).
154ZYAN_STATIC_ASSERT((ZyanI8 )-1 >> 1 < (ZyanI8 )((ZyanU8 )-1 >> 1));
155ZYAN_STATIC_ASSERT((ZyanI16)-1 >> 1 < (ZyanI16)((ZyanU16)-1 >> 1));
156ZYAN_STATIC_ASSERT((ZyanI32)-1 >> 1 < (ZyanI32)((ZyanU32)-1 >> 1));
157ZYAN_STATIC_ASSERT((ZyanI64)-1 >> 1 < (ZyanI64)((ZyanU64)-1 >> 1));
158
159/* ============================================================================================== */
160/* Pointer */
161/* ============================================================================================== */
162
166typedef void* ZyanVoidPointer;
167
171typedef const void* ZyanConstVoidPointer;
172
173#define ZYAN_NULL ((void*)0)
174
175/* ============================================================================================== */
176/* Logic types */
177/* ============================================================================================== */
178
179/* ---------------------------------------------------------------------------------------------- */
180/* Boolean */
181/* ---------------------------------------------------------------------------------------------- */
182
183#define ZYAN_FALSE 0u
184#define ZYAN_TRUE 1u
185
192typedef ZyanU8 ZyanBool;
193
194/* ---------------------------------------------------------------------------------------------- */
195/* Ternary */
196/* ---------------------------------------------------------------------------------------------- */
197
204typedef ZyanI8 ZyanTernary;
205
206#define ZYAN_TERNARY_FALSE (-1)
207#define ZYAN_TERNARY_UNKNOWN 0x00
208#define ZYAN_TERNARY_TRUE 0x01
209
210/* ============================================================================================== */
211/* String types */
212/* ============================================================================================== */
213
214/* ---------------------------------------------------------------------------------------------- */
215/* C-style strings */
216/* ---------------------------------------------------------------------------------------------- */
217
223typedef char* ZyanCharPointer;
224
230typedef const char* ZyanConstCharPointer;
231
232/* ---------------------------------------------------------------------------------------------- */
233
234/* ============================================================================================== */
235
236#endif /* ZYCORE_TYPES_H */
#define ZYAN_STATIC_ASSERT(x)
Definition Defines.h:287
ZyanU8 ZyanBool
Definition Types.h:192
const void * ZyanConstVoidPointer
Definition Types.h:171
const char * ZyanConstCharPointer
Definition Types.h:230
char * ZyanCharPointer
Definition Types.h:223
ZyanI8 ZyanTernary
Definition Types.h:204
void * ZyanVoidPointer
Definition Types.h:166