| // 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_ |