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 21 _LIBCPP_EXPORTED_FROM_ABI char* 22 __u32toa(uint32_t value, char* buffer) noexcept 23 { 24 return __base_10_u32(buffer, value); 25 } 26 27 _LIBCPP_EXPORTED_FROM_ABI char* 28 __u64toa(uint64_t value, char* buffer) noexcept 29 { 30 return __base_10_u64(buffer, value); 31 } 32 33 } // namespace __itoa 34 35 #endif // _LIBCPP_ABI_DO_NOT_EXPORT_TO_CHARS_BASE_10 36 37 // The original version of floating-point to_chars was written by Microsoft and 38 // contributed with the following license. 39 40 // Copyright (c) Microsoft Corporation. 41 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 42 43 // This implementation is dedicated to the memory of Mary and Thavatchai. 44 45 to_chars_result to_chars(char* __first, char* __last, float __value) { 46 return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(__first, __last, __value, chars_format{}, 0); 47 } 48 49 to_chars_result to_chars(char* __first, char* __last, double __value) { 50 return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(__first, __last, __value, chars_format{}, 0); 51 } 52 53 to_chars_result to_chars(char* __first, char* __last, long double __value) { 54 return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(__first, __last, static_cast<double>(__value), 55 chars_format{}, 0); 56 } 57 58 to_chars_result to_chars(char* __first, char* __last, float __value, chars_format __fmt) { 59 return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(__first, __last, __value, __fmt, 0); 60 } 61 62 to_chars_result to_chars(char* __first, char* __last, double __value, chars_format __fmt) { 63 return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(__first, __last, __value, __fmt, 0); 64 } 65 66 to_chars_result to_chars(char* __first, char* __last, long double __value, chars_format __fmt) { 67 return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(__first, __last, static_cast<double>(__value), 68 __fmt, 0); 69 } 70 71 to_chars_result to_chars(char* __first, char* __last, float __value, chars_format __fmt, int __precision) { 72 return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>(__first, __last, __value, __fmt, 73 __precision); 74 } 75 76 to_chars_result to_chars(char* __first, char* __last, double __value, chars_format __fmt, int __precision) { 77 return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>(__first, __last, __value, __fmt, 78 __precision); 79 } 80 81 to_chars_result to_chars(char* __first, char* __last, long double __value, chars_format __fmt, int __precision) { 82 return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>( 83 __first, __last, static_cast<double>(__value), __fmt, __precision); 84 } 85 86 _LIBCPP_END_NAMESPACE_STD 87