- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
class AnotherDammLoggerClass {
public:
// ...
static inline char *strtime()
{
// method is twice as fast as strftime)
static const int ASCII_OFFSET=48;
static char buffer[32]="";
struct timeval tv;
struct tm *lt;
if ( 0 == gettimeofday(&tv,NULL) )
{
lt=localtime(&tv.tv_sec);
int i=0;
/* year */
buffer[i++]=(lt->tm_year%100/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_year%10)+ASCII_OFFSET;
/* month */
buffer[i++]=((lt->tm_mon+1)/10)+ASCII_OFFSET;
buffer[i++]=((lt->tm_mon+1)%10)+ASCII_OFFSET;
/* day */
buffer[i++]=(lt->tm_mday/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_mday%10)+ASCII_OFFSET;
/* separator */
buffer[i++]='.';
/* hours */
buffer[i++]=(lt->tm_hour/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_hour%10)+ASCII_OFFSET;
/* minutes */
buffer[i++]=(lt->tm_min/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_min%10)+ASCII_OFFSET;
/* seconds */
buffer[i++]=(lt->tm_sec/10)+ASCII_OFFSET;
buffer[i++]=(lt->tm_sec%10)+ASCII_OFFSET;
/* separator */
buffer[i++]='.';
/* microseconds */
buffer[i++]=(((tv.tv_usec)%1000000)/100000)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%100000)/10000)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%10000)/1000)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%1000)/100)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%100)/10)+ASCII_OFFSET;
buffer[i++]=(((tv.tv_usec)%10))+ASCII_OFFSET;
/* delimiter */
buffer[i++]=(char)0;
}
else
{
strcpy(buffer, "<no time>");
}
return buffer;
}
// ....
}
оптимизируем производительность. коммент "twice as fast as strftime" порадовал: вместо того что бы редундантные вызовы поубирать, давайте ручками перепишем. для пущей красоты сделано inline (и еще скапипазджено в три других места проекта).
потому что в логгере strftime() наверное жутко тормозил - например по сравненю с записью сообщений на диск.......
ctm 24.05.2011 05:43 # +1
interested 24.05.2011 13:14 # +2
В душе он математик, алгоритмы и машина Поста ему ближе инженерии. Но... Жизнь сложилась так, что он попал на место именно инженера-кодера, что и привело к противоречивому результату.
Однако, люди "на своём месте" встречаются настолько редко, что подобный "пируэт" -- совершенно нормально.
Lure Of Chaos 24.05.2011 17:05 # 0
guest8 08.04.2019 20:50 # −999
guest8 08.04.2019 21:09 # −999
guest8 09.04.2019 10:49 # −999
guest8 09.04.2019 17:57 # −999
guest8 09.04.2019 17:58 # −999