]> git.tdb.fi Git - builder.git/blobdiff - source/cache.cpp
Use braced initializer lists for map insertions
[builder.git] / source / cache.cpp
index 087428fc3cf54cf8341deae68dcb4224b6f3613b..57b16d118ecd01cc27f99626e89cd9a5866ca475 100644 (file)
@@ -1,5 +1,7 @@
 #include <msp/core/maputils.h>
+#include <msp/fs/dir.h>
 #include <msp/fs/stat.h>
+#include <msp/fs/utils.h>
 #include <msp/io/file.h>
 #include <msp/io/print.h>
 #include <msp/strings/utils.h>
@@ -57,7 +59,7 @@ void write_string(IO::Base &out, const string &str)
 
 Cache::Cache(SourcePackage &p):
        package(p),
-       filename(package.get_temp_dir()/"../cache"),
+       filename(package.get_temp_directory()/"../cache"),
        changed(false)
 { }
 
@@ -71,9 +73,9 @@ void Cache::set_value(const Target *tgt, const string &k, const string &v)
 void Cache::append_value(const Target *tgt, const string &k, const string &v)
 {
        Key key(tgt->get_name(), k);
-       DataMap::iterator i = data.find(key);
+       auto i = data.find(key);
        if(i==data.end())
-               i = data.insert(DataMap::value_type(key, ValueList())).first;
+               i = data.insert({ key, ValueList() }).first;
        i->second.push_back(v);
        changed = true;
        package.get_builder().get_logger().log("cache", format("Updated key %s %s+ %s", tgt->get_name(), k, v));
@@ -133,15 +135,20 @@ void Cache::save() const
        if(data.empty() || !changed)
                return;
 
+       FS::Path dir = FS::dirname(filename);
+       if(!FS::exists(dir))
+               FS::mkpath(dir, 0755);
        package.get_builder().get_logger().log("files", format("Writing %s", filename));
        IO::BufferedFile out(filename.str(), IO::M_WRITE);
 
-       for(DataMap::const_iterator i=data.begin(); i!=data.end(); ++i)
+       for(const auto &kvp: data)
        {
-               write_string(out, i->first.first);
-               write_string(out, i->first.second);
-               write_count(out, i->second.size());
-               for(ValueList::const_iterator j=i->second.begin(); j!=i->second.end(); ++j)
-                       write_string(out, *j);
+               write_string(out, kvp.first.first);
+               write_string(out, kvp.first.second);
+               write_count(out, kvp.second.size());
+               for(const string &v: kvp.second)
+                       write_string(out, v);
        }
+
+       changed = false;
 }