1 // Copyright 2020 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UTIL_CHRONO_HELPERS_H_ 6 #define UTIL_CHRONO_HELPERS_H_ 7 8 #include <chrono> 9 10 // This file is a collection of helpful utilities and using statement for 11 // working with std::chrono. In practice we previously defined these frequently, 12 // this header allows for a single set of convenience statements. 13 namespace openscreen { 14 15 using hours = std::chrono::hours; 16 using microseconds = std::chrono::microseconds; 17 using milliseconds = std::chrono::milliseconds; 18 using nanoseconds = std::chrono::nanoseconds; 19 using seconds = std::chrono::seconds; 20 21 // Casting statements. Note that duration_cast is not a type, it's a function, 22 // so its behavior is different than the using statements above. 23 template <typename D> to_hours(D d)24static constexpr hours to_hours(D d) { 25 return std::chrono::duration_cast<hours>(d); 26 } 27 28 template <typename D> to_microseconds(D d)29static constexpr microseconds to_microseconds(D d) { 30 return std::chrono::duration_cast<microseconds>(d); 31 } 32 33 template <typename D> to_milliseconds(D d)34static constexpr milliseconds to_milliseconds(D d) { 35 return std::chrono::duration_cast<milliseconds>(d); 36 } 37 38 template <typename D> to_nanoseconds(D d)39static constexpr nanoseconds to_nanoseconds(D d) { 40 return std::chrono::duration_cast<nanoseconds>(d); 41 } 42 43 template <typename D> to_seconds(D d)44static constexpr seconds to_seconds(D d) { 45 return std::chrono::duration_cast<seconds>(d); 46 } 47 48 } // namespace openscreen 49 50 #endif // UTIL_CHRONO_HELPERS_H_ 51