X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcache.cpp;h=57b16d118ecd01cc27f99626e89cd9a5866ca475;hb=1ec533a7777be4dce9c8b6bbb1cbc32d38098ae4;hp=087428fc3cf54cf8341deae68dcb4224b6f3613b;hpb=7ac882d9a3a025bbe77f88803f53eff5c6dad750;p=builder.git diff --git a/source/cache.cpp b/source/cache.cpp index 087428f..57b16d1 100644 --- a/source/cache.cpp +++ b/source/cache.cpp @@ -1,5 +1,7 @@ #include +#include #include +#include #include #include #include @@ -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; }