blob: 258db8585233487db23fe70d069b111fbb79680f [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/strings/string_number_conversions.h"
#include <iterator>
#include <string>
#include "base/containers/span.h"
#include "polyfills/base/logging.h"
#include "base/strings/string_number_conversions_internal.h"
#include "base/strings/string_piece.h"
namespace gurl_base {
std::string NumberToString(int value) {
return internal::IntToStringT<std::string>(value);
}
std::u16string NumberToString16(int value) {
return internal::IntToStringT<std::u16string>(value);
}
std::string NumberToString(unsigned value) {
return internal::IntToStringT<std::string>(value);
}
std::u16string NumberToString16(unsigned value) {
return internal::IntToStringT<std::u16string>(value);
}
std::string NumberToString(long value) {
return internal::IntToStringT<std::string>(value);
}
std::u16string NumberToString16(long value) {
return internal::IntToStringT<std::u16string>(value);
}
std::string NumberToString(unsigned long value) {
return internal::IntToStringT<std::string>(value);
}
std::u16string NumberToString16(unsigned long value) {
return internal::IntToStringT<std::u16string>(value);
}
std::string NumberToString(long long value) {
return internal::IntToStringT<std::string>(value);
}
std::u16string NumberToString16(long long value) {
return internal::IntToStringT<std::u16string>(value);
}
std::string NumberToString(unsigned long long value) {
return internal::IntToStringT<std::string>(value);
}
std::u16string NumberToString16(unsigned long long value) {
return internal::IntToStringT<std::u16string>(value);
}
std::string NumberToString(double value) {
return internal::DoubleToStringT<std::string>(value);
}
std::u16string NumberToString16(double value) {
return internal::DoubleToStringT<std::u16string>(value);
}
bool StringToInt(StringPiece input, int* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToInt(StringPiece16 input, int* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToUint(StringPiece input, unsigned* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToUint(StringPiece16 input, unsigned* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToInt64(StringPiece input, int64_t* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToInt64(StringPiece16 input, int64_t* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToUint64(StringPiece input, uint64_t* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToUint64(StringPiece16 input, uint64_t* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToSizeT(StringPiece input, size_t* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToSizeT(StringPiece16 input, size_t* output) {
return internal::StringToIntImpl(input, *output);
}
bool StringToDouble(StringPiece input, double* output) {
return internal::StringToDoubleImpl(input, input.data(), *output);
}
bool StringToDouble(StringPiece16 input, double* output) {
return internal::StringToDoubleImpl(
input, reinterpret_cast<const uint16_t*>(input.data()), *output);
}
std::string HexEncode(const void* bytes, size_t size) {
return HexEncode(span(reinterpret_cast<const uint8_t*>(bytes), size));
}
std::string HexEncode(span<const uint8_t> bytes) {
// Each input byte creates two output hex characters.
std::string ret;
ret.reserve(bytes.size() * 2);
for (uint8_t byte : bytes) {
AppendHexEncodedByte(byte, ret);
}
return ret;
}
bool HexStringToInt(StringPiece input, int* output) {
return internal::HexStringToIntImpl(input, *output);
}
bool HexStringToUInt(StringPiece input, uint32_t* output) {
return internal::HexStringToIntImpl(input, *output);
}
bool HexStringToInt64(StringPiece input, int64_t* output) {
return internal::HexStringToIntImpl(input, *output);
}
bool HexStringToUInt64(StringPiece input, uint64_t* output) {
return internal::HexStringToIntImpl(input, *output);
}
bool HexStringToBytes(StringPiece input, std::vector<uint8_t>* output) {
GURL_DCHECK(output->empty());
return internal::HexStringToByteContainer<uint8_t>(
input, std::back_inserter(*output));
}
bool HexStringToString(StringPiece input, std::string* output) {
GURL_DCHECK(output->empty());
return internal::HexStringToByteContainer<char>(input,
std::back_inserter(*output));
}
bool HexStringToSpan(StringPiece input, span<uint8_t> output) {
if (input.size() / 2 != output.size())
return false;
return internal::HexStringToByteContainer<uint8_t>(input, output.begin());
}
} // namespace base