TimeValue.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. #include "llvm/Support/TimeValue.h"
  14. #include "llvm/Config/config.h"
  15. namespace llvm {
  16. using namespace sys;
  17. const TimeValue::SecondsType
  18. TimeValue::PosixZeroTimeSeconds = -946684800;
  19. const TimeValue::SecondsType
  20. TimeValue::Win32ZeroTimeSeconds = -12591158400ULL;
  21. void TimeValue::normalize() {
  22. if ( nanos_ >= NANOSECONDS_PER_SECOND ) {
  23. do {
  24. seconds_++;
  25. nanos_ -= NANOSECONDS_PER_SECOND;
  26. } while ( nanos_ >= NANOSECONDS_PER_SECOND );
  27. } else if (nanos_ <= -NANOSECONDS_PER_SECOND ) {
  28. do {
  29. seconds_--;
  30. nanos_ += NANOSECONDS_PER_SECOND;
  31. } while (nanos_ <= -NANOSECONDS_PER_SECOND);
  32. }
  33. if (seconds_ >= 1 && nanos_ < 0) {
  34. seconds_--;
  35. nanos_ += NANOSECONDS_PER_SECOND;
  36. } else if (seconds_ < 0 && nanos_ > 0) {
  37. seconds_++;
  38. nanos_ -= NANOSECONDS_PER_SECOND;
  39. }
  40. }
  41. } // namespace llvm
  42. /// Include the platform-specific portion of TimeValue class
  43. #ifdef LLVM_ON_UNIX
  44. #include "Unix/TimeValue.inc"
  45. #endif
  46. #ifdef LLVM_ON_WIN32
  47. #include "Windows/TimeValue.inc"
  48. #endif