1 // Copyright 2021 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 #include <iostream> 6 #include <memory> 7 8 #include "base/strings/string_piece.h" 9 RemoveAsStringInExplicitStringConstruction()10void RemoveAsStringInExplicitStringConstruction() { 11 base::StringPiece piece = "Hello"; 12 std::string str{piece}; 13 } 14 RemoveAsStringWhenConstructingStringPiece()15void RemoveAsStringWhenConstructingStringPiece() { 16 auto* piece_ptr = new base::StringPiece("Hello"); 17 const base::StringPiece& piece_ref = *piece_ptr; 18 } 19 RemoveAsStringForMembers()20void RemoveAsStringForMembers() { 21 base::StringPiece piece = "Hello"; 22 piece.begin(); 23 piece.cbegin(); 24 piece.end(); 25 piece.cend(); 26 piece.rbegin(); 27 piece.crbegin(); 28 piece.rend(); 29 piece.crend(); 30 piece.at(0); 31 piece.front(); 32 piece.back(); 33 piece.size(); 34 35 auto* piece_ptr = &piece; 36 piece_ptr->length(); 37 piece_ptr->max_size(); 38 piece_ptr->empty(); 39 piece_ptr->copy(nullptr, 0); 40 piece_ptr->compare(std::string(*piece_ptr)); 41 piece_ptr->find('\0'); 42 piece_ptr->rfind('\0'); 43 piece_ptr->find_first_of('\0'); 44 piece_ptr->find_last_of('\0'); 45 piece_ptr->find_first_not_of('\0'); 46 piece_ptr->find_last_not_of('\0'); 47 piece_ptr->npos; 48 49 // Negative tests, where simply removing as_string() is incorrect. It should 50 // rather be replaced by an explicit std::string construction. 51 std::string(piece).data(); 52 std::string(*piece_ptr).substr(0); 53 } 54 RemoveAsStringForOperators()55void RemoveAsStringForOperators() { 56 base::StringPiece piece = "Hello"; 57 std::cout << piece; 58 piece == "Hello"; 59 piece != "Hello"; 60 piece < "Hello"; 61 piece > "Hello"; 62 piece <= "Hello"; 63 piece >= "Hello"; 64 65 // Negative tests, where simply removing as_string() is incorrect. It should 66 // rather be replaced by an explicit std::string construction. 67 std::string(piece) += "Hello"; 68 std::string(piece) + "Hello"; 69 std::string(piece) = "Hello"; 70 std::string(piece)[0]; 71 } 72 RemoveAsStringWhenConstructingStringMember()73void RemoveAsStringWhenConstructingStringMember() { 74 class S { 75 public: 76 explicit S(base::StringPiece piece) : str_(piece) {} 77 78 private: 79 std::string str_; 80 }; 81 } 82 RewriteCStyleStringInitialization()83void RewriteCStyleStringInitialization() { 84 auto piece_ptr = std::make_unique<base::StringPiece>("Hello"); 85 const std::string str(*piece_ptr); 86 } 87 ReplaceAsStringWithStringConstructor()88void ReplaceAsStringWithStringConstructor() { 89 auto piece_ptr = std::make_unique<base::StringPiece>("Hello"); 90 std::string str = std::string(*piece_ptr).append(" World"); 91 } 92