| //===- llvm/Support/Chrono.h - Utilities for Timing Manipulation-*- C++ -*-===// | 
 | // | 
 | //                     The LLVM Compiler Infrastructure | 
 | // | 
 | // This file is distributed under the University of Illinois Open Source | 
 | // License. See LICENSE.TXT for details. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 |  | 
 | #ifndef LLVM_SUPPORT_CHRONO_H | 
 | #define LLVM_SUPPORT_CHRONO_H | 
 |  | 
 | #include "llvm/Support/Compiler.h" | 
 |  | 
 | #include <chrono> | 
 | #include <ctime> | 
 |  | 
 | namespace llvm { | 
 |  | 
 | class raw_ostream; | 
 |  | 
 | namespace sys { | 
 |  | 
 | /// A time point on the system clock. This is provided for two reasons: | 
 | /// - to insulate us agains subtle differences in behavoir to differences in | 
 | ///   system clock precision (which is implementation-defined and differs between | 
 | ///   platforms). | 
 | /// - to shorten the type name | 
 | /// The default precision is nanoseconds. If need a specific precision specify | 
 | /// it explicitly. If unsure, use the default. If you need a time point on a | 
 | /// clock other than the system_clock, use std::chrono directly. | 
 | template <typename D = std::chrono::nanoseconds> | 
 | using TimePoint = std::chrono::time_point<std::chrono::system_clock, D>; | 
 |  | 
 | /// Convert a TimePoint to std::time_t | 
 | LLVM_ATTRIBUTE_ALWAYS_INLINE inline std::time_t toTimeT(TimePoint<> TP) { | 
 |   using namespace std::chrono; | 
 |   return system_clock::to_time_t( | 
 |       time_point_cast<system_clock::time_point::duration>(TP)); | 
 | } | 
 |  | 
 | /// Convert a std::time_t to a TimePoint | 
 | LLVM_ATTRIBUTE_ALWAYS_INLINE inline TimePoint<std::chrono::seconds> | 
 | toTimePoint(std::time_t T) { | 
 |   using namespace std::chrono; | 
 |   return time_point_cast<seconds>(system_clock::from_time_t(T)); | 
 | } | 
 |  | 
 | } // namespace sys | 
 |  | 
 | raw_ostream &operator<<(raw_ostream &OS, sys::TimePoint<> TP); | 
 |  | 
 | } // namespace llvm | 
 |  | 
 | #endif // LLVM_SUPPORT_CHRONO_H |