diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2016-02-12 13:40:27 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2016-02-12 13:40:27 +0200 |
commit | c5db2b9db6c8c707c745c5920a4179e6e6b2772c (patch) | |
tree | 4b64764bf2904046061ebb8df8452f18469ecd77 /cli/runtime-source.cxx | |
parent | 8fe7185f10bec5cc6462354a9af7bafa01dd7d79 (diff) |
Add support for generating vector<string> scanner (--generate-vector-scanner)
Diffstat (limited to 'cli/runtime-source.cxx')
-rw-r--r-- | cli/runtime-source.cxx | 41 |
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 ()) |