blob: 94a4c011693c6df834bfba5dc80a8d24d07b5740 [file] [log] [blame]
Reid Spencerca141a52004-09-24 23:25:19 +00001//===-- TimeValue.cpp - Implement OS TimeValue Concept ----------*- C++ -*-===//
Misha Brukman10468d82005-04-21 22:55:34 +00002//
Reid Spencerca141a52004-09-24 23:25:19 +00003// The LLVM Compiler Infrastructure
4//
Chris Lattnerf3ebc3f2007-12-29 20:36:04 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Misha Brukman10468d82005-04-21 22:55:34 +00007//
Reid Spencerca141a52004-09-24 23:25:19 +00008//===----------------------------------------------------------------------===//
9//
10// This file implements the operating system TimeValue concept.
11//
12//===----------------------------------------------------------------------===//
13
Michael J. Spencer447762d2010-11-29 18:16:10 +000014#include "llvm/Support/TimeValue.h"
Reid Spenceraf6d3d52004-12-27 06:16:38 +000015#include "llvm/Config/config.h"
Reid Spencerca141a52004-09-24 23:25:19 +000016
17namespace llvm {
Eugene Zelenkoffec81c2015-11-04 22:32:32 +000018
Reid Spencerca141a52004-09-24 23:25:19 +000019using namespace sys;
20
Alexey Samsonovf940f0c2013-02-19 11:35:39 +000021const TimeValue::SecondsType
22 TimeValue::PosixZeroTimeSeconds = -946684800;
23const TimeValue::SecondsType
24 TimeValue::Win32ZeroTimeSeconds = -12591158400ULL;
25
Eugene Zelenkoffec81c2015-11-04 22:32:32 +000026void TimeValue::normalize() {
Reid Spencerca141a52004-09-24 23:25:19 +000027 if ( nanos_ >= NANOSECONDS_PER_SECOND ) {
28 do {
29 seconds_++;
30 nanos_ -= NANOSECONDS_PER_SECOND;
31 } while ( nanos_ >= NANOSECONDS_PER_SECOND );
32 } else if (nanos_ <= -NANOSECONDS_PER_SECOND ) {
33 do {
34 seconds_--;
35 nanos_ += NANOSECONDS_PER_SECOND;
36 } while (nanos_ <= -NANOSECONDS_PER_SECOND);
37 }
38
39 if (seconds_ >= 1 && nanos_ < 0) {
40 seconds_--;
41 nanos_ += NANOSECONDS_PER_SECOND;
42 } else if (seconds_ < 0 && nanos_ > 0) {
43 seconds_++;
44 nanos_ -= NANOSECONDS_PER_SECOND;
45 }
46}
47
Eugene Zelenkoffec81c2015-11-04 22:32:32 +000048} // namespace llvm
Reid Spencerca141a52004-09-24 23:25:19 +000049
Alp Tokercf218752014-06-30 18:57:16 +000050/// Include the platform-specific portion of TimeValue class
Reid Spenceraf6d3d52004-12-27 06:16:38 +000051#ifdef LLVM_ON_UNIX
Reid Spencerc892a0d2005-01-09 23:29:00 +000052#include "Unix/TimeValue.inc"
Reid Spenceraf6d3d52004-12-27 06:16:38 +000053#endif
54#ifdef LLVM_ON_WIN32
Michael J. Spencer447762d2010-11-29 18:16:10 +000055#include "Windows/TimeValue.inc"
Reid Spenceraf6d3d52004-12-27 06:16:38 +000056#endif