| /** | |
| * D header file for POSIX. | |
| * | |
| * Copyright: Copyright Sociomantic Labs GmbH. | |
| * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). | |
| * Authors: Leandro Lucarella | |
| */ | |
| /* Copyright Sociomantic Labs GmbH. | |
| * Distributed under the Boost Software License, Version 1.0. | |
| * (See accompanying file LICENSE or copy at | |
| * http://www.boost.org/LICENSE_1_0.txt) | |
| */ | |
| module core.sys.linux.sys.time; | |
| import core.sys.linux.config; | |
| public import core.sys.posix.sys.time; // timeval | |
| version (linux): | |
| /* macros provided to operate on timeval structures | |
| * they are extern(D) because they are not really C symbols, just macros | |
| */ | |
| extern (D) pure @safe @nogc nothrow { | |
| void timeradd(const timeval* a, const timeval* b, | |
| timeval* result) | |
| { | |
| result.tv_sec = a.tv_sec + b.tv_sec; | |
| result.tv_usec = a.tv_usec + b.tv_usec; | |
| if (result.tv_usec >= 1_000_000) | |
| { | |
| ++result.tv_sec; | |
| result.tv_usec -= 1_000_000; | |
| } | |
| } | |
| void timersub(const timeval* a, const timeval* b, | |
| timeval *result) | |
| { | |
| result.tv_sec = a.tv_sec - b.tv_sec; | |
| result.tv_usec = a.tv_usec - b.tv_usec; | |
| if (result.tv_usec < 0) { | |
| --result.tv_sec; | |
| result.tv_usec += 1_000_000; | |
| } | |
| } | |
| void timerclear(timeval* tvp) | |
| { | |
| (tvp.tv_sec = tvp.tv_usec = 0); | |
| } | |
| int timerisset(timeval* tvp) | |
| { | |
| return cast(int) (tvp.tv_sec || tvp.tv_usec); | |
| } | |
| int timercmp(string CMP)(const timeval* a, const timeval* b) | |
| { | |
| return cast(int) | |
| mixin("((a.tv_sec == b.tv_sec) ?" ~ | |
| "(a.tv_usec" ~ CMP ~ "b.tv_usec) :" ~ | |
| "(a.tv_sec" ~ CMP ~ "b.tv_sec))"); | |
| } | |
| } |