- f619bd3c1ab57586b7ed6010db09cdaf8a6882f9 Fix comment typos in strings/numbers.h . by Daniel Katz <katzdm@google.com>
- 1f7096d96dcf2a75ba13c210b709432165a05963 Internal namespace change by Gennadiy Rozental <rogeeff@google.com> - ac2911b3047a79a1fc8bbcdd3f3cb24b02ab0054 Fixing -Wunused-function warning in failure_signal_handler. by Abseil Team <absl-team@google.com> GitOrigin-RevId: f619bd3c1ab57586b7ed6010db09cdaf8a6882f9 Change-Id: Ib09117eacfcb40ad25b216dbe8dcc9b8f1a0df6c
This commit is contained in:
parent
59ae4d5a0e
commit
3e671c7821
2 changed files with 24 additions and 16 deletions
|
@ -158,6 +158,8 @@ static bool SetupAlternateStackOnce() {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ABSL_HAVE_SIGACTION
|
||||||
|
|
||||||
// Sets up an alternate stack for signal handlers once.
|
// Sets up an alternate stack for signal handlers once.
|
||||||
// Returns the appropriate flag for sig_action.sa_flags
|
// Returns the appropriate flag for sig_action.sa_flags
|
||||||
// if the system supports using an alternate stack.
|
// if the system supports using an alternate stack.
|
||||||
|
@ -170,8 +172,6 @@ static int MaybeSetupAlternateStack() {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ABSL_HAVE_SIGACTION
|
|
||||||
|
|
||||||
static void InstallOneFailureHandler(FailureSignalData* data,
|
static void InstallOneFailureHandler(FailureSignalData* data,
|
||||||
void (*handler)(int, siginfo_t*, void*)) {
|
void (*handler)(int, siginfo_t*, void*)) {
|
||||||
struct sigaction act;
|
struct sigaction act;
|
||||||
|
|
|
@ -124,17 +124,11 @@ char* FastIntToBuffer(int_type i, char* buffer) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace numbers_internal
|
// Implementation of SimpleAtoi, generalized to support arbitrary base (used
|
||||||
|
// with base different from 10 elsewhere in Abseil implementation).
|
||||||
// SimpleAtoi()
|
|
||||||
//
|
|
||||||
// Converts a std::string to an integer, using `safe_strto?()` functions for actual
|
|
||||||
// parsing, returning `true` if successful. The `safe_strto?()` functions apply
|
|
||||||
// strict checking; the std::string must be a base-10 integer, optionally followed or
|
|
||||||
// preceded by ASCII whitespace, with a value in the range of the corresponding
|
|
||||||
// integer type.
|
|
||||||
template <typename int_type>
|
template <typename int_type>
|
||||||
ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view s, int_type* out) {
|
ABSL_MUST_USE_RESULT bool safe_strtoi_base(absl::string_view s, int_type* out,
|
||||||
|
int base) {
|
||||||
static_assert(sizeof(*out) == 4 || sizeof(*out) == 8,
|
static_assert(sizeof(*out) == 4 || sizeof(*out) == 8,
|
||||||
"SimpleAtoi works only with 32-bit or 64-bit integers.");
|
"SimpleAtoi works only with 32-bit or 64-bit integers.");
|
||||||
static_assert(!std::is_floating_point<int_type>::value,
|
static_assert(!std::is_floating_point<int_type>::value,
|
||||||
|
@ -146,27 +140,41 @@ ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view s, int_type* out) {
|
||||||
if (static_cast<int_type>(1) - 2 < 0) { // Signed
|
if (static_cast<int_type>(1) - 2 < 0) { // Signed
|
||||||
if (sizeof(*out) == 64 / 8) { // 64-bit
|
if (sizeof(*out) == 64 / 8) { // 64-bit
|
||||||
int64_t val;
|
int64_t val;
|
||||||
parsed = numbers_internal::safe_strto64_base(s, &val, 10);
|
parsed = numbers_internal::safe_strto64_base(s, &val, base);
|
||||||
*out = static_cast<int_type>(val);
|
*out = static_cast<int_type>(val);
|
||||||
} else { // 32-bit
|
} else { // 32-bit
|
||||||
int32_t val;
|
int32_t val;
|
||||||
parsed = numbers_internal::safe_strto32_base(s, &val, 10);
|
parsed = numbers_internal::safe_strto32_base(s, &val, base);
|
||||||
*out = static_cast<int_type>(val);
|
*out = static_cast<int_type>(val);
|
||||||
}
|
}
|
||||||
} else { // Unsigned
|
} else { // Unsigned
|
||||||
if (sizeof(*out) == 64 / 8) { // 64-bit
|
if (sizeof(*out) == 64 / 8) { // 64-bit
|
||||||
uint64_t val;
|
uint64_t val;
|
||||||
parsed = numbers_internal::safe_strtou64_base(s, &val, 10);
|
parsed = numbers_internal::safe_strtou64_base(s, &val, base);
|
||||||
*out = static_cast<int_type>(val);
|
*out = static_cast<int_type>(val);
|
||||||
} else { // 32-bit
|
} else { // 32-bit
|
||||||
uint32_t val;
|
uint32_t val;
|
||||||
parsed = numbers_internal::safe_strtou32_base(s, &val, 10);
|
parsed = numbers_internal::safe_strtou32_base(s, &val, base);
|
||||||
*out = static_cast<int_type>(val);
|
*out = static_cast<int_type>(val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return parsed;
|
return parsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // namespace numbers_internal
|
||||||
|
|
||||||
|
// SimpleAtoi()
|
||||||
|
//
|
||||||
|
// Converts a std::string to an integer, using `safe_strto?()` functions for actual
|
||||||
|
// parsing, returning `true` if successful. The `safe_strto?()` functions apply
|
||||||
|
// strict checking; the std::string must be a base-10 integer, optionally followed or
|
||||||
|
// preceded by ASCII whitespace, with a value in the range of the corresponding
|
||||||
|
// integer type.
|
||||||
|
template <typename int_type>
|
||||||
|
ABSL_MUST_USE_RESULT bool SimpleAtoi(absl::string_view s, int_type* out) {
|
||||||
|
return numbers_internal::safe_strtoi_base(s, out, 10);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace absl
|
} // namespace absl
|
||||||
|
|
||||||
#endif // ABSL_STRINGS_NUMBERS_H_
|
#endif // ABSL_STRINGS_NUMBERS_H_
|
||||||
|
|
Loading…
Reference in a new issue