From 636bab2c17b1e3340f254c8e2b9e6714f62f9efb Mon Sep 17 00:00:00 2001 From: "Joachim Wuttke (h)" <j.wuttke@fz-juelich.de> Date: Wed, 10 May 2023 18:04:15 +0200 Subject: [PATCH] functional_write -> local ns --- Device/IO/IOFactory.cpp | 106 +++++++++++++--------------------------- Device/IO/IOFactory.h | 6 --- 2 files changed, 34 insertions(+), 78 deletions(-) diff --git a/Device/IO/IOFactory.cpp b/Device/IO/IOFactory.cpp index d83dec4542a..40d479d939b 100644 --- a/Device/IO/IOFactory.cpp +++ b/Device/IO/IOFactory.cpp @@ -76,6 +76,40 @@ std::stringstream file2stream(const std::string& file_name) return str; } +void functional_write(const std::string& file_name, std::function<void(std::ostream&)> writeData) +{ + using namespace DataUtil::Format; + + std::ofstream fout; + std::ios_base::openmode openmode = std::ios::out; + if (isTiffFile(file_name) || isCompressed(file_name)) + openmode = std::ios::out | std::ios_base::binary; + +#ifdef _WIN32 + fout.open(BaseUtil::Filesystem::convert_utf8_to_utf16(file_name), openmode); +#else + fout.open(file_name, openmode); +#endif + + if (!fout.is_open()) + throw std::runtime_error("Cannot open file for writing: " + file_name); + if (!fout.good()) + throw std::runtime_error("File is not good, probably it is a directory: " + file_name); + std::stringstream ss; + writeData(ss); + + boost::iostreams::filtering_streambuf<boost::iostreams::input> input_filtered; + if (DataUtil::Format::isGZipped(file_name)) + input_filtered.push(boost::iostreams::gzip_compressor()); + else if (DataUtil::Format::isBZipped(file_name)) + input_filtered.push(boost::iostreams::bzip2_compressor()); + input_filtered.push(ss); + + boost::iostreams::copy(input_filtered, fout); + + fout.close(); +} + } // namespace Datafield* IOFactory::readDatafield(const std::string& file_name, LoaderSelector selector) @@ -128,41 +162,6 @@ void IOFactory::writeDatafield(const Datafield& data, const std::string& file_na } } -void IOFactory::functional_write(const std::string& file_name, - std::function<void(std::ostream&)> writeData) -{ - using namespace DataUtil::Format; - - std::ofstream fout; - std::ios_base::openmode openmode = std::ios::out; - if (isTiffFile(file_name) || isCompressed(file_name)) - openmode = std::ios::out | std::ios_base::binary; - -#ifdef _WIN32 - fout.open(BaseUtil::Filesystem::convert_utf8_to_utf16(file_name), openmode); -#else - fout.open(file_name, openmode); -#endif - - if (!fout.is_open()) - throw std::runtime_error("Cannot open file for writing: " + file_name); - if (!fout.good()) - throw std::runtime_error("File is not good, probably it is a directory: " + file_name); - std::stringstream ss; - writeData(ss); - - boost::iostreams::filtering_streambuf<boost::iostreams::input> input_filtered; - if (DataUtil::Format::isGZipped(file_name)) - input_filtered.push(boost::iostreams::gzip_compressor()); - else if (DataUtil::Format::isBZipped(file_name)) - input_filtered.push(boost::iostreams::bzip2_compressor()); - input_filtered.push(ss); - - boost::iostreams::copy(input_filtered, fout); - - fout.close(); -} - bool IOFactory::fileTypeMatchesLoaderSelector(const std::string& fileName, LoaderSelector selector) { switch (selector) { @@ -179,43 +178,6 @@ bool IOFactory::fileTypeMatchesLoaderSelector(const std::string& fileName, Loade return false; } -Datafield* IOFactory::functional_read(const std::string& file_name, - std::function<Datafield*(std::istream&)> readData) -{ - if (!BaseUtil::Filesystem::IsFileExists(file_name)) - throw std::runtime_error("File does not exist: " + file_name); - - using namespace DataUtil::Format; - std::ifstream input_stream; - std::ios_base::openmode openmode = std::ios::in; - if (isTiffFile(file_name) || isCompressed(file_name)) - openmode = std::ios::in | std::ios_base::binary; - -#ifdef _WIN32 - input_stream.open(BaseUtil::Filesystem::convert_utf8_to_utf16(file_name), openmode); -#else - input_stream.open(file_name, openmode); -#endif - - if (!input_stream.is_open()) - throw std::runtime_error("Cannot open file for reading: " + file_name); - if (!input_stream.good()) - throw std::runtime_error("File is not good, probably it is a directory:" + file_name); - - boost::iostreams::filtering_streambuf<boost::iostreams::input> input_filtered; - if (DataUtil::Format::isGZipped(file_name)) - input_filtered.push(boost::iostreams::gzip_decompressor()); - else if (DataUtil::Format::isBZipped(file_name)) - input_filtered.push(boost::iostreams::bzip2_decompressor()); - input_filtered.push(input_stream); - // we use stringstream since it provides random access which is important for tiff files - std::stringstream str; - boost::iostreams::copy(input_filtered, str); - - return readData(str); -} - - bool IOUtil::filesAgree(const std::string& datFileName, const std::string& refFileName, double tol) { std::unique_ptr<Datafield> datDat; diff --git a/Device/IO/IOFactory.h b/Device/IO/IOFactory.h index 222dddf6316..d169a62b53d 100644 --- a/Device/IO/IOFactory.h +++ b/Device/IO/IOFactory.h @@ -60,12 +60,6 @@ public: static void writeDatafield(const Datafield& data, const std::string& file_name); private: - static Datafield* functional_read(const std::string& file_name, - std::function<Datafield*(std::istream&)> readData); - - static void functional_write(const std::string& file_name, - std::function<void(std::ostream&)> writeData); - static bool fileTypeMatchesLoaderSelector(const std::string& fileName, LoaderSelector selector); }; -- GitLab