#include "thread_idx.hxx"
#include <boost/archive/xml_iarchive.hpp>
+#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/nvp.hpp>
-#include <boost/exception.hpp>
#include <boost/format.hpp>
#include <boost/filesystem.hpp>
#include <fstream>
namespace dialektos {
+ThreadIdx::ThreadIdx() : title_(), line_count_(0), last_modified_(), etag_()
+{}
+
+void ThreadIdx::to_xml(const boost::filesystem::path& xml) {
+ std::ofstream ofs(xml.file_string().c_str());
+ try {
+ boost::archive::xml_oarchive oa(ofs);
+ oa << boost::serialization::make_nvp("ThreadIdx", *this);
+ } catch (const boost::archive::archive_exception& e) {
+ std::cerr << e.what() << " " << xml.file_string() << std::endl;
+ }
+ ofs.close();
+}
ThreadIdx ThreadIdx::from_xml(const boost::filesystem::path& xml) {
ThreadIdx idx;
+ if (!boost::filesystem::exists(xml) ||
+ !boost::filesystem::is_regular_file(xml))
+ return idx;
+
std::ifstream ifs(xml.file_string().c_str());
try {
boost::archive::xml_iarchive ia(ifs);
ia >> boost::serialization::make_nvp("ThreadIdx", idx);
- } catch (const boost::exception& e) {
- // TODO thread safety.
- std::cerr << boost::format("cannot read %1%") % xml.file_string() << std::endl;
+ } catch (const boost::archive::archive_exception& e) {
+ std::cerr << e.what() << " " << xml.file_string() << std::endl;
return ThreadIdx();
}
ifs.close();