]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/Support/Chrono.h
Merge llvm, clang, compiler-rt, libc++, lld and lldb release_40 branch
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / Support / Chrono.h
1 //===- llvm/Support/Chrono.h - Utilities for Timing Manipulation-*- 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 #ifndef LLVM_SUPPORT_CHRONO_H
11 #define LLVM_SUPPORT_CHRONO_H
12
13 #include "llvm/Support/Compiler.h"
14
15 #include <chrono>
16 #include <ctime>
17
18 namespace llvm {
19
20 class raw_ostream;
21
22 namespace sys {
23
24 /// A time point on the system clock. This is provided for two reasons:
25 /// - to insulate us agains subtle differences in behavoir to differences in
26 ///   system clock precision (which is implementation-defined and differs between
27 ///   platforms).
28 /// - to shorten the type name
29 /// The default precision is nanoseconds. If need a specific precision specify
30 /// it explicitly. If unsure, use the default. If you need a time point on a
31 /// clock other than the system_clock, use std::chrono directly.
32 template <typename D = std::chrono::nanoseconds>
33 using TimePoint = std::chrono::time_point<std::chrono::system_clock, D>;
34
35 /// Convert a TimePoint to std::time_t
36 LLVM_ATTRIBUTE_ALWAYS_INLINE inline std::time_t toTimeT(TimePoint<> TP) {
37   using namespace std::chrono;
38   return system_clock::to_time_t(
39       time_point_cast<system_clock::time_point::duration>(TP));
40 }
41
42 /// Convert a std::time_t to a TimePoint
43 LLVM_ATTRIBUTE_ALWAYS_INLINE inline TimePoint<std::chrono::seconds>
44 toTimePoint(std::time_t T) {
45   using namespace std::chrono;
46   return time_point_cast<seconds>(system_clock::from_time_t(T));
47 }
48
49 } // namespace sys
50
51 raw_ostream &operator<<(raw_ostream &OS, sys::TimePoint<> TP);
52
53 } // namespace llvm
54
55 #endif // LLVM_SUPPORT_CHRONO_H