diff --git a/include/sp/io/FileIO.h b/include/sp/io/FileIO.h index 23a659b..2729616 100644 --- a/include/sp/io/FileIO.h +++ b/include/sp/io/FileIO.h @@ -10,23 +10,30 @@ struct FileTag {}; template <> class IOInterface { private: - std::ofstream m_FileOutput; - std::ifstream m_FileInput; + std::unique_ptr m_FileInput; + std::unique_ptr m_FileOutput; public: - IOInterface(const std::string& filePath) : m_FileOutput(filePath), m_FileInput(filePath) {} + IOInterface(const std::string& fileInput, const std::string& fileOutput) { + if (!fileInput.empty()) + m_FileInput = std::make_unique(fileInput); + if (!fileOutput.empty()) + m_FileOutput = std::make_unique(fileOutput); + } IOInterface(IOInterface&& other) : m_FileOutput(std::move(other.m_FileOutput)), m_FileInput(std::move(other.m_FileInput)) {} DataBuffer Read(std::size_t a_Amount) { DataBuffer buffer; buffer.Resize(a_Amount); - m_FileInput.read(reinterpret_cast(buffer.data()), a_Amount); + assert(m_FileInput != nullptr); + m_FileInput->read(reinterpret_cast(buffer.data()), a_Amount); return buffer; } void Write(const sp::DataBuffer& a_Data) { - m_FileOutput.write(reinterpret_cast(a_Data.data()), a_Data.GetSize()); - m_FileOutput.flush(); + assert(m_FileOutput != nullptr); + m_FileOutput->write(reinterpret_cast(a_Data.data()), a_Data.GetSize()); + m_FileOutput->flush(); } }; diff --git a/test/test_file.cpp b/test/test_file.cpp index 35d9251..727a5bd 100644 --- a/test/test_file.cpp +++ b/test/test_file.cpp @@ -23,7 +23,7 @@ using FileStream = sp::IOStream(); - FileStream stream(sp::FileIO{"test.txt"}); + FileStream stream(sp::FileIO{"test.txt", "text.txt"}); stream.GetDispatcher().RegisterHandler(PacketId::Disconnect, handler); stream.GetDispatcher().RegisterHandler(PacketId::KeepAlive, handler);