37#include <boost/archive/binary_iarchive.hpp>
38#include <boost/archive/binary_oarchive.hpp>
39#include <boost/archive/text_iarchive.hpp>
40#include <boost/archive/text_oarchive.hpp>
45#include "ArchiveLocationInfo.hpp"
46#include "ArchiveOpener.hpp"
48#include "FilesystemPermissions.hpp"
49#include "OutputFileHandler.hpp"
50#include "ProcessSpecificArchive.hpp"
57template <
class InputArchive>
61 friend class TestArchivingHelperClasses;
72 const std::string& rFileNameBase,
82 std::stringstream common_path;
86 mpCommonStream =
new std::ifstream(common_path.str().c_str(), std::ios::binary);
90 EXCEPTION(
"Cannot load main archive file: " + common_path.str());
97 catch (boost::archive::archive_exception& boost_exception)
99 if (boost_exception.code == boost::archive::archive_exception::unsupported_version)
104 EXCEPTION(
"Could not open Boost archive '" + common_path.str() +
"' because it was written by a more recent Boost. Check process-specific archives too");
109 throw boost_exception;
114 mpPrivateStream =
new std::ifstream(private_path.c_str(), std::ios::binary);
120 EXCEPTION(
"Cannot load secondary archive file: " + private_path);
163template <
class OutputArchive>
167 friend class TestArchivingHelperClasses;
178 const std::string& rFileNameBase,
188 EXCEPTION(
"Specifying the secondary archive file ID doesn't make sense when writing.");
199 std::stringstream common_path;
205 mpCommonStream =
new std::ofstream(common_path.str().c_str(), std::ios::binary | std::ios::trunc);
209 EXCEPTION(
"Failed to open main archive file for writing: " + common_path.str());
216 mpCommonStream =
new std::ofstream(
"/dev/null", std::ios::binary | std::ios::trunc);
221 EXCEPTION(
"Failed to open dummy archive file '/dev/null' for writing");
228 mpPrivateStream =
new std::ofstream(private_path.c_str(), std::ios::binary | std::ios::trunc);
234 EXCEPTION(
"Failed to open secondary archive file for writing: " + private_path);
#define EXCEPTION(message)
static std::string GetProcessUniqueFilePath(const std::string &rFileName, unsigned procId=PetscTools::GetMyRank())
static bool GetIsDirRelativeToChasteTestOutput()
static std::string GetArchiveDirectory()
static void SetArchiveDirectory(const FileFinder &rDirectory)
static std::string GetArchiveRelativePath()
ArchiveOpener(const FileFinder &rDirectory, const std::string &rFileNameBase, unsigned procId)
OutputArchive * GetCommonArchive()
std::ofstream * mpPrivateStream
std::ofstream * mpCommonStream
OutputArchive * mpPrivateArchive
OutputArchive * mpCommonArchive
std::ofstream * mpCommonStream
Archive * mpCommonArchive
std::ofstream * mpPrivateStream
Archive * mpPrivateArchive
static void SetFilePermissions(const fs::path &rPath)
static void Set(Archive *pArchive)