TimeValue.cpp revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
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
25const TimeValue TimeValue::MinTime       = TimeValue ( INT64_MIN,0 );
26const TimeValue TimeValue::MaxTime       = TimeValue ( INT64_MAX,0 );
27const TimeValue TimeValue::ZeroTime      = TimeValue ( 0,0 );
28const TimeValue TimeValue::PosixZeroTime = TimeValue ( PosixZeroTimeSeconds,0 );
29const TimeValue TimeValue::Win32ZeroTime = TimeValue ( Win32ZeroTimeSeconds,0 );
30
31void
32TimeValue::normalize( void ) {
33  if ( nanos_ >= NANOSECONDS_PER_SECOND ) {
34    do {
35      seconds_++;
36      nanos_ -= NANOSECONDS_PER_SECOND;
37    } while ( nanos_ >= NANOSECONDS_PER_SECOND );
38  } else if (nanos_ <= -NANOSECONDS_PER_SECOND ) {
39    do {
40      seconds_--;
41      nanos_ += NANOSECONDS_PER_SECOND;
42    } while (nanos_ <= -NANOSECONDS_PER_SECOND);
43  }
44
45  if (seconds_ >= 1 && nanos_ < 0) {
46    seconds_--;
47    nanos_ += NANOSECONDS_PER_SECOND;
48  } else if (seconds_ < 0 && nanos_ > 0) {
49    seconds_++;
50    nanos_ -= NANOSECONDS_PER_SECOND;
51  }
52}
53
54}
55
56/// Include the platform-specific portion of TimeValue class
57#ifdef LLVM_ON_UNIX
58#include "Unix/TimeValue.inc"
59#endif
60#ifdef LLVM_ON_WIN32
61#include "Windows/TimeValue.inc"
62#endif
63