blob: 64c90ea1cd3283e42c0ba90d070579b4b1485776 [file] [log] [blame]
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <cmath>
#include <cstdlib>
#include <limits>
#include <string>
#include <base/strings/string_number_conversions.h>
#include <base/strings/string_util.h>
#include "runtime_probe/utils/type_utils.h"
namespace runtime_probe {
bool StringToDouble(const std::string& input, double* output) {
std::string trimmed_input;
TrimWhitespaceASCII(input, base::TrimPositions::TRIM_ALL, &trimmed_input);
if (trimmed_input.empty()) { // empty string is never a double.
return false;
}
char* endptr;
*output = strtod(trimmed_input.c_str(), &endptr);
// Assume the conversion success iff the entire string is consumed and output
// is not inf or -inf.
return *endptr == '\0' && !std::isnan(*output) &&
*output != std::numeric_limits<double>::infinity() &&
*output != -std::numeric_limits<double>::infinity();
}
bool StringToInt(const std::string& input, int* output) {
std::string trimmed_input;
TrimWhitespaceASCII(input, base::TrimPositions::TRIM_ALL, &trimmed_input);
return base::StringToInt(trimmed_input, output);
}
bool StringToInt64(const std::string& input, int64_t* output) {
std::string trimmed_input;
TrimWhitespaceASCII(input, base::TrimPositions::TRIM_ALL, &trimmed_input);
return base::StringToInt64(trimmed_input, output);
}
bool HexStringToInt(const std::string& input, int* output) {
std::string trimmed_input;
TrimWhitespaceASCII(input, base::TrimPositions::TRIM_ALL, &trimmed_input);
return base::HexStringToInt(trimmed_input, output);
}
} // namespace runtime_probe