• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef TOOLS_GN_STRING_UTILS_H_
6 #define TOOLS_GN_STRING_UTILS_H_
7 
8 #include "base/strings/string_piece.h"
9 
10 class Err;
11 class Scope;
12 class Token;
13 class Value;
14 
15 inline std::string operator+(const std::string& a, const base::StringPiece& b) {
16   std::string ret;
17   ret.reserve(a.size() + b.size());
18   ret.assign(a);
19   ret.append(b.data(), b.size());
20   return ret;
21 }
22 
23 inline std::string operator+(const base::StringPiece& a, const std::string& b) {
24   std::string ret;
25   ret.reserve(a.size() + b.size());
26   ret.assign(a.data(), a.size());
27   ret.append(b);
28   return ret;
29 }
30 
31 // Unescapes and expands variables in the given literal, writing the result
32 // to the given value. On error, sets |err| and returns false.
33 bool ExpandStringLiteral(Scope* scope,
34                          const Token& literal,
35                          Value* result,
36                          Err* err);
37 
38 // Removes the given prefix from the string. Asserts if the string does
39 // not have the given prefix.
40 //
41 // Note: could potentially return a StringPiece into the str.
42 std::string RemovePrefix(const std::string& str, const std::string& prefix);
43 
44 // Appends the given string piece to the given string. This avoids an
45 // intermediate copy.
AppendStringPiece(std::string * dest,const base::StringPiece & piece)46 inline void AppendStringPiece(std::string* dest,
47                               const base::StringPiece& piece) {
48   dest->append(piece.data(), piece.size());
49 }
50 
51 // Removes the trailing slash from the given string. This asserts that either
52 // the string is empty or it ends with a slash (normally used to process
53 // directories).
54 void TrimTrailingSlash(std::string* str);
55 
56 #endif  // TOOLS_GN_STRING_UTILS_H_
57