strutil.h revision 8f68bd3becce2fa8f442468691c2555d5a2f37e0
1#ifndef STRUTIL_H_ 2#define STRUTIL_H_ 3 4#include <string> 5#include <vector> 6 7#include "string_piece.h" 8 9using namespace std; 10 11class WordScanner { 12 public: 13 struct Iterator { 14 Iterator& operator++(); 15 StringPiece operator*() const; 16 bool operator!=(const Iterator& r) const { 17 return in != r.in || s != r.s || i != r.i; 18 } 19 20 const StringPiece* in; 21 int s; 22 int i; 23 }; 24 25 explicit WordScanner(StringPiece in); 26 27 Iterator begin() const; 28 Iterator end() const; 29 30 void Split(vector<StringPiece>* o); 31 32 private: 33 StringPiece in_; 34}; 35 36class WordWriter { 37 public: 38 explicit WordWriter(string* o); 39 void MaybeAddWhitespace(); 40 void Write(StringPiece s); 41 42 private: 43 string* out_; 44 bool needs_space_; 45}; 46 47// Temporary modifies s[s.size()] to '\0'. 48class ScopedTerminator { 49 public: 50 explicit ScopedTerminator(StringPiece s); 51 ~ScopedTerminator(); 52 53 private: 54 StringPiece s_; 55 char c_; 56}; 57 58void InitSymtab(); 59void QuitSymtab(); 60StringPiece Intern(StringPiece s); 61 62template <class String> 63inline string JoinStrings(vector<String> v, const char* sep) { 64 string r; 65 for (StringPiece s : v) { 66 if (!r.empty()) { 67 r += sep; 68 } 69 r.append(s.begin(), s.end()); 70 } 71 return r; 72} 73 74void AppendString(StringPiece str, string* out); 75 76bool HasPrefix(StringPiece str, StringPiece prefix); 77 78bool HasSuffix(StringPiece str, StringPiece suffix); 79 80StringPiece TrimSuffix(StringPiece str, StringPiece suffix); 81 82void AppendSubstPattern(StringPiece str, StringPiece pat, StringPiece subst, 83 string* out); 84 85void AppendSubstRef(StringPiece str, StringPiece pat, StringPiece subst, 86 string* out); 87 88bool MatchPattern(StringPiece str, StringPiece pat); 89 90string NoLineBreak(const string& s); 91 92StringPiece TrimLeftSpace(StringPiece s); 93StringPiece TrimRightSpace(StringPiece s); 94StringPiece TrimSpace(StringPiece s); 95 96StringPiece Dirname(StringPiece s); 97StringPiece Basename(StringPiece s); 98StringPiece GetExt(StringPiece s); 99StringPiece StripExt(StringPiece s); 100void AbsPath(StringPiece s, string* o); 101 102#endif // STRUTIL_H_ 103