OSDN Git Service

Add a write-out method to ThreadIdx.
authorAiwota Programmer <aiwotaprog@tetteke.tk>
Sat, 27 Jun 2009 07:38:22 +0000 (16:38 +0900)
committerAiwota Programmer <aiwotaprog@tetteke.tk>
Sat, 27 Jun 2009 07:38:22 +0000 (16:38 +0900)
src/thread_idx.cxx
src/thread_idx.hxx

index a5ae829..c35a22f 100644 (file)
@@ -22,8 +22,8 @@
 #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();
index 9995161..4c2cc72 100644 (file)
@@ -32,12 +32,14 @@ namespace dialektos {
 
 
 struct ThreadIdx {
+  ThreadIdx();
 
   std::string title_;
   int line_count_;
   std::string last_modified_;
   std::string etag_;
 
+  void to_xml(const boost::filesystem::path&);
   static ThreadIdx from_xml(const boost::filesystem::path&);
 
 private: