27 #ifndef _UCOMMON_PLATFORM_H_
28 #define _UCOMMON_PLATFORM_H_
41 #define UCOMMON_NAMESPACE ucommon
42 #define NAMESPACE_UCOMMON namespace ucommon {
43 #define NAMESPACE_EXTERN_C extern "C" {
44 #define END_NAMESPACE }
45 #define EXTERN_C extern "C"
56 #ifndef _POSIX_PTHREAD_SEMANTICS
57 #define _POSIX_PTHREAD_SEMANTICS
61 #if defined(__GNUC__) && (__GNUC < 3) && !defined(_GNU_SOURCE)
65 #if __GNUC__ > 3 || (__GNUC__ == 3 && (__GNU_MINOR__ > 3))
66 #define __PRINTF(x,y) __attribute__ ((format (printf, x, y)))
67 #define __SCANF(x, y) __attribute__ ((format (scanf, x, y)))
68 #define __MALLOC __attribute__ ((malloc))
72 #define __PRINTF(x, y)
91 #if defined(NEW_STDCPP) || defined(OLD_STDCPP)
92 #define _UCOMMON_EXTENDED_
97 #if defined(_MSC_VER) || defined(WIN32) || defined(_WIN32)
100 #if defined(_M_X64) || defined(_M_ARM)
101 #define _MSCONDITIONALS_
102 #ifndef _WIN32_WINNT 0x0600
116 #pragma warning(disable: 4251)
117 #pragma warning(disable: 4996)
118 #pragma warning(disable: 4355)
119 #pragma warning(disable: 4290)
120 #pragma warning(disable: 4291)
122 #if defined(__BORLANDC__) && !defined(__MT__)
123 #error Please enable multithreading
126 #if defined(_MSC_VER) && !defined(_MT)
127 #error Please enable multithreading (Project -> Settings -> C/C++ -> Code Generation -> Use Runtime Library)
132 #define _WIN32_WINNT 0x0501
137 #define WINVER _WIN32_WINNT
140 #ifndef WIN32_LEAN_AND_MEAN
141 #define WIN32_LEAN_AND_MEAN
144 #include <winsock2.h>
145 #include <ws2tcpip.h>
147 #if defined(_MSC_VER)
148 typedef signed long ssize_t;
154 #ifdef UCOMMON_STATIC
157 #define __EXPORT __declspec(dllimport)
163 #if defined(UCOMMON_RUNTIME) || defined(UCOMMON_STATIC)
166 #define __SHARED __EXPORT
169 #elif UCOMMON_VISIBILITY > 0
170 #define __EXPORT __attribute__ ((visibility("default")))
171 #define __LOCAL __attribute__ ((visibility("hidden")))
172 #define __SHARED __attribute__ ((visibility("default")))
183 #include <sys/stat.h>
186 typedef DWORD pthread_t;
187 typedef CRITICAL_SECTION pthread_mutex_t;
188 typedef char *caddr_t;
190 typedef SOCKET socket_t;
192 typedef struct timespec {
199 #define SERVICE_MAIN(id, argc, argv) void WINAPI service_##id(DWORD argc, LPSTR *argv)
201 typedef LPSERVICE_MAIN_FUNCTION cpr_service_t;
203 inline void sleep(
int seconds)
204 {::Sleep((seconds * 1000l));};
206 inline void pthread_exit(
void *p)
207 {_endthreadex((DWORD)p);};
209 inline pthread_t pthread_self(
void)
210 {
return (pthread_t)GetCurrentThreadId();};
212 inline int pthread_mutex_init(pthread_mutex_t *mutex,
void *x)
213 {InitializeCriticalSection(mutex);
return 0;};
215 inline void pthread_mutex_destroy(pthread_mutex_t *mutex)
216 {DeleteCriticalSection(mutex);};
218 inline void pthread_mutex_lock(pthread_mutex_t *mutex)
219 {EnterCriticalSection(mutex);};
221 inline void pthread_mutex_unlock(pthread_mutex_t *mutex)
222 {LeaveCriticalSection(mutex);};
224 inline char *strdup(
const char *s)
225 {
return _strdup(s);};
227 inline int stricmp(
const char *s1,
const char *s2)
228 {
return _stricmp(s1, s2);};
230 inline int strnicmp(
const char *s1,
const char *s2,
size_t l)
231 {
return _strnicmp(s1, s2, l);};
234 #elif defined(__PTH__)
237 #include <sys/wait.h>
239 typedef int socket_t;
241 #define INVALID_SOCKET -1
242 #define INVALID_HANDLE_VALUE -1
245 #define pthread_mutex_t pth_mutex_t
246 #define pthread_cond_t pth_cond_t
247 #define pthread_t pth_t
249 inline int pthread_sigmask(
int how,
const sigset_t *
set, sigset_t *oset)
250 {
return pth_sigmask(how,
set, oset);};
252 inline void pthread_exit(
void *p)
255 inline void pthread_kill(pthread_t tid,
int sig)
256 {pth_raise(tid, sig);};
258 inline int pthread_mutex_init(pthread_mutex_t *mutex,
void *x)
259 {
return pth_mutex_init(mutex) != 0;};
261 inline void pthread_mutex_destroy(pthread_mutex_t *mutex)
264 inline void pthread_mutex_lock(pthread_mutex_t *mutex)
265 {pth_mutex_acquire(mutex, 0, NULL);};
267 inline void pthread_mutex_unlock(pthread_mutex_t *mutex)
268 {pth_mutex_release(mutex);};
270 inline void pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
271 {pth_cond_await(cond, mutex, NULL);};
273 inline void pthread_cond_signal(pthread_cond_t *cond)
274 {pth_cond_notify(cond, FALSE);};
276 inline void pthread_cond_broadcast(pthread_cond_t *cond)
277 {pth_cond_notify(cond, TRUE);};
283 typedef int socket_t;
285 #define INVALID_SOCKET -1
286 #define INVALID_HANDLE_VALUE -1
292 typedef signed __int8 int8_t;
293 typedef unsigned __int8 uint8_t;
294 typedef signed __int16 int16_t;
295 typedef unsigned __int16 uint16_t;
296 typedef signed __int32 int32_t;
297 typedef unsigned __int32 uint32_t;
298 typedef signed __int64 int64_t;
299 typedef unsigned __int64 uint64_t;
300 typedef char *caddr_t;
303 #define snprintf _snprintf
304 #define vsnprintf _vsnprintf
308 #include <sys/stat.h>
309 #include <sys/types.h>
325 #define ENETDOWN ((int)(WSAENETDOWN))
328 #define EINPROGRESS ((int)(WSAEINPROGRESS))
331 #define ENOPROTOOPT ((int)(WSAENOPROTOOPT))
334 #define EADDRINUSE ((int)(WSAEADDRINUSE))
336 #ifndef EADDRNOTAVAIL
337 #define EADDRNOTAVAIL ((int)(WSAEADDRNOTAVAIL))
340 #define ENETUNREACH ((int)(WSAENETUNREACH))
343 #define EHOSTUNREACH ((int)(WSAEHOSTUNREACH))
346 #define EHOSTDOWN ((int)(WSAEHOSTDOWN))
349 #define ENETRESET ((int)(WSAENETRESET))
352 #define ECONNABORTED ((int)(WSAECONNABORTED))
355 #define ECONNRESET ((int)(WSAECONNRESET))
358 #define EISCONN ((int)(WSAEISCONN))
361 #define ENOTCONN ((int)(WSAENOTCONN))
364 #define ESHUTDOWN ((int)(WSAESHUTDOWN))
367 #define ETIMEDOUT ((int)(WSAETIMEDOUT))
370 #define ECONNREFUSED ((int)(WSAECONNREFUSED))
387 #define PROGRAM_MAIN(argc, argv) extern "C" int main(int argc, char **argv)
388 #define PROGRAM_EXIT(code) return code
392 #define SERVICE_MAIN(id, argc, argv) void service_##id(int argc, char **argv)
393 typedef void (*cpr_service_t)(
int argc,
char **argv);
398 #define crit(x, text) assert(x)
400 #define crit(x, text) if(!(x)) cpr_runtime_error(text)
411 {
return ((memory) ?
new(((caddr_t)memory)) T : NULL);}
413 typedef long Integer;
414 typedef unsigned long Unsigned;