|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include "IZ_timer.h"
-
- #if defined IZ_WINDOWS
- typedef enum {
- _CLOCK_REALTIME = 0,
- #define CLOCK_REALTIME _CLOCK_REALTIME
- _CLOCK_MONOTONIC = 6,
- #define CLOCK_MONOTONIC _CLOCK_MONOTONIC
- } clockid_t;
-
- int clock_gettime(clockid_t __clock_id, struct timespec *__tp) {
- return timespec_get(__tp, TIME_UTC);
- }
- #endif
-
- /**
- * Gets the start timestamp.
- * @sa IZ_TIMER_START_TIMESTAMP
- */
- void IZ_TimerStart() {
- struct timespec t;
- clock_gettime(CLOCK_MONOTONIC, &t);
- IZ_TIMER_START_TIMESTAMP = t.tv_sec;
- }
-
- /**
- * Gets the number of microseconds since the application timer has been started.
- * @return The number of microseconds.
- * @sa IZ_TimerElapsed()
- */
- unsigned int IZ_TimerElapsedRaw() {
- struct timespec t;
- clock_gettime(CLOCK_MONOTONIC, &t);
- return (t.tv_sec - IZ_TIMER_START_TIMESTAMP) * 1000000 + (t.tv_nsec / 1000);
- }
-
- /**
- * Gets the formatted elapsed time since the application timer has been started.
- * @return The formatted elapsed time.
- * @sa IZ_TimerElapsedRaw()
- */
- char* IZ_TimerElapsed() {
- static char buffer[48];
- struct timespec t;
- clock_gettime(CLOCK_MONOTONIC, &t);
- unsigned int seconds = t.tv_sec - IZ_TIMER_START_TIMESTAMP;
- unsigned int milliseconds = t.tv_nsec / 1000000;
- unsigned int minutes = seconds / 60;
- unsigned int hours = seconds / 60 / 60;
- sprintf(buffer, "%02d:%02d:%02d.%03d", hours, minutes % 60, seconds % 60, milliseconds % 1000);
- return buffer;
- }
-
- /**
- * Gets the formatted time in the current instant.
- * @return The formatted time in the current instant.
- */
- char* IZ_TimerNow() {
- struct timespec t;
- clock_gettime(CLOCK_REALTIME, &t);
- static char buffer[48];
- unsigned int seconds = t.tv_sec;
- unsigned int milliseconds = t.tv_nsec / 1000000;
- static char formatted[32];
- time_t current_time = seconds;
- strftime(formatted, sizeof(formatted), "%Y-%m-%dT%H:%M:%S", gmtime(¤t_time));
- sprintf(buffer, "%s.%03dZ", formatted, milliseconds < 0 ? 0 : milliseconds % 1000);
- return buffer;
- }
-
- /**
- * Gets the formatted time in the current instant that can be safely added in file paths.
- * @return The formatted time in the current instant.
- */
- char* IZ_TimerNowPathSafe() {
- struct timespec t;
- clock_gettime(CLOCK_REALTIME, &t);
- static char buffer[48];
- unsigned int seconds = t.tv_sec;
- unsigned int milliseconds = t.tv_nsec / 1000000;
- static char formatted[32];
- time_t current_time = seconds;
- strftime(formatted, sizeof(formatted), "%Y%m%d%H%M%S", gmtime(¤t_time));
- sprintf(buffer, "%s%03d", formatted, milliseconds < 0 ? 0 : milliseconds % 1000);
- return buffer;
- }
|