mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
102 lines
2.5 KiB
C++
102 lines
2.5 KiB
C++
// Copyright 2013 The Flutter 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 "string_utils.h"
|
|
|
|
#include <codecvt>
|
|
#include <locale>
|
|
#include <regex>
|
|
#include <sstream>
|
|
|
|
#include "no_destructor.h"
|
|
|
|
namespace base {
|
|
|
|
std::u16string ASCIIToUTF16(std::string src) {
|
|
return std::u16string(src.begin(), src.end());
|
|
}
|
|
|
|
std::u16string UTF8ToUTF16(std::string src) {
|
|
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
|
|
return convert.from_bytes(src);
|
|
}
|
|
|
|
std::string UTF16ToUTF8(std::u16string src) {
|
|
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
|
|
return convert.to_bytes(src);
|
|
}
|
|
|
|
std::u16string NumberToString16(float number) {
|
|
return ASCIIToUTF16(NumberToString(number));
|
|
}
|
|
|
|
std::string NumberToString(int32_t number) {
|
|
return std::to_string(number);
|
|
}
|
|
|
|
std::string NumberToString(unsigned int number) {
|
|
return std::to_string(number);
|
|
}
|
|
|
|
std::string NumberToString(float number) {
|
|
return std::to_string(number);
|
|
}
|
|
|
|
std::string JoinString(std::vector<std::string> tokens, std::string delimiter) {
|
|
std::ostringstream imploded;
|
|
for (size_t i = 0; i < tokens.size(); i++) {
|
|
if (i == tokens.size() - 1) {
|
|
imploded << tokens[i];
|
|
} else {
|
|
imploded << tokens[i] << delimiter;
|
|
}
|
|
}
|
|
return imploded.str();
|
|
}
|
|
|
|
void ReplaceChars(std::string in,
|
|
std::string from,
|
|
std::string to,
|
|
std::string* out) {
|
|
size_t pos = in.find(from);
|
|
while (pos != std::string::npos) {
|
|
in.replace(pos, from.size(), to);
|
|
pos = in.find(from, pos + to.size());
|
|
}
|
|
*out = in;
|
|
}
|
|
|
|
const std::string& EmptyString() {
|
|
static const base::NoDestructor<std::string> s;
|
|
return *s;
|
|
}
|
|
|
|
std::string ToUpperASCII(std::string str) {
|
|
std::string ret;
|
|
ret.reserve(str.size());
|
|
for (size_t i = 0; i < str.size(); i++)
|
|
ret.push_back(std::toupper(str[i]));
|
|
return ret;
|
|
}
|
|
|
|
std::string ToLowerASCII(std::string str) {
|
|
std::string ret;
|
|
ret.reserve(str.size());
|
|
for (size_t i = 0; i < str.size(); i++)
|
|
ret.push_back(std::tolower(str[i]));
|
|
return ret;
|
|
}
|
|
|
|
bool LowerCaseEqualsASCII(std::string a, std::string b) {
|
|
std::string lower_a = ToLowerASCII(a);
|
|
return lower_a.compare(ToLowerASCII(b)) == 0;
|
|
}
|
|
|
|
bool ContainsOnlyChars(std::u16string str, char16_t ch) {
|
|
return std::find_if(str.begin(), str.end(),
|
|
[ch](char16_t c) { return c != ch; }) == str.end();
|
|
}
|
|
|
|
} // namespace base
|