1 /+
2 +            Copyright 2022 – 2024 Aya Partridge
3 + Distributed under the Boost Software License, Version 1.0.
4 +     (See accompanying file LICENSE_1_0.txt or copy at
5 +           http://www.boost.org/LICENSE_1_0.txt)
6 +/
7 module bindbc.common.types;
8 
9 version(WebAssembly) version = NoStdC;
10 
11 //c_long; c_ulong
12 version(NoStdC){
13 	static if((void*).sizeof > int.sizeof){
14 		alias c_long  = long;
15 		alias c_ulong = ulong;
16 	}else{
17 		private enum __c_long  : int;
18 		private enum __c_ulong : uint;
19 		alias c_long  = __c_long;
20 		alias c_ulong = __c_ulong;
21 	}
22 }else{
23 	static import core.stdc.config;
24 	alias c_long = core.stdc.config.c_long;
25 	alias c_ulong = core.stdc.config.c_ulong;
26 }
27 
28 //c_longlong; c_ulonglong
29 private enum __c_longlong  : long;
30 private enum __c_ulonglong : ulong;
31 alias c_longlong  = __c_longlong;
32 alias c_ulonglong = __c_ulonglong;
33 
34 //c_int64; c_uint64
35 version(NoStdC){
36 	alias c_int64 = long;
37 	alias c_uint64 = ulong;
38 }else{
39 	static import core.stdc.stdint;
40 	alias c_int64 = core.stdc.stdint.int64_t;
41 	alias c_uint64 = core.stdc.stdint.uint64_t;
42 }
43 
44 //va_list
45 version(NoStdC){
46 	alias va_list = void*;
47 }else{
48 	static import core.stdc.stdarg;
49 	alias va_list = core.stdc.stdarg.va_list;
50 }
51 
52 //wchar_t
53 static if((){
54 	version(Posix)            return true;
55 	else version(WebAssembly) return true;
56 	else return false;
57 }()){
58 	alias wchar_t = dchar;
59 }else static if((){
60 	version(Windows)     return true;
61 	else version(WinRT)  return true;
62 	else version(WinGDK) return true;
63 	else return false;
64 }()){
65 	alias wchar_t = wchar;
66 }else static assert(0, "`sizeof(wchar_t)` is not known on this platform. Please add it to bindbc/common/types.d");