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