33#include "model/cutil.h"
35double round_msvc(
double x) {
return (floor(x + 0.5)); }
41long __stdcall MyUnhandledExceptionFilter(
42 struct _EXCEPTION_POINTERS *ExceptionInfo) {
45 switch (ExceptionInfo->ExceptionRecord->ExceptionCode) {
46 case EXCEPTION_FLT_DENORMAL_OPERAND:
47 case EXCEPTION_FLT_DIVIDE_BY_ZERO:
48 case EXCEPTION_FLT_INEXACT_RESULT:
49 case EXCEPTION_FLT_INVALID_OPERATION:
50 case EXCEPTION_FLT_OVERFLOW:
51 case EXCEPTION_FLT_STACK_CHECK:
52 case EXCEPTION_FLT_UNDERFLOW:
54 return EXCEPTION_CONTINUE_EXECUTION;
57 return EXCEPTION_CONTINUE_SEARCH;
64int mysnprintf(
char *buffer,
int count,
const char *format, ...) {
68 va_start(arg, format);
69 ret = _vsnprintf(buffer, count, format, arg);
76int NextPow2(
int size) {
87extern "C" int clock_gettime_monotonic(
struct timespec *tv) {
88 static LARGE_INTEGER ticksPerSec;
91 if (!ticksPerSec.QuadPart) {
92 QueryPerformanceFrequency(&ticksPerSec);
93 if (!ticksPerSec.QuadPart) {
99 QueryPerformanceCounter(&ticks);
101 tv->tv_sec = (long)(ticks.QuadPart / ticksPerSec.QuadPart);
102 tv->tv_nsec = (long)(((ticks.QuadPart % ticksPerSec.QuadPart) * 1e9) /
103 ticksPerSec.QuadPart);