MessagePack for C++
Toggle main menu visibility
Loading...
Searching...
No Matches
msgpack
sysdep.hpp
Go to the documentation of this file.
1
/*
2
* MessagePack system dependencies
3
*
4
* Copyright (C) 2008-2010 FURUHASHI Sadayuki
5
*
6
* Distributed under the Boost Software License, Version 1.0.
7
* (See accompanying file LICENSE_1_0.txt or copy at
8
* http://www.boost.org/LICENSE_1_0.txt)
9
*/
10
#ifndef MSGPACK_SYSDEP_HPP
11
#define MSGPACK_SYSDEP_HPP
12
13
#include <stdlib.h>
14
#include <stddef.h>
15
16
#if defined(_MSC_VER) && _MSC_VER <= 1800
17
# define snprintf(buf, len, format,...) _snprintf_s(buf, len, _TRUNCATE, format, __VA_ARGS__)
18
#endif
19
20
#if defined(_MSC_VER) && _MSC_VER < 1600
21
typedef
signed
__int8 int8_t;
22
typedef
unsigned
__int8 uint8_t;
23
typedef
signed
__int16 int16_t;
24
typedef
unsigned
__int16 uint16_t;
25
typedef
signed
__int32 int32_t;
26
typedef
unsigned
__int32 uint32_t;
27
typedef
signed
__int64 int64_t;
28
typedef
unsigned
__int64 uint64_t;
29
# if defined(_WIN64)
30
typedef
signed
__int64 intptr_t;
31
typedef
unsigned
__int64 uintptr_t;
32
# else
33
typedef
signed
__int32 intptr_t;
34
typedef
unsigned
__int32 uintptr_t;
35
# endif
36
#elif defined(_MSC_VER)
// && _MSC_VER >= 1600
37
# include <stdint.h>
38
#else
39
# include <stdint.h>
40
# include <stdbool.h>
41
#endif
42
43
#if !defined(MSGPACK_DLLEXPORT)
44
#if defined(_MSC_VER)
45
# define MSGPACK_DLLEXPORT __declspec(dllexport)
46
#else
/* _MSC_VER */
47
# define MSGPACK_DLLEXPORT
48
#endif
/* _MSC_VER */
49
#endif
50
51
#ifdef _WIN32
52
# if defined(_KERNEL_MODE)
53
# define _msgpack_atomic_counter_header <ntddk.h>
54
# else
55
# define _msgpack_atomic_counter_header <windows.h>
56
# if !defined(WIN32_LEAN_AND_MEAN)
57
# define WIN32_LEAN_AND_MEAN
58
# endif
/* WIN32_LEAN_AND_MEAN */
59
# endif
60
typedef
long
_msgpack_atomic_counter_t
;
61
#if defined(_AMD64_) || defined(_M_X64) || defined(_M_ARM64)
62
# define _msgpack_sync_decr_and_fetch(ptr) _InterlockedDecrement(ptr)
63
# define _msgpack_sync_incr_and_fetch(ptr) _InterlockedIncrement(ptr)
64
#else
65
# define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr)
66
# define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr)
67
#endif
68
#elif defined(__GNUC__) && ((__GNUC__*10 + __GNUC_MINOR__) < 41)
69
70
# define _msgpack_atomic_counter_header "msgpack/gcc_atomic.hpp"
71
72
#else
73
typedef
unsigned
int
_msgpack_atomic_counter_t
;
74
# define _msgpack_sync_decr_and_fetch(ptr) __sync_sub_and_fetch(ptr, 1)
75
# define _msgpack_sync_incr_and_fetch(ptr) __sync_add_and_fetch(ptr, 1)
76
#endif
77
78
#ifdef _WIN32
79
80
/* numeric_limits<T>::min,max */
81
# ifdef max
82
# undef max
83
# endif
84
# ifdef min
85
# undef min
86
# endif
87
88
#elif defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
89
90
#include <arpa/inet.h>
/* __BYTE_ORDER */
91
# if defined(linux) || defined(__linux__)
92
# include <byteswap.h>
93
# endif
94
95
#endif
96
97
#if !defined(MSGPACK_ENDIAN_LITTLE_BYTE) && !defined(MSGPACK_ENDIAN_BIG_BYTE)
98
99
#if defined(MSGPACK_NO_BOOST)
100
#include <msgpack/predef/other/endian.h>
101
#else
// defined(MSGPACK_NO_BOOST)
102
#include <boost/predef/other/endian.h>
103
104
#define MSGPACK_ENDIAN_LITTLE_BYTE BOOST_ENDIAN_LITTLE_BYTE
105
#define MSGPACK_ENDIAN_BIG_BYTE BOOST_ENDIAN_BIG_BYTE
106
107
#endif
// defined(MSGPACK_NO_BOOST)
108
109
#endif
// !defined(MSGPACK_ENDIAN_LITTLE_BYTE) && !defined(MSGPACK_ENDIAN_BIG_BYTE)
110
111
#if MSGPACK_ENDIAN_LITTLE_BYTE
112
113
# if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
114
# define _msgpack_be16(x) ntohs((uint16_t)x)
115
# else
116
# if defined(ntohs)
117
# define _msgpack_be16(x) ntohs(x)
118
# elif defined(_byteswap_ushort) || (defined(_MSC_VER) && _MSC_VER >= 1400)
119
# define _msgpack_be16(x) ((uint16_t)_byteswap_ushort((unsigned short)x))
120
# else
121
# define _msgpack_be16(x) ( \
122
((((uint16_t)x) << 8) ) | \
123
((((uint16_t)x) >> 8) ) )
124
# endif
125
# endif
126
127
# if defined(unix) || defined(__unix) || defined(__APPLE__) || defined(__OpenBSD__)
128
# define _msgpack_be32(x) ntohl((uint32_t)x)
129
# else
130
# if defined(ntohl)
131
# define _msgpack_be32(x) ntohl(x)
132
# elif defined(_byteswap_ulong) || (defined(_MSC_VER) && _MSC_VER >= 1400)
133
# define _msgpack_be32(x) ((uint32_t)_byteswap_ulong((unsigned long)x))
134
# else
135
# define _msgpack_be32(x) \
136
( ((((uint32_t)x) << 24) ) | \
137
((((uint32_t)x) << 8) & 0x00ff0000U ) | \
138
((((uint32_t)x) >> 8) & 0x0000ff00U ) | \
139
((((uint32_t)x) >> 24) ) )
140
# endif
141
# endif
142
143
# if defined(_byteswap_uint64) || (defined(_MSC_VER) && _MSC_VER >= 1400)
144
# define _msgpack_be64(x) (_byteswap_uint64(x))
145
# elif defined(bswap_64)
146
# define _msgpack_be64(x) bswap_64(x)
147
# elif defined(__DARWIN_OSSwapInt64)
148
# define _msgpack_be64(x) __DARWIN_OSSwapInt64(x)
149
# else
150
# define _msgpack_be64(x) \
151
( ((((uint64_t)x) << 56) ) | \
152
((((uint64_t)x) << 40) & 0x00ff000000000000ULL ) | \
153
((((uint64_t)x) << 24) & 0x0000ff0000000000ULL ) | \
154
((((uint64_t)x) << 8) & 0x000000ff00000000ULL ) | \
155
((((uint64_t)x) >> 8) & 0x00000000ff000000ULL ) | \
156
((((uint64_t)x) >> 24) & 0x0000000000ff0000ULL ) | \
157
((((uint64_t)x) >> 40) & 0x000000000000ff00ULL ) | \
158
((((uint64_t)x) >> 56) ) )
159
# endif
160
161
#elif MSGPACK_ENDIAN_BIG_BYTE
162
163
# define _msgpack_be16(x) (x)
164
# define _msgpack_be32(x) (x)
165
# define _msgpack_be64(x) (x)
166
167
#else
168
# error msgpack-c supports only big endian and little endian
169
#endif
/* MSGPACK_ENDIAN_LITTLE_BYTE */
170
171
#define _msgpack_load16(cast, from, to) do { \
172
memcpy((cast*)(to), (from), sizeof(cast)); \
173
*(to) = (cast)_msgpack_be16(*(to)); \
174
} while (0);
175
176
#define _msgpack_load32(cast, from, to) do { \
177
memcpy((cast*)(to), (from), sizeof(cast)); \
178
*(to) = (cast)_msgpack_be32(*(to)); \
179
} while (0);
180
#define _msgpack_load64(cast, from, to) do { \
181
memcpy((cast*)(to), (from), sizeof(cast)); \
182
*(to) = (cast)_msgpack_be64(*(to)); \
183
} while (0);
184
185
#define _msgpack_store16(to, num) \
186
do { uint16_t val = _msgpack_be16(num); memcpy(to, &val, 2); } while(0)
187
#define _msgpack_store32(to, num) \
188
do { uint32_t val = _msgpack_be32(num); memcpy(to, &val, 4); } while(0)
189
#define _msgpack_store64(to, num) \
190
do { uint64_t val = _msgpack_be64(num); memcpy(to, &val, 8); } while(0)
191
192
/*
193
#define _msgpack_load16(cast, from) \
194
({ cast val; memcpy(&val, (char*)from, 2); _msgpack_be16(val); })
195
#define _msgpack_load32(cast, from) \
196
({ cast val; memcpy(&val, (char*)from, 4); _msgpack_be32(val); })
197
#define _msgpack_load64(cast, from) \
198
({ cast val; memcpy(&val, (char*)from, 8); _msgpack_be64(val); })
199
*/
200
201
202
#ifdef __APPLE__
203
# include <TargetConditionals.h>
204
#endif
205
206
#endif
/* msgpack/sysdep.hpp */
_msgpack_atomic_counter_t
unsigned int _msgpack_atomic_counter_t
Definition
sysdep.hpp:73
Generated by
1.17.0