1// Copyright Antony Polukhin, 2016-2024.
2//
3// Distributed under the Boost Software License, Version 1.0. (See
4// accompanying file LICENSE_1_0.txt or copy at
5// http://www.boost.org/LICENSE_1_0.txt)
6
7#ifndef BOOST_STACKTRACE_DETAIL_TO_DEC_ARRAY_HPP
8#define BOOST_STACKTRACE_DETAIL_TO_DEC_ARRAY_HPP
9
10#include <boost/config.hpp>
11#ifdef BOOST_HAS_PRAGMA_ONCE
12# pragma once
13#endif
14
15#include <array>
16#include <cstddef> // std::size_t
17
18namespace boost { namespace stacktrace { namespace detail {
19
20// We do not use boost::lexical_cast in this function to reduce module dependencies
21inline std::array<char, 40> to_dec_array(std::size_t value) noexcept {
22 std::array<char, 40> ret;
23 if (!value) {
24 ret[0] = '0';
25 ret[1] = '\0';
26 return ret;
27 }
28
29 std::size_t digits = 0;
30 for (std::size_t value_copy = value; value_copy; value_copy /= 10) {
31 ++ digits;
32 }
33
34 for (std::size_t i = 1; i <= digits; ++i) {
35 ret[digits - i] = static_cast<char>('0' + (value % 10));
36 value /= 10;
37 }
38
39 ret[digits] = '\0';
40
41 return ret;
42}
43
44
45}}} // namespace boost::stacktrace::detail
46
47#endif // BOOST_STACKTRACE_DETAIL_TO_DEC_ARRAY_HPP
48

source code of boost/libs/stacktrace/include/boost/stacktrace/detail/to_dec_array.hpp