Joedb 10.2.1
The Journal-Only Embedded Database
Loading...
Searching...
No Matches
Procedures_h.cpp
Go to the documentation of this file.
3
4#include <set>
5
6namespace joedb::generator
7{
9 (
10 const Compiler_Options &options,
11 const std::vector<Procedure> &procedures
12 ):
13 Generator(".", "rpc/Procedures.h", options),
14 procedures(procedures)
15 {
16 }
17
19 {
20 auto name_space = options.get_name_space();
21 name_space.emplace_back("rpc");
22
23 namespace_include_guard_open(out, "Procedures", name_space);
24 out << '\n';
25
26 {
27 std::set<std::string> schemas;
28
29 for (const auto &procedure: procedures)
30 schemas.insert(procedure.schema);
31
32 for (const auto &schema: schemas)
33 out << "#include \"" << options.get_path(schema) << "/Procedure.h\"\n";
34 }
35
36 out << '\n';
37 namespace_open(out, name_space);
38
39 out << R"RRR(
40 /// A collection of procedures to be used by joedb::rpc::Server
41 class Procedures
42 {
43 public:)RRR";
44
45 for (const auto &procedure: procedures)
46 {
47 const auto &name = procedure.name;
48 const auto &schema = procedure.schema;
49
50 out << R"RRR(
51 class )RRR" << name << R"RRR(: public )RRR" << schema << R"RRR(::Procedure
52 {
53 private:
54 void execute()RRR" << schema << R"RRR(::Writable_Database &message) const override
55 {
56 service.)RRR" << name << R"RRR((message);
57 }
58
59 public:
60 )RRR" << name << R"RRR((Service &service): )RRR" << schema << R"RRR(::Procedure(service) {}
61 } )RRR" << name << R"RRR(;
62)RRR";
63 }
64
65 out << "\n const std::vector<joedb::rpc::Procedure *> procedures\n";
66 out << " {\n";
67
68 for (const auto &procedure: procedures)
69 out << " &" << procedure.name << ",\n";
70
71 out << " };\n\n";
72
73 out << " Procedures(Service &service):\n";
74
75 {
76 bool first = true;
77 for (const auto &procedure: procedures)
78 {
79 if (first)
80 first = false;
81 else
82 out << ",\n";
83 out << " " << procedure.name << "(service)";
84 }
85 }
86
87 out << "\n {\n";
88 out << " }\n";
89 out << " };\n";
90
91 namespace_close(out, name_space);
93 }
94}
std::string get_path(const std::string &schema) const
const std::vector< std::string > & get_name_space() const
const Compiler_Options & options
Definition Generator.h:13
Procedures_h(const Compiler_Options &options, const std::vector< Procedure > &procedures)
void namespace_open(std::ostream &out, const std::vector< std::string > &n)
void namespace_close(std::ostream &out, const std::vector< std::string > &n)
void namespace_include_guard_open(std::ostream &out, const char *name, const std::vector< std::string > &n)
void namespace_include_guard_close(std::ostream &out)
One code generator for each of the file generated by joedbc.
Definition Client_h.cpp:5