#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>
Cache::Cache(SourcePackage &p):
package(p),
- filename(package.get_temp_dir()/"../cache"),
+ filename(package.get_temp_directory()/"../cache"),
changed(false)
{ }
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));
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;
}