95 #include <sys/timeb.h>
100 #include <sys/utsname.h>
101 #include <sys/time.h>
106 #include <sys/time.h>
114 #define SOCKETWOULDBLOCK WSAEWOULDBLOCK
116 #define SOCKETWOULDBLOCK EWOULDBLOCK
129 bool core_dll WaitForSocketReadability(socket s, int32 timeout);
130 bool core_dll WaitForSocketWriteability(socket s, int32 timeout);
134 static int32 GetLastOSErrorNumber();
135 static bool GetOSErrorMessage(
char* buffer, uint32 buflen, int32 err = -1);
136 static bool PrintLastOSErrorMessage(
const char* title);
137 static void PrintBinary(
void* p, uint32 size,
bool asInt,
const char* title = NULL);
143 pthread_mutex_t mutex;
144 pthread_cond_t semaphore;
150 shared_object library_;
156 template<
typename T> T getFunction(
const char *functionName);
166 template<
class T>
static T *New(thread_function f,
void *args);
167 static void TerminateAndWait(
Thread **threads, uint32 threadCount);
168 static void TerminateAndWait(
Thread *thread);
169 static void Wait(
Thread **threads, uint32 threadCount);
170 static void Wait(
Thread *thread);
171 static void Sleep(std::chrono::milliseconds ms);
172 static void Sleep(std::chrono::system_clock::duration ms) { Sleep(std::chrono::duration_cast<std::chrono::milliseconds>(ms)); }
175 void start(thread_function f);
193 static float64 Period_;
194 static Timestamp InitTime_;
196 static void Init(uint32 r);
197 static Timestamp Get();
199 static std::string ToString_seconds(Timestamp::duration duration);
200 static std::string ToString_year(Timestamp timestamp);
205 typedef char host_name[255];
206 static uint8 Name(
char *name);
213 static const uint32 Infinite;
215 Semaphore(uint32 initialCount, uint32 maxCount);
217 bool acquire(uint32 timeout = Infinite);
218 void release(uint32 count = 1);
226 static const uint32 Infinite;
230 bool acquire(uint32 timeout = Infinite);
236 critical_section cs_;
250 struct SemaTex sematex;
253 static const uint32 Infinite;
257 void start(std::chrono::microseconds deadline, std::chrono::milliseconds period = std::chrono::seconds(0));
258 bool wait(uint32 timeout = Infinite);
278 static void Add(signal_handler h);
279 static void Remove(signal_handler h);
284 static int32 Increment32(int32
volatile *v);
285 static int32 Decrement32(int32
volatile *v);
286 static int32 CompareAndSwap32(int32
volatile *target, int32 v1, int32 v2);
287 static int64 CompareAndSwap64(int64
volatile *target, int64 v1, int64 v2);
289 static int32 Swap32(int32
volatile *target, int32 v);
290 static int64 Swap64(int64
volatile *target, int64 v);
293 static int64 Increment64(int64
volatile *v);
294 static int64 Decrement64(int64
volatile *v);
295 static int32 Add32(int32
volatile *target, int32 v);
296 static int64 Add64(int64
volatile *target, int64 v);
300 uint8 core_dll BSR(word data);
305 int32
volatile count_;
306 const int32 maxCount_;
316 static int32 StartsWith(
const std::string &s,
const std::string &str);
317 static int32 EndsWith(
const std::string &s,
const std::string &str);
318 static void MakeUpper(std::string &str);
319 static void MakeLower(std::string &str);
320 static void Trim(std::string& str,
const char* chars2remove =
" ");
321 static void TrimLeft(std::string& str,
const char* chars2remove =
" ");
322 static void TrimRight(std::string& str,
const char* chars2remove =
" ");
323 static void ReplaceLeading(std::string& str,
const char* chars2replace,
char c);
328 static int32 r250_index_;
329 static int32 r521_index_;
330 static uint32 r250_buffer_[R250_LEN];
331 static uint32 r521_buffer_[R521_LEN];
335 float32 operator ()(uint32 range);
339 #include "utils.tpl.cpp"