]> git.tdb.fi Git - libs/datafile.git/blobdiff - tool/builtingenerator.cpp
Use explicit lengths in builtin data initialization
[libs/datafile.git] / tool / builtingenerator.cpp
index 45d5844f5fdbe9b7e2236b76e89e0eacff51587c..45465db93ff172f67ee7bd1dd1f48961de0ebe3a 100644 (file)
@@ -14,7 +14,7 @@ BuiltinGenerator::BuiltinGenerator(IO::Base &o):
 
 void BuiltinGenerator::begin(const std::string &ns)
 {
-       if(!namespc.empty() || !filenames.empty())
+       if(!namespc.empty() || !files.empty())
                throw logic_error("BuiltinGenerator::begin");
 
        if(!ns.empty())
@@ -30,7 +30,9 @@ void BuiltinGenerator::add_file(const std::string &fn)
        IO::BufferedFile in(fn);
 
        string base_fn = FS::basename(fn);
-       filenames.push_back(base_fn);
+       files.emplace_back();
+       File &file = files.back();
+       file.filename = base_fn;
 
        out.write(format("\nconst char %s_data[] =\n", mangle_filename(base_fn)));
        string line;
@@ -47,14 +49,15 @@ void BuiltinGenerator::add_file(const std::string &fn)
                                out.put(';');
                        out.put('\n');
                }
+               file.size += len;
        }
 }
 
 void BuiltinGenerator::end(const string &module_name)
 {
        out.write(format("\nvoid init_%s(DataFile::BuiltinSource &source)\n{\n", module_name));
-       for(vector<string>::const_iterator i=filenames.begin(); i!=filenames.end(); ++i)
-               out.write(format("  source.add_object(\"%s\", %s_data);\n", *i, mangle_filename(*i)));
+       for(vector<File>::const_iterator i=files.begin(); i!=files.end(); ++i)
+               out.write(format("  source.add_object(\"%s\", %s_data, %d);\n", i->filename, mangle_filename(i->filename), i->size));
        out.write("}\n");
 
        if(!namespc.empty())
@@ -64,7 +67,7 @@ void BuiltinGenerator::end(const string &module_name)
                        out.write(format("} // namespace %s\n", *i));
 
                namespc.clear();
-               filenames.clear();
+               files.clear();
        }
 }