mirror of
https://github.com/fastfloat/fast_float.git
synced 2025-12-06 16:56:57 +08:00
commit
4bb6fd1271
@ -1,4 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.14)
|
||||||
|
|
||||||
|
|
||||||
project(fast_float VERSION 8.0.2 LANGUAGES CXX)
|
project(fast_float VERSION 8.0.2 LANGUAGES CXX)
|
||||||
set(FASTFLOAT_CXX_STANDARD 11 CACHE STRING "the C++ standard to use for fastfloat")
|
set(FASTFLOAT_CXX_STANDARD 11 CACHE STRING "the C++ standard to use for fastfloat")
|
||||||
|
|||||||
20
README.md
20
README.md
@ -57,6 +57,7 @@ Example:
|
|||||||
```C++
|
```C++
|
||||||
#include "fast_float/fast_float.h"
|
#include "fast_float/fast_float.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
std::string input = "3.1416 xyz ";
|
std::string input = "3.1416 xyz ";
|
||||||
@ -68,6 +69,25 @@ int main() {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Though the C++17 standard has you do a comparison with `std::errc()` to check whether the conversion worked, you can avoid it by casting the result to a `bool` like so:
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
#include "fast_float/fast_float.h"
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::string input = "3.1416 xyz ";
|
||||||
|
double result;
|
||||||
|
if(auto answer = fast_float::from_chars(input.data(), input.data() + input.size(), result)) {
|
||||||
|
std::cout << "parsed the number " << result << std::endl;
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
std::cerr << "failed to parse " << result << std::endl;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
You can parse delimited numbers:
|
You can parse delimited numbers:
|
||||||
|
|
||||||
```C++
|
```C++
|
||||||
|
|||||||
@ -58,6 +58,11 @@ enum class chars_format : uint64_t {
|
|||||||
template <typename UC> struct from_chars_result_t {
|
template <typename UC> struct from_chars_result_t {
|
||||||
UC const *ptr;
|
UC const *ptr;
|
||||||
std::errc ec;
|
std::errc ec;
|
||||||
|
|
||||||
|
// https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2497r0.html
|
||||||
|
constexpr explicit operator bool() const noexcept {
|
||||||
|
return ec == std::errc();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
using from_chars_result = from_chars_result_t<char>;
|
using from_chars_result = from_chars_result_t<char>;
|
||||||
|
|||||||
@ -22,12 +22,8 @@ endif()
|
|||||||
|
|
||||||
# FetchContent_MakeAvailable() was only introduced in 3.14
|
# FetchContent_MakeAvailable() was only introduced in 3.14
|
||||||
# https://cmake.org/cmake/help/v3.14/release/3.14.html#modules
|
# https://cmake.org/cmake/help/v3.14/release/3.14.html#modules
|
||||||
# FetchContent_MakeAvailable(doctest)
|
|
||||||
if (NOT SYSTEM_DOCTEST)
|
if (NOT SYSTEM_DOCTEST)
|
||||||
FetchContent_GetProperties(doctest)
|
FetchContent_MakeAvailable(doctest)
|
||||||
if(NOT doctest_POPULATED)
|
|
||||||
FetchContent_MakeAvailable(doctest)
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_library(supplemental-data INTERFACE)
|
add_library(supplemental-data INTERFACE)
|
||||||
@ -76,7 +72,7 @@ endif()
|
|||||||
if (FASTFLOAT_SUPPLEMENTAL_TESTS)
|
if (FASTFLOAT_SUPPLEMENTAL_TESTS)
|
||||||
target_compile_definitions(basictest PRIVATE FASTFLOAT_SUPPLEMENTAL_TESTS)
|
target_compile_definitions(basictest PRIVATE FASTFLOAT_SUPPLEMENTAL_TESTS)
|
||||||
endif()
|
endif()
|
||||||
|
fast_float_add_cpp_test(p2497)
|
||||||
fast_float_add_cpp_test(long_test)
|
fast_float_add_cpp_test(long_test)
|
||||||
fast_float_add_cpp_test(powersoffive_hardround)
|
fast_float_add_cpp_test(powersoffive_hardround)
|
||||||
fast_float_add_cpp_test(string_test)
|
fast_float_add_cpp_test(string_test)
|
||||||
|
|||||||
16
tests/p2497.cpp
Normal file
16
tests/p2497.cpp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include "fast_float/fast_float.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
std::string input = "3.1416 xyz ";
|
||||||
|
double result;
|
||||||
|
if (auto answer = fast_float::from_chars(
|
||||||
|
input.data(), input.data() + input.size(), result)) {
|
||||||
|
std::cout << "parsed the number " << result << std::endl;
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
std::cerr << "failed to parse " << result << std::endl;
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user