1 //  basic_types.hpp  --------------------------------------------------------------//
2 
3 //  Copyright 2010 Vicente J. Botet Escriba
4 
5 //  Distributed under the Boost Software License, Version 1.0.
6 //  See http://www.boost.org/LICENSE_1_0.txt
7 
8 
9 #ifndef BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
10 #define BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
11 
12 #include <cstdarg>
13 #include <boost/cstdint.hpp>
14 #include <boost/detail/winapi/config.hpp>
15 
16 #if defined( BOOST_USE_WINDOWS_H )
17 # include <windows.h>
18 #elif defined( WIN32 ) || defined( _WIN32 ) || defined( __WIN32__ ) ||  defined(__CYGWIN__)
19 # include <winerror.h>
20 // @FIXME Which condition must be tested
21 # ifdef UNDER_CE
22 #  ifndef WINAPI
23 #   ifndef _WIN32_WCE_EMULATION
24 #    define WINAPI  __cdecl     // Note this doesn't match the desktop definition
25 #   else
26 #    define WINAPI  __stdcall
27 #   endif
28 #  endif
29 # else
30 #  ifndef WINAPI
31 #    define WINAPI  __stdcall
32 #  endif
33 # endif
34 # ifndef NTAPI
35 #  define NTAPI __stdcall
36 # endif
37 #else
38 # error "Win32 functions not available"
39 #endif
40 
41 #ifdef BOOST_HAS_PRAGMA_ONCE
42 #pragma once
43 #endif
44 
45 namespace boost {
46 namespace detail {
47 namespace winapi {
48 #if defined( BOOST_USE_WINDOWS_H )
49     typedef ::BOOL BOOL_;
50     typedef ::BOOLEAN BOOLEAN_;
51     typedef ::PBOOLEAN PBOOLEAN_;
52     typedef ::BYTE BYTE_;
53     typedef ::WORD WORD_;
54     typedef ::DWORD DWORD_;
55     typedef ::HANDLE HANDLE_;
56     typedef ::HMODULE HMODULE_;
57     typedef ::LONG LONG_;
58     typedef ::ULONG ULONG_;
59     typedef ::LONGLONG LONGLONG_;
60     typedef ::ULONGLONG ULONGLONG_;
61     typedef ::INT_PTR INT_PTR_;
62     typedef ::UINT_PTR UINT_PTR_;
63     typedef ::LONG_PTR LONG_PTR_;
64     typedef ::ULONG_PTR ULONG_PTR_;
65     typedef ::LARGE_INTEGER LARGE_INTEGER_;
66     typedef ::PLARGE_INTEGER PLARGE_INTEGER_;
67     typedef ::PVOID PVOID_;
68     typedef ::LPVOID LPVOID_;
69     typedef ::CHAR CHAR_;
70     typedef ::LPSTR LPSTR_;
71     typedef ::LPCSTR LPCSTR_;
72     typedef ::WCHAR WCHAR_;
73     typedef ::LPWSTR LPWSTR_;
74     typedef ::LPCWSTR LPCWSTR_;
75 #else
76 extern "C" {
77     typedef int BOOL_;
78     typedef unsigned char BYTE_;
79     typedef BYTE_ BOOLEAN_;
80     typedef BOOLEAN_* PBOOLEAN_;
81     typedef unsigned short WORD_;
82     typedef unsigned long DWORD_;
83     typedef void* HANDLE_;
84     typedef void* HMODULE_;
85 
86     typedef long LONG_;
87     typedef unsigned long ULONG_;
88 
89     typedef boost::int64_t LONGLONG_;
90     typedef boost::uint64_t ULONGLONG_;
91 
92 // @FIXME Which condition must be tested
93 # ifdef _WIN64
94 #if defined(__CYGWIN__)
95     typedef long INT_PTR_;
96     typedef unsigned long UINT_PTR_;
97     typedef long LONG_PTR_;
98     typedef unsigned long ULONG_PTR_;
99 #else
100     typedef __int64 INT_PTR_;
101     typedef unsigned __int64 UINT_PTR_;
102     typedef __int64 LONG_PTR_;
103     typedef unsigned __int64 ULONG_PTR_;
104 #endif
105 # else
106     typedef int INT_PTR_;
107     typedef unsigned int UINT_PTR_;
108     typedef long LONG_PTR_;
109     typedef unsigned long ULONG_PTR_;
110 # endif
111 
112     typedef struct _LARGE_INTEGER {
113         LONGLONG_ QuadPart;
114     } LARGE_INTEGER_;
115     typedef LARGE_INTEGER_ *PLARGE_INTEGER_;
116 
117     typedef void *PVOID_;
118     typedef void *LPVOID_;
119     typedef const void *LPCVOID_;
120 
121     typedef char CHAR_;
122     typedef CHAR_ *LPSTR_;
123     typedef const CHAR_ *LPCSTR_;
124 
125     typedef wchar_t WCHAR_;
126     typedef WCHAR_ *LPWSTR_;
127     typedef const WCHAR_ *LPCWSTR_;
128 }
129 #endif
130 }
131 }
132 }
133 
134 #endif // BOOST_DETAIL_WINAPI_BASIC_TYPES_HPP
135