Files
libsst/libsst-concurrency/timespecadd.h
2026-04-03 00:22:39 -05:00

46 lines
1.1 KiB
C

/*
timespecadd.h
Author: Patrick Baggett <ptbaggett@762studios.com>
Created: 4/11/2012
Purpose:
Inline code for adding struct timespec, common in UNIX APIs.
License:
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
*/
#pragma once
#ifndef _SST_CONCURRENCY_TIMESPECADD_H
#define _SST_CONCURRENCY_TIMESPECADD_H
#include <SST/SST_Build.h> /* INLINE definition */
/*
Compute t1 += t2 in a way that UNIX doesn't bitch. Adding the
tv_nsec fields is bad when they exceed 1B nsec (i.e. 1 sec), so
one must add and then check for overflow. Assumed that t1, t2
have tv_nsec fields that are each < 1e9
*/
static INLINE void _sst_add_timespec(struct timespec* t1, const struct timespec* t2)
{
t1->tv_sec += t2->tv_sec;
t1->tv_nsec += t2->tv_nsec;
if(t1->tv_nsec > 1000000000)
{
t1->tv_nsec -= 1000000000;
t1->tv_sec += 1;
}
}
#endif