1218885Sdim//===-- TimeValue.cpp - Implement OS TimeValue Concept ----------*- C++ -*-===//
2218885Sdim//
3218885Sdim//                     The LLVM Compiler Infrastructure
4218885Sdim//
5218885Sdim// This file is distributed under the University of Illinois Open Source
6218885Sdim// License. See LICENSE.TXT for details.
7218885Sdim//
8218885Sdim//===----------------------------------------------------------------------===//
9218885Sdim//
10218885Sdim//  This file implements the operating system TimeValue concept.
11218885Sdim//
12218885Sdim//===----------------------------------------------------------------------===//
13218885Sdim
14218885Sdim#include "llvm/Support/TimeValue.h"
15218885Sdim#include "llvm/Config/config.h"
16218885Sdim
17218885Sdimnamespace llvm {
18296417Sdim
19218885Sdimusing namespace sys;
20218885Sdim
21249423Sdimconst TimeValue::SecondsType
22249423Sdim  TimeValue::PosixZeroTimeSeconds = -946684800;
23249423Sdimconst TimeValue::SecondsType
24249423Sdim  TimeValue::Win32ZeroTimeSeconds = -12591158400ULL;
25249423Sdim
26296417Sdimvoid TimeValue::normalize() {
27218885Sdim  if ( nanos_ >= NANOSECONDS_PER_SECOND ) {
28218885Sdim    do {
29218885Sdim      seconds_++;
30218885Sdim      nanos_ -= NANOSECONDS_PER_SECOND;
31218885Sdim    } while ( nanos_ >= NANOSECONDS_PER_SECOND );
32218885Sdim  } else if (nanos_ <= -NANOSECONDS_PER_SECOND ) {
33218885Sdim    do {
34218885Sdim      seconds_--;
35218885Sdim      nanos_ += NANOSECONDS_PER_SECOND;
36218885Sdim    } while (nanos_ <= -NANOSECONDS_PER_SECOND);
37218885Sdim  }
38218885Sdim
39218885Sdim  if (seconds_ >= 1 && nanos_ < 0) {
40218885Sdim    seconds_--;
41218885Sdim    nanos_ += NANOSECONDS_PER_SECOND;
42218885Sdim  } else if (seconds_ < 0 && nanos_ > 0) {
43218885Sdim    seconds_++;
44218885Sdim    nanos_ -= NANOSECONDS_PER_SECOND;
45218885Sdim  }
46218885Sdim}
47218885Sdim
48296417Sdim} // namespace llvm
49218885Sdim
50276479Sdim/// Include the platform-specific portion of TimeValue class
51218885Sdim#ifdef LLVM_ON_UNIX
52218885Sdim#include "Unix/TimeValue.inc"
53218885Sdim#endif
54218885Sdim#ifdef LLVM_ON_WIN32
55218885Sdim#include "Windows/TimeValue.inc"
56218885Sdim#endif
57