mirror of
https://github.com/yhirose/cpp-peglib.git
synced 2024-12-22 11:55:30 +00:00
Code cleanup
This commit is contained in:
parent
15aa1380de
commit
23b284d0a3
54
peglib.h
54
peglib.h
@ -325,6 +325,24 @@ inline std::string resolve_escape_sequence(const char *s, size_t n) {
|
||||
return r;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
* token_to_number_ - This function should be removed eventually
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
template <typename T> T token_to_number_(std::string_view sv) {
|
||||
T n = 0;
|
||||
#if __has_include(<charconv>)
|
||||
if constexpr (!std::is_floating_point<T>::value) {
|
||||
std::from_chars(sv.data(), sv.data() + sv.size(), n);
|
||||
return n;
|
||||
}
|
||||
#endif
|
||||
auto s = std::string(sv);
|
||||
std::istringstream ss(s);
|
||||
ss >> n;
|
||||
return n;
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------------
|
||||
* Trie
|
||||
*---------------------------------------------------------------------------*/
|
||||
@ -479,23 +497,7 @@ struct SemanticValues : protected std::vector<std::any> {
|
||||
}
|
||||
|
||||
template <typename T> T token_to_number() const {
|
||||
T n = 0;
|
||||
#if __has_include(<charconv>)
|
||||
if constexpr (std::is_floating_point<T>::value) {
|
||||
// TODO: The following code should be removed eventually.
|
||||
std::istringstream ss(token_to_string());
|
||||
ss >> n;
|
||||
return n;
|
||||
} else {
|
||||
auto sv = token();
|
||||
std::from_chars(sv.data(), sv.data() + sv.size(), n);
|
||||
return n;
|
||||
}
|
||||
#else
|
||||
std::istringstream ss(token_to_string());
|
||||
ss >> n;
|
||||
return n;
|
||||
#endif
|
||||
return token_to_number_<T>(token());
|
||||
}
|
||||
|
||||
// Transform the semantic value vector to another vector
|
||||
@ -3777,23 +3779,7 @@ template <typename Annotation> struct AstBase : public Annotation {
|
||||
}
|
||||
|
||||
template <typename T> T token_to_number() const {
|
||||
T n = 0;
|
||||
#if __has_include(<charconv>)
|
||||
if constexpr (std::is_floating_point<T>::value) {
|
||||
// TODO: The following code should be removed eventually.
|
||||
std::istringstream ss(token_to_string());
|
||||
ss >> n;
|
||||
return n;
|
||||
} else {
|
||||
assert(is_token);
|
||||
std::from_chars(token.data(), token.data() + token.size(), n);
|
||||
return n;
|
||||
}
|
||||
#else
|
||||
std::istringstream ss(token_to_string());
|
||||
ss >> n;
|
||||
return n;
|
||||
#endif
|
||||
return token_to_number_<T>(token);
|
||||
}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user