haiku/src/apps/debuganalyzer/util/TimeUtils.h

107 lines
1.9 KiB
C

/*
* Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef TIME_UTILS_H
#define TIME_UTILS_H
#include <stdio.h>
struct decomposed_bigtime {
nanotime_t hours;
int minutes;
int seconds;
int micros;
};
struct decomposed_nanotime {
nanotime_t hours;
int minutes;
int seconds;
int nanos;
};
static void
decompose_time(bigtime_t time, decomposed_bigtime& decomposed)
{
// nanosecs
decomposed.micros = time % 1000000;
time /= 1000000;
// secs
decomposed.seconds = time % 60;
time /= 60;
// mins
decomposed.minutes = time % 60;
time /= 60;
// hours
decomposed.hours = time;
}
static void
decompose_time(nanotime_t time, decomposed_nanotime& decomposed)
{
// nanosecs
decomposed.nanos = time % 1000000000;
time /= 1000000000;
// secs
decomposed.seconds = time % 60;
time /= 60;
// mins
decomposed.minutes = time % 60;
time /= 60;
// hours
decomposed.hours = time;
}
static inline const char*
format_bigtime(bigtime_t time, char* buffer, size_t bufferSize)
{
decomposed_bigtime decomposed;
decompose_time(time, decomposed);
snprintf(buffer, bufferSize, "%02" B_PRId64 ":%02d:%02d:%06d",
decomposed.hours, decomposed.minutes, decomposed.seconds,
decomposed.micros);
return buffer;
}
static inline BString
format_bigtime(bigtime_t time)
{
char buffer[64];
format_bigtime(time, buffer, sizeof(buffer));
return BString(buffer);
}
static inline const char*
format_nanotime(nanotime_t time, char* buffer, size_t bufferSize)
{
decomposed_nanotime decomposed;
decompose_time(time, decomposed);
snprintf(buffer, bufferSize, "%02" B_PRId64 ":%02d:%02d:%09d",
decomposed.hours, decomposed.minutes, decomposed.seconds,
decomposed.nanos);
return buffer;
}
static inline BString
format_nanotime(nanotime_t time)
{
char buffer[64];
format_nanotime(time, buffer, sizeof(buffer));
return BString(buffer);
}
#endif // TIME_UTILS_H