Home | History | Annotate | Download | only in gn
      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.
     46 inline void AppendStringPiece(std::string* dest,
     47                               const base::StringPiece& piece) {
     48   dest->append(piece.data(), piece.size());
     49 }
     50 
     51 #endif  // TOOLS_GN_STRING_UTILS_H_
     52