TimeValue.cpp revision 37ed9c199ca639565f6ce88105f9e39e898d82d0
1//===-- TimeValue.cpp - Implement OS TimeValue Concept ----------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  This file implements the operating system TimeValue concept.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/Support/TimeValue.h"
15#include "llvm/Config/config.h"
16
17namespace llvm {
18using namespace sys;
19
20const TimeValue::SecondsType
21  TimeValue::PosixZeroTimeSeconds = -946684800;
22const TimeValue::SecondsType
23  TimeValue::Win32ZeroTimeSeconds = -12591158400ULL;
24
25void
26TimeValue::normalize( void ) {
27  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
48}
49
50/// Include the platform-specific portion of TimeValue class
51#ifdef LLVM_ON_UNIX
52#include "Unix/TimeValue.inc"
53#endif
54#ifdef LLVM_ON_WIN32
55#include "Windows/TimeValue.inc"
56#endif
57