diff --git a/six/modules/c++/cphd/CMakeLists.txt b/six/modules/c++/cphd/CMakeLists.txt index 464a171654..02aa25336d 100644 --- a/six/modules/c++/cphd/CMakeLists.txt +++ b/six/modules/c++/cphd/CMakeLists.txt @@ -13,6 +13,7 @@ coda_add_module( source/CPHDXMLParser.cpp source/Channel.cpp source/Data.cpp + source/DataWriter.cpp source/Dwell.cpp source/ErrorParameters.cpp source/FileHeader.cpp diff --git a/six/modules/c++/cphd/cphd.vcxproj b/six/modules/c++/cphd/cphd.vcxproj index 692a2e63d3..e7ab142f9c 100644 --- a/six/modules/c++/cphd/cphd.vcxproj +++ b/six/modules/c++/cphd/cphd.vcxproj @@ -121,6 +121,7 @@ + @@ -156,6 +157,7 @@ + diff --git a/six/modules/c++/cphd/cphd.vcxproj.filters b/six/modules/c++/cphd/cphd.vcxproj.filters index e9fb88640e..0eace9d1af 100644 --- a/six/modules/c++/cphd/cphd.vcxproj.filters +++ b/six/modules/c++/cphd/cphd.vcxproj.filters @@ -1,189 +1,195 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + \ No newline at end of file diff --git a/six/modules/c++/cphd/include/cphd/CPHDReader.h b/six/modules/c++/cphd/include/cphd/CPHDReader.h index 97956555e7..84cc7031f2 100644 --- a/six/modules/c++/cphd/include/cphd/CPHDReader.h +++ b/six/modules/c++/cphd/include/cphd/CPHDReader.h @@ -19,8 +19,9 @@ * see . * */ -#ifndef __CPHD_CPHD_READER_H__ -#define __CPHD_CPHD_READER_H__ +#ifndef SIX_cphd_CPHDReader_h_INCLUDED_ +#define SIX_cphd_CPHDReader_h_INCLUDED_ +#pragma once #include @@ -162,4 +163,4 @@ struct CPHDReader final }; } -#endif +#endif // SIX_cphd_CPHDReader_h_INCLUDED_ diff --git a/six/modules/c++/cphd/include/cphd/CPHDWriter.h b/six/modules/c++/cphd/include/cphd/CPHDWriter.h index ce0921059c..1341cbb829 100644 --- a/six/modules/c++/cphd/include/cphd/CPHDWriter.h +++ b/six/modules/c++/cphd/include/cphd/CPHDWriter.h @@ -20,8 +20,8 @@ * */ -#ifndef __CPHD_CPHD_WRITER_H__ -#define __CPHD_CPHD_WRITER_H__ +#ifndef SIX_cphd_CPHDWriter_h_INCLUDED_ +#define SIX_cphd_CPHDWriter_h_INCLUDED_ #pragma once #include @@ -35,143 +35,11 @@ #include #include #include +#include namespace cphd { -/* - * \class DataWriter - * - * \brief Class to handle writing to file and byte swapping - */ -struct DataWriter -{ - /* - * \func DataWriter - * \brief Constructor - * - * \param stream The seekable output stream to be written - * \param numThreads Number of threads for parallel processing - */ - DataWriter(std::shared_ptr stream, - size_t numThreads); - - /* - * Destructor - */ - virtual ~DataWriter(); - - /* - * \func operator() - * \brief Overload operator performs write and endian swap - * - * \param data Pointer to the data that will be written to the filestream - * \param numElements Total number of elements in array - * \param elementSize Size of each element - */ - virtual void operator()(const sys::ubyte* data, - size_t numElements, - size_t elementSize) = 0; - virtual void operator()(const std::byte* data, - size_t numElements, - size_t elementSize) - { - (*this)(reinterpret_cast(data), numElements, elementSize); - } - -protected: - //! Output stream of CPHD - std::shared_ptr mStream; - //! Number of threads for parallelism - const size_t mNumThreads; -}; - -/* - * \class DataWriterLittleEndian - * - * \brief Class to handle writing to output stream and byte swapping - * - * For little endian to big endian storage - */ -struct DataWriterLittleEndian final : public DataWriter -{ - /* - * \func DataWriterLittleEndian - * \brief Constructor - * - * \param stream The seekable output stream to be written - * \param numThreads Number of threads for parallel processing - * \param scratchSize Size of buffer to be used for scratch space - */ - DataWriterLittleEndian(std::shared_ptr stream, - size_t numThreads, - size_t scratchSize); - - /* - * \func operator() - * \brief Overload operator performs write and endian swap - * - * \param data Pointer to the data that will be written to the filestream - * \param numElements Total number of elements in array - * \param elementSize Size of each element - */ - void operator()(const sys::ubyte* data, - size_t numElements, - size_t elementSize) override; - void operator()(const std::byte* data, - size_t numElements, - size_t elementSize) override - { - (*this)(reinterpret_cast(data), numElements, elementSize); - } - - -private: - // Scratch space buffer - std::vector mScratch; -}; - -/* - * \class DataWriterBigEndian - * - * \brief Class to handle writing to file - * - * No byte swap. Already big endian. - */ -struct DataWriterBigEndian final : public DataWriter -{ - /* - * \func DataWriter - * \brief Constructor - * - * \param stream The seekable output stream to be written - * \param numThreads Number of threads for parallel processing - */ - DataWriterBigEndian(std::shared_ptr stream, - size_t numThreads); - - /* - * \func operator() - * \brief Overload operator performs write - * - * No endian swapping is necessary. Already Big Endian. - * - * \param data Pointer to the data that will be written to the filestream - * \param numElements Total number of elements in array - * \param elementSize Size of each element - */ - void operator()(const sys::ubyte* data, - size_t numElements, - size_t elementSize) override; - void operator()(const std::byte* data, - size_t numElements, - size_t elementSize) override - { - (*this)(reinterpret_cast(data), numElements, elementSize); - } -}; - - /* * \class CPHDWriter * \brief CPHD write handler @@ -179,7 +47,7 @@ struct DataWriterBigEndian final : public DataWriter * Used to write a CPHD file. You must be able to provide the * appropriate metadata and vector based metadata. */ -struct CPHDWriter +struct CPHDWriter final { /* * \func Constructor @@ -233,6 +101,13 @@ struct CPHDWriter size_t numThreads = 0, size_t scratchSpaceSize = 4 * 1024 * 1024); + CPHDWriter() = delete; + CPHDWriter(const CPHDWriter&) = delete; + CPHDWriter& operator=(const CPHDWriter&) = delete; + CPHDWriter(CPHDWriter&&) = delete; + CPHDWriter& operator=(CPHDWriter&&) = delete; + ~CPHDWriter() = default; + /* * \func write * \brief Writes the complete CPHD into the file. @@ -351,6 +226,10 @@ struct CPHDWriter { mStream->close(); } + std::shared_ptr getStream() const + { + return mStream; + } private: /* @@ -387,7 +266,6 @@ struct CPHDWriter //! DataWriter object std::unique_ptr mDataWriter; - void initializeDataWriter(); // Book-keeping element //! metadata information @@ -407,4 +285,4 @@ struct CPHDWriter }; } -#endif +#endif // SIX_cphd_CPHDWriter_h_INCLUDED_ diff --git a/six/modules/c++/cphd/include/cphd/DataWriter.h b/six/modules/c++/cphd/include/cphd/DataWriter.h new file mode 100644 index 0000000000..70983224d1 --- /dev/null +++ b/six/modules/c++/cphd/include/cphd/DataWriter.h @@ -0,0 +1,183 @@ +/* ========================================================================= + * This file is part of cphd-c++ + * ========================================================================= + * + * (C) Copyright 2004 - 2019, MDA Information Systems LLC + * + * cphd-c++ is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; If not, + * see . + * + */ + +#ifndef SIX_cphd_DataWriter_h_INCLUDED_ +#define SIX_cphd_DataWriter_h_INCLUDED_ +#pragma once + +#include +#include +#include // std::byte + +#include +#include + +namespace cphd +{ + +/* + * \class DataWriter + * + * \brief Class to handle writing to file and byte swapping + */ +struct DataWriter +{ + /* + * \func DataWriter + * \brief Constructor + * + * \param stream The seekable output stream to be written + * \param numThreads Number of threads for parallel processing + */ + DataWriter(io::OutputStream& stream, size_t numThreads); + + DataWriter() = delete; + DataWriter(const DataWriter&) = delete; + DataWriter& operator=(const DataWriter&) = delete; + DataWriter(DataWriter&&) = default; + DataWriter& operator=(DataWriter&&) = default; + + /* + * Destructor + */ + virtual ~DataWriter() = default; + + /* + * \func operator() + * \brief Overload operator performs write and endian swap + * + * \param data Pointer to the data that will be written to the filestream + * \param numElements Total number of elements in array + * \param elementSize Size of each element + */ + virtual void operator()(const void* data, size_t numElements, size_t elementSize) = 0; + +protected: + //! Output stream of CPHD + io::OutputStream& mStream; + //! Number of threads for parallelism + const size_t mNumThreads; +}; + +/* + * \class DataWriterLittleEndian + * + * \brief Class to handle writing to output stream and byte swapping + * + * For little endian to big endian storage + */ +struct DataWriterLittleEndian final : public DataWriter +{ + /* + * \func DataWriterLittleEndian + * \brief Constructor + * + * \param stream The seekable output stream to be written + * \param numThreads Number of threads for parallel processing + * \param scratchSize Size of buffer to be used for scratch space + */ + DataWriterLittleEndian(io::OutputStream&, size_t numThreads, size_t scratchSize); + DataWriterLittleEndian() = delete; + DataWriterLittleEndian(const DataWriterLittleEndian&) = delete; + DataWriterLittleEndian& operator=(const DataWriterLittleEndian&) = delete; + DataWriterLittleEndian(DataWriterLittleEndian&&) = default; + DataWriterLittleEndian& operator=(DataWriterLittleEndian&&) = default; + ~DataWriterLittleEndian() = default; + + /* + * \func operator() + * \brief Overload operator performs write and endian swap + * + * \param data Pointer to the data that will be written to the filestream + * \param numElements Total number of elements in array + * \param elementSize Size of each element + */ + void operator()(const void* data, size_t numElements, size_t elementSize) override; + +private: + // Scratch space buffer + std::vector mScratch; +}; + +/* + * \class DataWriterBigEndian + * + * \brief Class to handle writing to file + * + * No byte swap. Already big endian. + */ +struct DataWriterBigEndian final : public DataWriter +{ + /* + * \func DataWriter + * \brief Constructor + * + * \param stream The seekable output stream to be written + * \param numThreads Number of threads for parallel processing + */ + DataWriterBigEndian(io::OutputStream&, size_t numThreads); + DataWriterBigEndian() = delete; + DataWriterBigEndian(const DataWriterBigEndian&) = delete; + DataWriterBigEndian& operator=(const DataWriterBigEndian&) = delete; + DataWriterBigEndian(DataWriterBigEndian&&) = default; + DataWriterBigEndian& operator=(DataWriterBigEndian&&) = default; + ~DataWriterBigEndian() = default; + + /* + * \func operator() + * \brief Overload operator performs write + * + * No endian swapping is necessary. Already Big Endian. + * + * \param data Pointer to the data that will be written to the filestream + * \param numElements Total number of elements in array + * \param elementSize Size of each element + */ + void operator()(const void* data, size_t numElements, size_t elementSize) override; +}; + +// Create the appropriate DataWriter instance using std::endian::native. There are fancier +// ways of doing this compile-time "if" check, but this is relatively straight-forward to understand; +// C++20 brings `consteval if`. +namespace details +{ + template + auto make_DataWriter(io::OutputStream&, size_t numThreads, size_t scratchSize); + template<> + inline auto make_DataWriter(io::OutputStream& stream, size_t numThreads, size_t /*scratchSize*/) + { + return std::make_unique(stream, numThreads); + } + template<> + inline auto make_DataWriter(io::OutputStream& stream, size_t numThreads, size_t scratchSize) + { + return std::make_unique(stream, numThreads, scratchSize); + } +} +inline auto make_DataWriter(io::OutputStream& stream, size_t numThreads, size_t scratchSize) +{ + return details::make_DataWriter(stream, numThreads, scratchSize); +} + +} + +#endif // SIX_cphd_DataWriter_h_INCLUDED_ diff --git a/six/modules/c++/cphd/source/CPHDWriter.cpp b/six/modules/c++/cphd/source/CPHDWriter.cpp index dfa2914ba7..e80946b0e5 100644 --- a/six/modules/c++/cphd/source/CPHDWriter.cpp +++ b/six/modules/c++/cphd/source/CPHDWriter.cpp @@ -39,81 +39,6 @@ namespace cphd { -DataWriter::DataWriter(std::shared_ptr stream, - size_t numThreads) : - mStream(stream), - mNumThreads(numThreads == 0 ? std::thread::hardware_concurrency() : numThreads) -{ -} - -DataWriter::~DataWriter() -{ -} - -DataWriterLittleEndian::DataWriterLittleEndian( - std::shared_ptr stream, - size_t numThreads, - size_t scratchSize) : - DataWriter(stream, numThreads), - mScratch(scratchSize) -{ -} - -void DataWriterLittleEndian::operator()(const sys::ubyte* data, - size_t numElements, - size_t elementSize) -{ - size_t dataProcessed = 0; - const size_t dataSize = numElements * elementSize; - while (dataProcessed < dataSize) - { - const size_t dataToProcess = - std::min(mScratch.size(), dataSize - dataProcessed); - - memcpy(mScratch.data(), data + dataProcessed, dataToProcess); - - cphd::byteSwap(mScratch.data(), - elementSize, - dataToProcess / elementSize, - mNumThreads); - - mStream->write(mScratch.data(), dataToProcess); - - dataProcessed += dataToProcess; - } -} - -DataWriterBigEndian::DataWriterBigEndian( - std::shared_ptr stream, size_t numThreads) : - DataWriter(stream, numThreads) -{ -} - -void DataWriterBigEndian::operator()(const sys::ubyte* data, - size_t numElements, - size_t elementSize) -{ - mStream->write(data, - numElements * elementSize); -} - -void CPHDWriter::initializeDataWriter() -{ - // Get the correct dataWriter. - // The CPHD file needs to be big endian. - auto endianness = std::endian::native; // "conditional expression is constant" - if (endianness == std::endian::big) - { - mDataWriter = std::make_unique(mStream, mNumThreads); - } - else - { - mDataWriter = std::make_unique(mStream, - mNumThreads, - mScratchSpaceSize); - } -} - CPHDWriter::CPHDWriter(const Metadata& metadata, std::shared_ptr outStream, @@ -127,7 +52,9 @@ CPHDWriter::CPHDWriter(const Metadata& metadata, mSchemaPaths(schemaPaths), mStream(outStream) { - initializeDataWriter(); + // Get the correct dataWriter. + // The CPHD file needs to be big endian. + mDataWriter = make_DataWriter(*mStream, mNumThreads, mScratchSpaceSize); } CPHDWriter::CPHDWriter(const Metadata& metadata, @@ -135,16 +62,12 @@ CPHDWriter::CPHDWriter(const Metadata& metadata, const std::vector& schemaPaths, size_t numThreads, size_t scratchSpaceSize) : - mMetadata(metadata), - mElementSize(metadata.data.getNumBytesPerSample()), - mScratchSpaceSize(scratchSpaceSize), - mNumThreads(numThreads), - mSchemaPaths(schemaPaths) + CPHDWriter(metadata, + std::make_shared(pathname), // Initialize output stream + schemaPaths, + numThreads, + scratchSpaceSize) { - // Initialize output stream - mStream = std::make_shared(pathname); - - initializeDataWriter(); } void CPHDWriter::writeMetadata(size_t supportSize, diff --git a/six/modules/c++/cphd/source/DataWriter.cpp b/six/modules/c++/cphd/source/DataWriter.cpp new file mode 100644 index 0000000000..6196712990 --- /dev/null +++ b/six/modules/c++/cphd/source/DataWriter.cpp @@ -0,0 +1,83 @@ +/* ========================================================================= + * This file is part of cphd-c++ + * ========================================================================= + * + * (C) Copyright 2004 - 2019, MDA Information Systems LLC + * + * cphd-c++ is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; If not, + * see . + * + */ +#include + +#include +#include + +#include + +#include +#undef min +#undef max + + +namespace cphd +{ +DataWriter::DataWriter(io::OutputStream& stream, size_t numThreads) : + mStream(stream), + mNumThreads(numThreads == 0 ? std::thread::hardware_concurrency() : numThreads) +{ +} + +DataWriterLittleEndian::DataWriterLittleEndian( + io::OutputStream& stream, + size_t numThreads, + size_t scratchSize) : + DataWriter(stream, numThreads), + mScratch(scratchSize) +{ +} +void DataWriterLittleEndian::operator()(const void* pData, size_t numElements, size_t elementSize) +{ + const auto data = static_cast(pData); + + size_t dataProcessed = 0; + const size_t dataSize = numElements * elementSize; + while (dataProcessed < dataSize) + { + const size_t dataToProcess = + std::min(mScratch.size(), dataSize - dataProcessed); + + memcpy(mScratch.data(), data + dataProcessed, dataToProcess); + + cphd::byteSwap(mScratch.data(), + elementSize, + dataToProcess / elementSize, + mNumThreads); + + mStream.write(mScratch.data(), dataToProcess); + + dataProcessed += dataToProcess; + } +} + +DataWriterBigEndian::DataWriterBigEndian(io::OutputStream& stream, size_t numThreads) : + DataWriter(stream, numThreads) +{ +} +void DataWriterBigEndian::operator()(const void* data, size_t numElements, size_t elementSize) +{ + mStream.write(data, numElements * elementSize); +} + +} diff --git a/six/modules/c++/cphd03/include/cphd03/CPHDWriter.h b/six/modules/c++/cphd03/include/cphd03/CPHDWriter.h index 22566a88b5..e02924c28b 100644 --- a/six/modules/c++/cphd03/include/cphd03/CPHDWriter.h +++ b/six/modules/c++/cphd03/include/cphd03/CPHDWriter.h @@ -42,7 +42,7 @@ namespace cphd03 * \brief Used to write a CPHD file. You must be able to provide the * appropriate metadata and vector based metadata. */ -struct CPHDWriter +struct CPHDWriter final { /* * \func Constructor @@ -90,6 +90,13 @@ struct CPHDWriter size_t numThreads = 0, size_t scratchSpaceSize = 4 * 1024 * 1024); + CPHDWriter() = delete; + CPHDWriter(const CPHDWriter&) = delete; + CPHDWriter& operator=(const CPHDWriter&) = delete; + CPHDWriter(CPHDWriter&&) = delete; + CPHDWriter& operator=(CPHDWriter&&) = delete; + ~CPHDWriter() = default; + /* * \func addImage * \brief Pushes a new image to the file for writing. This only works with @@ -168,10 +175,11 @@ struct CPHDWriter void close() { - if (mStream.get()) - { - mStream->close(); - } + mStream->close(); + } + std::shared_ptr getStream() const + { + return mStream; } private: @@ -187,7 +195,6 @@ struct CPHDWriter size_t size); std::unique_ptr mDataWriter; - void initializeDataWriter(); Metadata mMetadata; const size_t mElementSize; @@ -199,8 +206,8 @@ struct CPHDWriter std::vector mCPHDData; std::vector mVBMData; - size_t mCPHDSize; - size_t mVBMSize; + size_t mCPHDSize = 0; + size_t mVBMSize = 0; }; } diff --git a/six/modules/c++/cphd03/source/CPHDWriter.cpp b/six/modules/c++/cphd03/source/CPHDWriter.cpp index 75ce7160d6..91d5d93537 100644 --- a/six/modules/c++/cphd03/source/CPHDWriter.cpp +++ b/six/modules/c++/cphd03/source/CPHDWriter.cpp @@ -34,22 +34,6 @@ namespace cphd03 { -void CPHDWriter::initializeDataWriter() -{ - //! Get the correct dataWriter. - // The CPHD file needs to be big endian. - auto endianness = std::endian::native; // "conditional expression is constant" - if (endianness == std::endian::big) - { - mDataWriter = std::make_unique(mStream, mNumThreads); - } - else - { - mDataWriter = std::make_unique(mStream, mNumThreads, mScratchSpaceSize); - } -} - - CPHDWriter::CPHDWriter(const Metadata& metadata, std::shared_ptr stream, size_t numThreads, @@ -58,28 +42,22 @@ CPHDWriter::CPHDWriter(const Metadata& metadata, mElementSize(metadata.data.getNumBytesPerSample()), mScratchSpaceSize(scratchSpaceSize), mNumThreads(numThreads), - mStream(stream), - mCPHDSize(0), - mVBMSize(0) + mStream(stream) { - initializeDataWriter(); + //! Get the correct dataWriter. + // The CPHD file needs to be big endian. + mDataWriter = cphd::make_DataWriter(*mStream, mNumThreads, mScratchSpaceSize); } CPHDWriter::CPHDWriter(const Metadata& metadata, const std::string& pathname, size_t numThreads, size_t scratchSpaceSize) : - mMetadata(metadata), - mElementSize(metadata.data.getNumBytesPerSample()), - mScratchSpaceSize(scratchSpaceSize), - mNumThreads(numThreads), - mCPHDSize(0), - mVBMSize(0) -{ - // Create file stream to write - mStream = std::make_shared(pathname); - - initializeDataWriter(); + CPHDWriter(metadata, + std::make_shared(pathname), // Create file stream to write + numThreads, + scratchSpaceSize) +{ } template