11int main(
int argc,
char **argv)
14 if (argc != 4 && argc != 5)
16 std::cerr <<
"usage: " << argv[0];
17 std::cerr <<
" [--base64|raw|utf8|ascii] <file_name.joedb> <namespace> <identifier>\n";
18 std::cerr <<
"output: <namespace>_<identifer>.{h,cpp}\n";
22 enum Mode {base64, raw, utf8, ascii};
29 if (argv[0] == std::string(
"--base64"))
31 else if (argv[0] == std::string(
"--raw"))
33 else if (argv[0] == std::string(
"--utf8"))
35 else if (argv[0] == std::string(
"--ascii"))
39 std::cerr <<
"unknown encoding mode: " << argv[0] <<
'\n';
44 char const *
const joedb_file_name = argv[1];
46 char const *
const identifier = argv[3];
48 const std::string file_name = name_space.back() +
'_' + identifier;
54 std::ios::binary | std::ios::out
57 std::string file_content;
61 file_content.resize(in.get_size());
62 in.pread(file_content.data(), file_content.size(), 0);
65 cpp <<
"#include \"" << file_name <<
".h\"\n";
66 cpp <<
"#include \"" << name_space.back() <<
"/Readonly_Database.h\"\n";
67 cpp <<
"#include \"joedb/journal/Readonly_Memory_File.h\"\n";
69 cpp <<
"#include \"joedb/ui/base64.h\"\n";
77 cpp <<
" const size_t " << identifier <<
"_size = ";
78 cpp << file_content.size() <<
";\n";
80 cpp <<
" char const * const " << identifier <<
"_data = ";
88 char const *
const delimiter =
"glouglou";
90 cpp <<
"R\"" << delimiter <<
"(";
92 cpp <<
")" << delimiter <<
'\"';
94 else if (mode == utf8)
98 else if (mode == ascii)
101 for (
const uint8_t c: file_content)
108 cpp <<
" const Database &get_embedded_" << identifier <<
"()\n";
110 cpp <<
" static const Readonly_Database db(joedb::Readonly_Memory_File(";
113 cpp <<
"joedb::base64_decode(" << identifier <<
"_data)";
115 cpp << identifier <<
"_data, " << identifier <<
"_size";
118 cpp <<
" return db;\n";
123 cpp <<
"\n size_t get_embedded_" << identifier;
124 cpp <<
"_size() {return " << identifier <<
"_size;}\n";
126 cpp <<
" char const *get_embedded_" << identifier;
127 cpp <<
"_data() {return " << identifier <<
"_data;}\n";
134 std::ofstream h(file_name +
".h", std::ios::binary | std::ios::out);
138 h <<
"\n#include <stddef.h>\n\n";
142 h <<
"\n class Database;\n";
143 h <<
" const Database &get_embedded_" << identifier <<
"();\n";
147 h <<
" size_t get_embedded_" << identifier <<
"_size();\n";
148 h <<
" char const *get_embedded_" << identifier <<
"_data();\n";