summaryrefslogtreecommitdiff
path: root/cli/runtime-source.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2016-02-12 13:40:27 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2016-02-12 13:40:27 +0200
commitc5db2b9db6c8c707c745c5920a4179e6e6b2772c (patch)
tree4b64764bf2904046061ebb8df8452f18469ecd77 /cli/runtime-source.cxx
parent8fe7185f10bec5cc6462354a9af7bafa01dd7d79 (diff)
Add support for generating vector<string> scanner (--generate-vector-scanner)
Diffstat (limited to 'cli/runtime-source.cxx')
-rw-r--r--cli/runtime-source.cxx41
1 files changed, 41 insertions, 0 deletions
diff --git a/cli/runtime-source.cxx b/cli/runtime-source.cxx
index 144eace..30f08b0 100644
--- a/cli/runtime-source.cxx
+++ b/cli/runtime-source.cxx
@@ -242,6 +242,47 @@ generate_runtime_source (context& ctx, bool complete)
<< "throw eos_reached ();"
<< "}";
+ // vector_scanner
+ //
+ if (ctx.options.generate_vector_scanner ())
+ {
+ os << "// vector_scanner" << endl
+ << "//" << endl
+
+ << "bool vector_scanner::" << endl
+ << "more ()"
+ << "{"
+ << "return i_ < v_.size ();"
+ << "}"
+
+ << "const char* vector_scanner::" << endl
+ << "peek ()"
+ << "{"
+ << "if (i_ < v_.size ())" << endl
+ << "return v_[i_].c_str ();"
+ << "else" << endl
+ << "throw eos_reached ();"
+ << "}"
+
+ << "const char* vector_scanner::" << endl
+ << "next ()"
+ << "{"
+ << "if (i_ < v_.size ())" << endl
+ << "return v_[i_++].c_str ();"
+ << "else" << endl
+ << "throw eos_reached ();"
+ << "}"
+
+ << "void vector_scanner::" << endl
+ << "skip ()"
+ << "{"
+ << "if (i_ < v_.size ())" << endl
+ << "++i_;"
+ << "else" << endl
+ << "throw eos_reached ();"
+ << "}";
+ }
+
// argv_file_scanner
//
if (ctx.options.generate_file_scanner ())