// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef TOOLS_GN_STRING_UTILS_H_ #define TOOLS_GN_STRING_UTILS_H_ #include "base/strings/string_piece.h" class Err; class Scope; class Token; class Value; inline std::string operator+(const std::string& a, const base::StringPiece& b) { std::string ret; ret.reserve(a.size() + b.size()); ret.assign(a); ret.append(b.data(), b.size()); return ret; } inline std::string operator+(const base::StringPiece& a, const std::string& b) { std::string ret; ret.reserve(a.size() + b.size()); ret.assign(a.data(), a.size()); ret.append(b); return ret; } // Unescapes and expands variables in the given literal, writing the result // to the given value. On error, sets |err| and returns false. bool ExpandStringLiteral(Scope* scope, const Token& literal, Value* result, Err* err); // Removes the given prefix from the string. Asserts if the string does // not have the given prefix. // // Note: could potentially return a StringPiece into the str. std::string RemovePrefix(const std::string& str, const std::string& prefix); // Appends the given string piece to the given string. This avoids an // intermediate copy. inline void AppendStringPiece(std::string* dest, const base::StringPiece& piece) { dest->append(piece.data(), piece.size()); } // Removes the trailing slash from the given string. This asserts that either // the string is empty or it ends with a slash (normally used to process // directories). void TrimTrailingSlash(std::string* str); #endif // TOOLS_GN_STRING_UTILS_H_