HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
charconv.hpp
1// Copyright Take Vos 2020-2022.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "utility.hpp"
8#include <concepts>
9#include <charconv>
10
11namespace hi { inline namespace v1 {
12
19template<std::integral T>
20[[nodiscard]] std::string to_string(T const &value) noexcept
21{
23
24 hilet first = buffer.data();
25 hilet last = first + buffer.size();
26
27 hilet[new_last, ec] = std::to_chars(first, last, value);
28 hi_assert(ec == std::errc{});
29
30 auto r = std::string{};
31 std::copy(first, new_last, std::back_inserter(r));
32 return r;
33}
34
41template<std::floating_point T>
42[[nodiscard]] std::string to_string(T const &value) noexcept
43{
45
46 hilet first = buffer.data();
47 hilet last = first + buffer.size();
48
49 hilet[new_last, ec] = std::to_chars(first, last, value, std::chars_format::general);
50 hi_assert(ec == std::errc{});
51
52 auto r = std::string{};
53 std::copy(first, new_last, std::back_inserter(r));
54 return r;
55}
56
65template<std::integral T>
66[[nodiscard]] T from_string(std::string_view str, int base = 10)
67{
68 auto value = T{};
69
70 hilet first = str.data();
71 hilet last = first + ssize(str);
72
73 hilet[new_last, ec] = std::from_chars(first, last, value, base);
74 if (ec != std::errc{} or new_last != last) {
75 throw parse_error("Can not convert string to integer");
76 }
77
78 return value;
79}
80
88template<std::floating_point T>
89[[nodiscard]] T from_string(std::string_view str)
90{
91 T value;
92
93 hilet first = str.data();
94 hilet last = first + ssize(str);
95
96 hilet[new_last, ec] = std::from_chars(first, last, value);
97 if (ec != std::errc{} or new_last != last) {
98 throw parse_error("Can not convert string to floating point");
99 }
100
101 return value;
102}
103
104}} // namespace hi::inline v1
#define hi_assert(expression)
Assert if expression is true.
Definition assert.hpp:86
Utilities used by the HikoGUI library itself.
#define hilet
Invariant should be the default for variables.
Definition utility.hpp:23
constexpr std::string to_string(std::u32string_view rhs) noexcept
Conversion from UTF-32 to UTF-8.
Definition to_string.hpp:215
DOXYGEN BUG.
Definition algorithm.hpp:15
The HikoGUI namespace.
Definition ascii.hpp:19
T from_string(std::string_view str, int base=10)
Convert a string to an integer.
Definition charconv.hpp:66
Exception thrown during parsing on an error.
Definition exception.hpp:58
T back_inserter(T... args)
T copy(T... args)
T data(T... args)
T size(T... args)