// 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 #include #include #include #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, char16_t> convert; return convert.from_bytes(src); } std::string UTF16ToUTF8(std::u16string src) { std::wstring_convert, 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 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 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