diff options
Diffstat (limited to 'components/libc/cplusplus/cpp11/gcc/__utils.h')
| -rw-r--r-- | components/libc/cplusplus/cpp11/gcc/__utils.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/components/libc/cplusplus/cpp11/gcc/__utils.h b/components/libc/cplusplus/cpp11/gcc/__utils.h new file mode 100644 index 0000000000..f9a3c93796 --- /dev/null +++ b/components/libc/cplusplus/cpp11/gcc/__utils.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2021-04-27 flybreak the first version. + */ + +#pragma once + +#include <cstdlib> +#include <system_error> +#include <chrono> +#include <ratio> + +#include <rtthread.h> + +#define RT_USING_CPP_EXCEPTION + +inline void throw_system_error(int err, const char *what_msg) +{ +#ifdef RT_USING_CPP_EXCEPTION + throw std::system_error(std::error_code(err, std::system_category()), what_msg); +#else + (void)err; + (void)what_msg; + ::abort(); +#endif +} + +class tick_clock +{ +public: + typedef clock_t rep; + typedef std::ratio<1, RT_TICK_PER_SECOND> period; + + typedef std::chrono::duration<tick_clock::rep, tick_clock::period> duration; + typedef std::chrono::time_point<tick_clock> time_point; + + constexpr static bool is_ready = true; + + static time_point now(); +}; + +class real_time_clock +{ +public: + typedef std::chrono::nanoseconds duration; + typedef duration::rep rep; + typedef duration::period period; + typedef std::chrono::time_point<real_time_clock, duration> time_point; + + static constexpr bool is_steady = true; + + static time_point + now() noexcept; +}; |
