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_
103 #define _WIN32_WINNT 0x0600
117 #pragma warning(disable: 4251)
118 #pragma warning(disable: 4996)
119 #pragma warning(disable: 4355)
120 #pragma warning(disable: 4290)
121 #pragma warning(disable: 4291)
124 #if defined(__BORLANDC__) && !defined(__MT__)
125 #error Please enable multithreading
128 #if defined(_MSC_VER) && !defined(_MT)
129 #error Please enable multithreading (Project -> Settings -> C/C++ -> Code Generation -> Use Runtime Library)
134 #define _WIN32_WINNT 0x0501
139 #define WINVER _WIN32_WINNT
142 #ifndef WIN32_LEAN_AND_MEAN
143 #define WIN32_LEAN_AND_MEAN
146 #include <winsock2.h>
147 #include <ws2tcpip.h>
149 #if defined(_MSC_VER)
150 typedef signed long ssize_t;
156 #ifdef UCOMMON_STATIC
159 #define __EXPORT __declspec(dllimport)
165 #if defined(UCOMMON_RUNTIME) || defined(UCOMMON_STATIC)
168 #define __SHARED __EXPORT
171 #elif UCOMMON_VISIBILITY > 0
172 #define __EXPORT __attribute__ ((visibility("default")))
173 #define __LOCAL __attribute__ ((visibility("hidden")))
174 #define __SHARED __attribute__ ((visibility("default")))
185 #include <sys/stat.h>
188 typedef DWORD pthread_t;
189 typedef CRITICAL_SECTION pthread_mutex_t;
190 typedef char *caddr_t;
192 typedef SOCKET socket_t;
195 typedef struct timespec {
203 #define SERVICE_MAIN(id, argc, argv) void WINAPI service_##id(DWORD argc, LPSTR *argv)
205 typedef LPSERVICE_MAIN_FUNCTION cpr_service_t;
207 inline void sleep(
int seconds)
208 {::Sleep((seconds * 1000l));}
210 inline void pthread_exit(
void *p)
211 {_endthreadex((DWORD)0);}
213 inline pthread_t pthread_self(
void)
214 {
return (pthread_t)GetCurrentThreadId();}
216 inline int pthread_mutex_init(pthread_mutex_t *mutex,
void *x)
217 {InitializeCriticalSection(mutex);
return 0;}
219 inline void pthread_mutex_destroy(pthread_mutex_t *mutex)
220 {DeleteCriticalSection(mutex);}
222 inline void pthread_mutex_lock(pthread_mutex_t *mutex)
223 {EnterCriticalSection(mutex);}
225 inline void pthread_mutex_unlock(pthread_mutex_t *mutex)
226 {LeaveCriticalSection(mutex);}
228 inline char *strdup(
const char *s)
231 inline int stricmp(
const char *s1,
const char *s2)
232 {
return _stricmp(s1, s2);}
234 inline int strnicmp(
const char *s1,
const char *s2,
size_t l)
235 {
return _strnicmp(s1, s2, l);}
238 #elif defined(__PTH__)
241 #include <sys/wait.h>
243 typedef int socket_t;
245 #define INVALID_SOCKET -1
246 #define INVALID_HANDLE_VALUE -1
249 #define pthread_mutex_t pth_mutex_t
250 #define pthread_cond_t pth_cond_t
251 #define pthread_t pth_t
253 inline int pthread_sigmask(
int how,
const sigset_t *set, sigset_t *oset)
254 {
return pth_sigmask(how, set, oset);};
256 inline void pthread_exit(
void *p)
259 inline void pthread_kill(pthread_t tid,
int sig)
260 {pth_raise(tid, sig);};
262 inline int pthread_mutex_init(pthread_mutex_t *mutex,
void *x)
263 {
return pth_mutex_init(mutex) != 0;};
265 inline void pthread_mutex_destroy(pthread_mutex_t *mutex)
268 inline void pthread_mutex_lock(pthread_mutex_t *mutex)
269 {pth_mutex_acquire(mutex, 0, NULL);};
271 inline void pthread_mutex_unlock(pthread_mutex_t *mutex)
272 {pth_mutex_release(mutex);};
274 inline void pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
275 {pth_cond_await(cond, mutex, NULL);};
277 inline void pthread_cond_signal(pthread_cond_t *cond)
278 {pth_cond_notify(cond, FALSE);};
280 inline void pthread_cond_broadcast(pthread_cond_t *cond)
281 {pth_cond_notify(cond, TRUE);};
287 typedef int socket_t;
289 #define INVALID_SOCKET -1
290 #define INVALID_HANDLE_VALUE -1
296 typedef signed __int8 int8_t;
297 typedef unsigned __int8 uint8_t;
298 typedef signed __int16 int16_t;
299 typedef unsigned __int16 uint16_t;
300 typedef signed __int32 int32_t;
301 typedef unsigned __int32 uint32_t;
302 typedef signed __int64 int64_t;
303 typedef unsigned __int64 uint64_t;
304 typedef char *caddr_t;
307 #define snprintf _snprintf
308 #define vsnprintf _vsnprintf
312 #include <sys/stat.h>
313 #include <sys/types.h>
335 #define ENETDOWN ((int)(WSAENETDOWN))
338 #define EINPROGRESS ((int)(WSAEINPROGRESS))
341 #define ENOPROTOOPT ((int)(WSAENOPROTOOPT))
344 #define EADDRINUSE ((int)(WSAEADDRINUSE))
346 #ifndef EADDRNOTAVAIL
347 #define EADDRNOTAVAIL ((int)(WSAEADDRNOTAVAIL))
350 #define ENETUNREACH ((int)(WSAENETUNREACH))
353 #define EHOSTUNREACH ((int)(WSAEHOSTUNREACH))
356 #define EHOSTDOWN ((int)(WSAEHOSTDOWN))
359 #define ENETRESET ((int)(WSAENETRESET))
362 #define ECONNABORTED ((int)(WSAECONNABORTED))
365 #define ECONNRESET ((int)(WSAECONNRESET))
368 #define EISCONN ((int)(WSAEISCONN))
371 #define ENOTCONN ((int)(WSAENOTCONN))
374 #define ESHUTDOWN ((int)(WSAESHUTDOWN))
377 #define ETIMEDOUT ((int)(WSAETIMEDOUT))
380 #define ECONNREFUSED ((int)(WSAECONNREFUSED))
397 #define PROGRAM_MAIN(argc, argv) extern "C" int main(int argc, char **argv)
398 #define PROGRAM_EXIT(code) return code
402 #define SERVICE_MAIN(id, argc, argv) void service_##id(int argc, char **argv)
403 typedef void (*cpr_service_t)(
int argc,
char **argv);
408 #define crit(x, text) assert(x)
410 #define crit(x, text) if(!(x)) cpr_runtime_error(text)
421 {
return ((memory) ?
new(((caddr_t)memory)) T : NULL);}
423 typedef long Integer;
424 typedef unsigned long Unsigned;
T * init(T *memory)
Template function to initialize memory by invoking default constructor.
void strfree(char *str)
Matching function for strdup().
int stricmp(const char *string1, const char *string2)
Convenience function for case insensitive null terminated string compare.
void(* sighandler_t)(int)
Convenient typedef for signal handlers.
unsigned long timeout_t
Typedef for millisecond timer values.
int strnicmp(const char *string1, const char *string2, size_t max)
Convenience function for case insensitive null terminated string compare.