summaryrefslogtreecommitdiff
path: root/asl/strings/parse_number.hpp
blob: fae08412ce2582e0ca371b1a5c5f60c02cf43195 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Copyright 2025 Steven Le Rouzic
//
// SPDX-License-Identifier: BSD-3-Clause

#pragma once

#include "asl/types/status_or.hpp"
#include "asl/strings/string_view.hpp"

namespace asl
{

template<typename T>
struct parse_number_result
{
    T value;
    string_view remaining;
};

status_or<parse_number_result<float>>  parse_float(string_view);
status_or<parse_number_result<double>> parse_double(string_view);

status_or<parse_number_result<uint8_t>>  parse_uint8(string_view, int base = 10);
status_or<parse_number_result<uint16_t>> parse_uint16(string_view, int base = 10);
status_or<parse_number_result<uint32_t>> parse_uint32(string_view, int base = 10);
status_or<parse_number_result<uint64_t>> parse_uint64(string_view, int base = 10);

status_or<parse_number_result<int8_t>>  parse_int8(string_view, int base = 10);
status_or<parse_number_result<int16_t>> parse_int16(string_view, int base = 10);
status_or<parse_number_result<int32_t>> parse_int32(string_view, int base = 10);
status_or<parse_number_result<int64_t>> parse_int64(string_view, int base = 10);

} // namespace asl