[C++] Refactor pattern functions in strutil
diff --git a/strutil.h b/strutil.h
index d7c3785..c0d040f 100644
--- a/strutil.h
+++ b/strutil.h
@@ -79,13 +79,22 @@
 
 StringPiece TrimSuffix(StringPiece str, StringPiece suffix);
 
-void AppendSubstPattern(StringPiece str, StringPiece pat, StringPiece subst,
-                        string* out);
+class Pattern {
+ public:
+  explicit Pattern(StringPiece pat);
 
-void AppendSubstRef(StringPiece str, StringPiece pat, StringPiece subst,
-                    string* out);
+  bool Match(StringPiece str) const;
 
-bool MatchPattern(StringPiece str, StringPiece pat);
+  void AppendSubst(StringPiece str, StringPiece subst, string* out) const;
+
+  void AppendSubstRef(StringPiece str, StringPiece subst, string* out) const;
+
+ private:
+  bool MatchImpl(StringPiece str) const;
+
+  StringPiece pat_;
+  size_t percent_index_;
+};
 
 string NoLineBreak(const string& s);