1/* 2 * Copyright 2009-2012, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef TIME_UTILS_H 6#define TIME_UTILS_H 7 8 9#include <stdio.h> 10 11 12struct decomposed_bigtime { 13 nanotime_t hours; 14 int minutes; 15 int seconds; 16 int micros; 17}; 18 19 20struct decomposed_nanotime { 21 nanotime_t hours; 22 int minutes; 23 int seconds; 24 int nanos; 25}; 26 27 28static void 29decompose_time(bigtime_t time, decomposed_bigtime& decomposed) 30{ 31 // nanosecs 32 decomposed.micros = time % 1000000; 33 time /= 1000000; 34 // secs 35 decomposed.seconds = time % 60; 36 time /= 60; 37 // mins 38 decomposed.minutes = time % 60; 39 time /= 60; 40 // hours 41 decomposed.hours = time; 42} 43 44 45static void 46decompose_time(nanotime_t time, decomposed_nanotime& decomposed) 47{ 48 // nanosecs 49 decomposed.nanos = time % 1000000000; 50 time /= 1000000000; 51 // secs 52 decomposed.seconds = time % 60; 53 time /= 60; 54 // mins 55 decomposed.minutes = time % 60; 56 time /= 60; 57 // hours 58 decomposed.hours = time; 59} 60 61 62static inline const char* 63format_bigtime(bigtime_t time, char* buffer, size_t bufferSize) 64{ 65 decomposed_bigtime decomposed; 66 decompose_time(time, decomposed); 67 68 snprintf(buffer, bufferSize, "%02" B_PRId64 ":%02d:%02d:%06d", 69 decomposed.hours, decomposed.minutes, decomposed.seconds, 70 decomposed.micros); 71 return buffer; 72} 73 74 75static inline BString 76format_bigtime(bigtime_t time) 77{ 78 char buffer[64]; 79 format_bigtime(time, buffer, sizeof(buffer)); 80 return BString(buffer); 81} 82 83 84static inline const char* 85format_nanotime(nanotime_t time, char* buffer, size_t bufferSize) 86{ 87 decomposed_nanotime decomposed; 88 decompose_time(time, decomposed); 89 90 snprintf(buffer, bufferSize, "%02" B_PRId64 ":%02d:%02d:%09d", 91 decomposed.hours, decomposed.minutes, decomposed.seconds, 92 decomposed.nanos); 93 return buffer; 94} 95 96 97static inline BString 98format_nanotime(nanotime_t time) 99{ 100 char buffer[64]; 101 format_nanotime(time, buffer, sizeof(buffer)); 102 return BString(buffer); 103} 104 105 106#endif // TIME_UTILS_H 107