1eb8650a7SLouis Dionne //===----------------------------------------------------------------------===// 2d2748964SZhihao Yuan // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6d2748964SZhihao Yuan // 7d2748964SZhihao Yuan //===----------------------------------------------------------------------===// 8d2748964SZhihao Yuan 9bbb0f2c7SArthur O'Dwyer #include <charconv> 10d2748964SZhihao Yuan #include <string.h> 11d2748964SZhihao Yuan 126c4267fbSMichael Jones #include "include/from_chars_floating_point.h" 13abb5dd6eSMark de Wever #include "include/to_chars_floating_point.h" 14abb5dd6eSMark de Wever 15d2748964SZhihao Yuan _LIBCPP_BEGIN_NAMESPACE_STD 16d2748964SZhihao Yuan 1789818f2dSMark de Wever #ifndef _LIBCPP_ABI_DO_NOT_EXPORT_TO_CHARS_BASE_10 1889818f2dSMark de Wever 199783f28cSLouis Dionne namespace __itoa { 20d2748964SZhihao Yuan 219783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI char* __u32toa(uint32_t value, char* buffer) noexcept { return __base_10_u32(buffer, value); } 22d2748964SZhihao Yuan 239783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI char* __u64toa(uint64_t value, char* buffer) noexcept { return __base_10_u64(buffer, value); } 24d2748964SZhihao Yuan 25d2748964SZhihao Yuan } // namespace __itoa 26d2748964SZhihao Yuan 2789818f2dSMark de Wever #endif // _LIBCPP_ABI_DO_NOT_EXPORT_TO_CHARS_BASE_10 2889818f2dSMark de Wever 29abb5dd6eSMark de Wever // The original version of floating-point to_chars was written by Microsoft and 30abb5dd6eSMark de Wever // contributed with the following license. 31abb5dd6eSMark de Wever 32abb5dd6eSMark de Wever // Copyright (c) Microsoft Corporation. 33abb5dd6eSMark de Wever // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 34abb5dd6eSMark de Wever 35abb5dd6eSMark de Wever // This implementation is dedicated to the memory of Mary and Thavatchai. 36abb5dd6eSMark de Wever 37abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, float __value) { 38abb5dd6eSMark de Wever return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(__first, __last, __value, chars_format{}, 0); 39abb5dd6eSMark de Wever } 40abb5dd6eSMark de Wever 41abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, double __value) { 42abb5dd6eSMark de Wever return _Floating_to_chars<_Floating_to_chars_overload::_Plain>(__first, __last, __value, chars_format{}, 0); 43abb5dd6eSMark de Wever } 44abb5dd6eSMark de Wever 45abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, long double __value) { 469783f28cSLouis Dionne return _Floating_to_chars<_Floating_to_chars_overload::_Plain>( 479783f28cSLouis Dionne __first, __last, static_cast<double>(__value), chars_format{}, 0); 48abb5dd6eSMark de Wever } 49abb5dd6eSMark de Wever 50abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, float __value, chars_format __fmt) { 51abb5dd6eSMark de Wever return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(__first, __last, __value, __fmt, 0); 52abb5dd6eSMark de Wever } 53abb5dd6eSMark de Wever 54abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, double __value, chars_format __fmt) { 55abb5dd6eSMark de Wever return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>(__first, __last, __value, __fmt, 0); 56abb5dd6eSMark de Wever } 57abb5dd6eSMark de Wever 58abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, long double __value, chars_format __fmt) { 599783f28cSLouis Dionne return _Floating_to_chars<_Floating_to_chars_overload::_Format_only>( 609783f28cSLouis Dionne __first, __last, static_cast<double>(__value), __fmt, 0); 61abb5dd6eSMark de Wever } 62abb5dd6eSMark de Wever 63abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, float __value, chars_format __fmt, int __precision) { 649783f28cSLouis Dionne return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>( 659783f28cSLouis Dionne __first, __last, __value, __fmt, __precision); 66abb5dd6eSMark de Wever } 67abb5dd6eSMark de Wever 68abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, double __value, chars_format __fmt, int __precision) { 699783f28cSLouis Dionne return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>( 709783f28cSLouis Dionne __first, __last, __value, __fmt, __precision); 71abb5dd6eSMark de Wever } 72abb5dd6eSMark de Wever 73abb5dd6eSMark de Wever to_chars_result to_chars(char* __first, char* __last, long double __value, chars_format __fmt, int __precision) { 74abb5dd6eSMark de Wever return _Floating_to_chars<_Floating_to_chars_overload::_Format_precision>( 75abb5dd6eSMark de Wever __first, __last, static_cast<double>(__value), __fmt, __precision); 76abb5dd6eSMark de Wever } 77abb5dd6eSMark de Wever 786c4267fbSMichael Jones template <class _Fp> 796c4267fbSMichael Jones __from_chars_result<_Fp> __from_chars_floating_point( 80*08159e6eSA. Jiang _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt) { 816c4267fbSMichael Jones return std::__from_chars_floating_point_impl<_Fp>(__first, __last, __fmt); 826c4267fbSMichael Jones } 836c4267fbSMichael Jones 846c4267fbSMichael Jones template __from_chars_result<float> __from_chars_floating_point( 85*08159e6eSA. Jiang _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt); 866c4267fbSMichael Jones 876c4267fbSMichael Jones template __from_chars_result<double> __from_chars_floating_point( 88*08159e6eSA. Jiang _LIBCPP_NOESCAPE const char* __first, _LIBCPP_NOESCAPE const char* __last, chars_format __fmt); 89d2748964SZhihao Yuan _LIBCPP_END_NAMESPACE_STD 90