1 | //===----------------------------------------------------------------------===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | // See https://llvm.org/LICENSE.txt for license information. |
5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | // |
7 | //===----------------------------------------------------------------------===// |
8 | |
9 | #include <charconv> |
10 | #include <string.h> |
11 | |
12 | #include "include/to_chars_floating_point.h" |
13 | |
14 | _LIBCPP_BEGIN_NAMESPACE_STD |
15 | |
16 | #ifndef _LIBCPP_ABI_DO_NOT_EXPORT_TO_CHARS_BASE_10 |
17 | |
18 | namespace __itoa { |
19 | |
20 | _LIBCPP_EXPORTED_FROM_ABI char* __u32toa(uint32_t value, char* buffer) noexcept { return __base_10_u32(buffer, value); } |
21 | |
22 | _LIBCPP_EXPORTED_FROM_ABI char* __u64toa(uint64_t value, char* buffer) noexcept { return __base_10_u64(buffer, value); } |
23 | |
24 | } // namespace __itoa |
25 | |
26 | #endif // _LIBCPP_ABI_DO_NOT_EXPORT_TO_CHARS_BASE_10 |
27 | |
28 | // The original version of floating-point to_chars was written by Microsoft and |
29 | // contributed with the following license. |
30 | |
31 | // Copyright (c) Microsoft Corporation. |
32 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
33 | |
34 | // This implementation is dedicated to the memory of Mary and Thavatchai. |
35 | |
36 | to_chars_result to_chars(char* __first, char* __last, float __value) { |
37 | return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(__first, __last, __value, chars_format{}, 0); |
38 | } |
39 | |
40 | to_chars_result to_chars(char* __first, char* __last, double __value) { |
41 | return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(__first, __last, __value, chars_format{}, 0); |
42 | } |
43 | |
44 | to_chars_result to_chars(char* __first, char* __last, long double __value) { |
45 | return _Floating_to_chars<_Floating_to_chars_overload::_Plain>( |
46 | __first, __last, static_cast<double>(__value), chars_format{}, 0); |
47 | } |
48 | |
49 | to_chars_result to_chars(char* __first, char* __last, float __value, chars_format __fmt) { |
50 | return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(__first, __last, __value, __fmt, 0); |
51 | } |
52 | |
53 | to_chars_result to_chars(char* __first, char* __last, double __value, chars_format __fmt) { |
54 | return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(__first, __last, __value, __fmt, 0); |
55 | } |
56 | |
57 | to_chars_result to_chars(char* __first, char* __last, long double __value, chars_format __fmt) { |
58 | return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>( |
59 | __first, __last, static_cast<double>(__value), __fmt, 0); |
60 | } |
61 | |
62 | to_chars_result to_chars(char* __first, char* __last, float __value, chars_format __fmt, int __precision) { |
63 | return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>( |
64 | __first, __last, __value, __fmt, __precision); |
65 | } |
66 | |
67 | to_chars_result to_chars(char* __first, char* __last, double __value, chars_format __fmt, int __precision) { |
68 | return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>( |
69 | __first, __last, __value, __fmt, __precision); |
70 | } |
71 | |
72 | to_chars_result to_chars(char* __first, char* __last, long double __value, chars_format __fmt, int __precision) { |
73 | return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>( |
74 | __first, __last, static_cast<double>(__value), __fmt, __precision); |
75 | } |
76 | |
77 | _LIBCPP_END_NAMESPACE_STD |
78 | |