HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
charconv.hpp
1// Copyright Take Vos 2020.
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 "required.hpp"
8#include <concepts>
9#include <charconv>
10
11namespace hi::inline 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_axiom(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_axiom(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
This file includes required definitions.
#define hilet
Invariant should be the default for variables.
Definition required.hpp:23
T back_inserter(T... args)
T copy(T... args)
T data(T... args)
T size(T... args)
T to_string(T... args)