27 #ifndef _UCOMMON_PLATFORM_H_
28 #define _UCOMMON_PLATFORM_H_
31 #ifndef UCOMMON_SYSRUNTIME
35 #define _UCOMMON_EXTENDED_
48 #define UCOMMON_NAMESPACE ucommon
49 #define NAMESPACE_UCOMMON namespace ucommon {
50 #define END_NAMESPACE }
61 #ifndef _POSIX_PTHREAD_SEMANTICS
62 #define _POSIX_PTHREAD_SEMANTICS
66 #if defined(__GNUC__) && (__GNUC < 3) && !defined(_GNU_SOURCE)
70 #if __GNUC__ > 3 || (__GNUC__ == 3 && (__GNU_MINOR__ > 3))
71 #define __PRINTF(x,y) __attribute__ ((format (printf, x, y)))
72 #define __SCANF(x, y) __attribute__ ((format (scanf, x, y)))
73 #define __MALLOC __attribute__ ((malloc))
77 #define __PRINTF(x, y)
96 #if defined(_MSC_VER) || defined(WIN32) || defined(_WIN32)
103 #if defined(_M_X64) || defined(_M_ARM)
104 #define _MSCONDITIONALS_
106 #define _WIN32_WINNT 0x0600
120 #pragma warning(disable: 4251)
121 #pragma warning(disable: 4996)
122 #pragma warning(disable: 4355)
123 #pragma warning(disable: 4290)
124 #pragma warning(disable: 4291)
127 #if defined(__BORLANDC__) && !defined(__MT__)
128 #error Please enable multithreading
131 #if defined(_MSC_VER) && !defined(_MT)
132 #error Please enable multithreading (Project -> Settings -> C/C++ -> Code Generation -> Use Runtime Library)
137 #define _WIN32_WINNT 0x0501
142 #define WINVER _WIN32_WINNT
145 #ifndef WIN32_LEAN_AND_MEAN
146 #define WIN32_LEAN_AND_MEAN
149 #include <winsock2.h>
150 #include <ws2tcpip.h>
152 #if defined(_MSC_VER)
153 typedef signed long ssize_t;
159 #ifdef UCOMMON_STATIC
162 #define __EXPORT __declspec(dllimport)
168 #if defined(UCOMMON_RUNTIME) || defined(UCOMMON_STATIC)
171 #define __SHARED __EXPORT
175 #define __EXPORT __attribute__ ((visibility("default")))
176 #define __LOCAL __attribute__ ((visibility("hidden")))
177 #define __SHARED __attribute__ ((visibility("default")))
184 #include <sys/stat.h>
188 #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 7)) && !defined(UCOMMON_SYSRUNTIME) && defined(__MINGW_WINPTHREAD__)
190 #undef _MSCONDITIONALS_
193 typedef DWORD pthread_t;
194 typedef CRITICAL_SECTION pthread_mutex_t;
196 typedef char *caddr_t;
198 typedef SOCKET socket_t;
201 typedef struct timespec {
207 inline void sleep(
int seconds)
208 {::Sleep((seconds * 1000l));}
212 #define SERVICE_MAIN(id, argc, argv) void WINAPI service_##id(DWORD argc, LPSTR *argv)
214 typedef LPSERVICE_MAIN_FUNCTION cpr_service_t;
217 inline void pthread_exit(
void *p)
218 {_endthreadex((DWORD)0);}
220 inline pthread_t pthread_self(
void)
221 {
return (pthread_t)GetCurrentThreadId();}
223 inline int pthread_mutex_init(pthread_mutex_t *mutex,
void *x)
224 {InitializeCriticalSection(mutex);
return 0;}
226 inline void pthread_mutex_destroy(pthread_mutex_t *mutex)
227 {DeleteCriticalSection(mutex);}
229 inline void pthread_mutex_lock(pthread_mutex_t *mutex)
230 {EnterCriticalSection(mutex);}
232 inline void pthread_mutex_unlock(pthread_mutex_t *mutex)
233 {LeaveCriticalSection(mutex);}
236 inline char *strdup(
const char *s)
239 inline int stricmp(
const char *s1,
const char *s2)
240 {
return _stricmp(s1, s2);}
242 inline int strnicmp(
const char *s1,
const char *s2,
size_t l)
243 {
return _strnicmp(s1, s2, l);}
246 #elif defined(__PTH__)
249 #include <sys/wait.h>
251 typedef int socket_t;
253 #define INVALID_SOCKET -1
254 #define INVALID_HANDLE_VALUE -1
257 #define pthread_mutex_t pth_mutex_t
258 #define pthread_cond_t pth_cond_t
259 #define pthread_t pth_t
261 inline int pthread_sigmask(
int how,
const sigset_t *set, sigset_t *oset)
262 {
return pth_sigmask(how, set, oset);};
264 inline void pthread_exit(
void *p)
267 inline void pthread_kill(pthread_t tid,
int sig)
268 {pth_raise(tid, sig);};
270 inline int pthread_mutex_init(pthread_mutex_t *mutex,
void *x)
271 {
return pth_mutex_init(mutex) != 0;};
273 inline void pthread_mutex_destroy(pthread_mutex_t *mutex)
276 inline void pthread_mutex_lock(pthread_mutex_t *mutex)
277 {pth_mutex_acquire(mutex, 0, NULL);};
279 inline void pthread_mutex_unlock(pthread_mutex_t *mutex)
280 {pth_mutex_release(mutex);};
282 inline void pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
283 {pth_cond_await(cond, mutex, NULL);};
285 inline void pthread_cond_signal(pthread_cond_t *cond)
286 {pth_cond_notify(cond, FALSE);};
288 inline void pthread_cond_broadcast(pthread_cond_t *cond)
289 {pth_cond_notify(cond, TRUE);};
295 typedef int socket_t;
297 #define INVALID_SOCKET -1
298 #define INVALID_HANDLE_VALUE -1
304 typedef signed __int8 int8_t;
305 typedef unsigned __int8 uint8_t;
306 typedef signed __int16 int16_t;
307 typedef unsigned __int16 uint16_t;
308 typedef signed __int32 int32_t;
309 typedef unsigned __int32 uint32_t;
310 typedef signed __int64 int64_t;
311 typedef unsigned __int64 uint64_t;
312 typedef char *caddr_t;
315 #define snprintf _snprintf
316 #define vsnprintf _vsnprintf
320 #include <sys/stat.h>
321 #include <sys/types.h>
340 #ifndef UCOMMON_RUNTIME
346 #define ENETDOWN ((int)(WSAENETDOWN))
349 #define EINPROGRESS ((int)(WSAEINPROGRESS))
352 #define ENOPROTOOPT ((int)(WSAENOPROTOOPT))
355 #define EADDRINUSE ((int)(WSAEADDRINUSE))
357 #ifndef EADDRNOTAVAIL
358 #define EADDRNOTAVAIL ((int)(WSAEADDRNOTAVAIL))
361 #define ENETUNREACH ((int)(WSAENETUNREACH))
364 #define EHOSTUNREACH ((int)(WSAEHOSTUNREACH))
367 #define EHOSTDOWN ((int)(WSAEHOSTDOWN))
370 #define ENETRESET ((int)(WSAENETRESET))
373 #define ECONNABORTED ((int)(WSAECONNABORTED))
376 #define ECONNRESET ((int)(WSAECONNRESET))
379 #define EISCONN ((int)(WSAEISCONN))
382 #define ENOTCONN ((int)(WSAENOTCONN))
385 #define ESHUTDOWN ((int)(WSAESHUTDOWN))
388 #define ETIMEDOUT ((int)(WSAETIMEDOUT))
391 #define ECONNREFUSED ((int)(WSAECONNREFUSED))
408 #define PROGRAM_MAIN(argc, argv) extern "C" int main(int argc, char **argv)
409 #define PROGRAM_EXIT(code) return code
413 #define SERVICE_MAIN(id, argc, argv) void service_##id(int argc, char **argv)
414 typedef void (*cpr_service_t)(
int argc,
char **argv);
419 #define crit(x, text) assert(x)
421 #define crit(x, text) if(!(x)) cpr_runtime_error(text)
432 {
return ((memory) ?
new(((
void *)memory)) T : NULL);}
434 typedef long Integer;
435 typedef unsigned long Unsigned;
void strfree(char *str)
Matching function for strdup().
void(* sighandler_t)(int)
Convenient typedef for signal handlers.
T * init(T *memory)
Template function to initialize memory by invoking default constructor.
unsigned long timeout_t
Typedef for millisecond timer values.