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