blob: 1a4baf33365c569ca968499b343f7dad1d79db7d [file] [log] [blame]
Shinichiro Hamaji776ca302015-06-06 03:52:48 +09001#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
Shinichiro Hamajid87e59e2015-06-17 18:18:34 +090030 void Split(vector<StringPiece>* o);
31
Shinichiro Hamaji776ca302015-06-06 03:52:48 +090032 private:
33 StringPiece in_;
34};
35
Shinichiro Hamaji2e6cbfc2015-06-16 18:46:50 +090036class WordWriter {
37 public:
38 explicit WordWriter(string* o);
Shinichiro Hamaji37591ce2015-06-16 19:36:05 +090039 void MaybeAddWhitespace();
Shinichiro Hamaji2e6cbfc2015-06-16 18:46:50 +090040 void Write(StringPiece s);
41
42 private:
43 string* out_;
44 bool needs_space_;
45};
46
Shinichiro Hamaji776ca302015-06-06 03:52:48 +090047void InitSymtab();
48void QuitSymtab();
49StringPiece Intern(StringPiece s);
50
51template <class String>
52inline string JoinStrings(vector<String> v, const char* sep) {
53 string r;
54 for (StringPiece s : v) {
55 if (!r.empty()) {
56 r += sep;
57 }
58 r.append(s.begin(), s.end());
59 }
60 return r;
61}
62
Shinichiro Hamaji02fc55b2015-06-16 17:19:07 +090063void AppendString(StringPiece str, string* out);
64
65bool HasPrefix(StringPiece str, StringPiece prefix);
66
67bool HasSuffix(StringPiece str, StringPiece suffix);
68
69StringPiece TrimSuffix(StringPiece str, StringPiece suffix);
70
71void AppendSubstPattern(StringPiece str, StringPiece pat, StringPiece subst,
72 string* out);
73
74void AppendSubstRef(StringPiece str, StringPiece pat, StringPiece subst,
75 string* out);
76
Shinichiro Hamaji00cc6582015-06-17 18:12:46 +090077bool MatchPattern(StringPiece str, StringPiece pat);
78
Shinichiro Hamaji810fd032015-06-17 04:38:03 +090079string NoLineBreak(const string& s);
80
Shinichiro Hamaji32750622015-06-17 14:57:33 +090081StringPiece TrimLeftSpace(StringPiece s);
82StringPiece TrimRightSpace(StringPiece s);
83StringPiece TrimSpace(StringPiece s);
84
Shinichiro Hamaji776ca302015-06-06 03:52:48 +090085#endif // STRUTIL_H_