mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
core: add functions to core/time.c
To support the new filter code, add helper functions that turn timestamps into year and day-of-week to core/time.c. Internally, these functions simply call utc_mktime() to break down the timestamp and then extract the wanted value. This may appear inefficient, but testing shows that modern compilers are quite effective in throwing away the unneeded calculations. FWIW in this respect clang10 outperformed gcc10. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
efdc875aa3
commit
0f4154bacc
2 changed files with 32 additions and 0 deletions
|
@ -11,6 +11,8 @@ extern "C" {
|
|||
|
||||
extern timestamp_t utc_mktime(struct tm *tm);
|
||||
extern void utc_mkdate(timestamp_t, struct tm *tm);
|
||||
extern int utc_year(timestamp_t timestamp);
|
||||
extern int utc_weekday(timestamp_t timestamp);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
30
core/time.c
30
core/time.c
|
@ -133,3 +133,33 @@ timestamp_t utc_mktime(struct tm *tm)
|
|||
|
||||
return when - EPOCH_OFFSET;
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract year from 64-bit timestamp.
|
||||
*
|
||||
* This looks inefficient, since it breaks down into a full
|
||||
* struct tm. However, modern compilers are effective at throwing
|
||||
* out unused calculations. If it turns out to be a bottle neck
|
||||
* we will have to cache a struct tm per dive.
|
||||
*/
|
||||
int utc_year(timestamp_t timestamp)
|
||||
{
|
||||
struct tm tm;
|
||||
utc_mkdate(timestamp, &tm);
|
||||
return tm.tm_year;
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract day of week from 64-bit timestamp.
|
||||
* Returns 0-6, whereby 0 is Sunday and 6 is Saturday.
|
||||
*
|
||||
* Same comment as for utc_year(): Modern compilers are good
|
||||
* at throwing out unused calculations, so this is more efficient
|
||||
* than it looks.
|
||||
*/
|
||||
int utc_weekday(timestamp_t timestamp)
|
||||
{
|
||||
struct tm tm;
|
||||
utc_mkdate(timestamp, &tm);
|
||||
return tm.tm_wday;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue