.. _program_listing_file_include_rcpputils_time.hpp: Program Listing for File time.hpp ================================= |exhale_lsh| :ref:`Return to documentation for file ` (``include/rcpputils/time.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Copyright 2021 Open Source Robotics Foundation, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef RCPPUTILS__TIME_HPP_ #define RCPPUTILS__TIME_HPP_ #include namespace rcpputils { template std::chrono::nanoseconds convert_to_nanoseconds( const std::chrono::duration & time) { constexpr auto ns_max_as_double = std::chrono::duration_cast>( std::chrono::nanoseconds::max()); if (time > ns_max_as_double) { throw std::invalid_argument{ "time must be less than std::chrono::nanoseconds::max()"}; } constexpr auto ns_min_as_double = std::chrono::duration_cast>( std::chrono::nanoseconds::min()); if (time < ns_min_as_double) { throw std::invalid_argument{ "time must be bigger than std::chrono::nanoseconds::min()"}; } return std::chrono::duration_cast(time); } } // namespace rcpputils #endif // RCPPUTILS__TIME_HPP_