123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #pragma once
- #include "IO.Stream.hpp"
- #include "Utility.Either+Error.hpp"
- #pragma warning (disable : 4275)
- // warning C4275 : 非 dll 接口 class“ECOM::IO::Stream::IStream”用作 dll 接口 class“ECOM::IO::Stream::IFileStream”的基
- #ifndef _IO_FileStream_EXPORTS
- #define _IO_FileStream_API _declspec(dllimport)
- #else
- #define _IO_FileStream_API _declspec(dllexport)
- #endif
- #ifndef _IO_FileStream_EXPORTS
- #ifdef _WIN64
- #ifdef _DEBUG
- #pragma comment (lib, "ECOM.IO.FileStream64D.lib")
- #else
- #pragma comment (lib, "ECOM.IO.FileStream64.lib")
- #endif
- #else // X86
- #ifdef _DEBUG
- #pragma comment (lib, "ECOM.IO.FileStreamD.lib")
- #else
- #pragma comment (lib, "ECOM.IO.FileStream.lib")
- #endif
- #endif
- #endif // _IO_FileStream_EXPORTS
- //-----------------------------------------------------------------------------
- // IFileStream, OFileStream
- // 给定文件名, 生成流
- //-----------------------------------------------------------------------------
- namespace ECOM::IO::Stream
- {
- enum class enShareMode
- {
- shareCompat = (int)0x00000,
- shareExclusive = (int)0x00010,
- shareDenyWrite = (int)0x00020,
- shareDenyRead = (int)0x00030,
- shareDenyNone = (int)0x00040,
- };
- class _IO_FileStream_API IFileStream : public ECOM::IO::Stream::IStream
- {
- using base = ECOM::IO::Stream::IStream;
- public:
- IFileStream ();
- IFileStream (const wchar_t * filename, enShareMode mode = enShareMode::shareDenyWrite);
- virtual ~IFileStream ();
- IFileStream & operator = (IFileStream && from)
- {
- m_NIB = std::move (from.m_NIB);
- return (*this);
- }
- IFileStream (IFileStream && from);
- IFileStream (const IFileStream & from) = delete;
- IFileStream & operator = (const IFileStream & from) = delete;
- public:
- eiResult OpenForRead (const wchar_t * filename, enShareMode mode = enShareMode::shareDenyWrite);
- };
- class _IO_FileStream_API OFileStream : public ECOM::IO::Stream::OStream
- {
- using base = ECOM::IO::Stream::OStream;
- public:
- OFileStream ();
- OFileStream (const wchar_t * filename, enShareMode mode = enShareMode::shareDenyWrite);
- virtual ~OFileStream ();
- OFileStream & operator = (OFileStream && from)
- {
- m_NOB = std::move (from.m_NOB);
- return (*this);
- }
- OFileStream (OFileStream && from);
- OFileStream (const OFileStream & from) = delete;
- OFileStream & operator = (const OFileStream & from) = delete;
- public:
- eiResult OpenForWrite (const wchar_t * filename, enShareMode mode = enShareMode::shareDenyWrite);
- };
- }
- #include <memory>
- #include "HandleHolder.hpp"
- //-----------------------------------------------------------------------------
- // IStreamOnHandle, OStreamOnHandle
- // 给定文件句柄, 生成流
- // 句柄是以 shared_ptr <HandleHolder> 方式给的, 因此可以 IO 共享
- //-----------------------------------------------------------------------------
- namespace ECOM::IO::Stream
- {
- class _IO_FileStream_API IStreamOnHandle : public ECOM::IO::Stream::IStream
- {
- using base = ECOM::IO::Stream::IStream;
- public:
- IStreamOnHandle (std::shared_ptr <HandleHolder> Holder);
- virtual ~IStreamOnHandle ();
- IStreamOnHandle & operator = (IStreamOnHandle && from)
- {
- m_NIB = std::move (from.m_NIB);
- return (*this);
- }
- IStreamOnHandle (IStreamOnHandle && from);
- IStreamOnHandle (const IStreamOnHandle & from) = delete;
- IStreamOnHandle & operator = (const IStreamOnHandle & from) = delete;
- };
- class _IO_FileStream_API OStreamOnHandle : public ECOM::IO::Stream::OStream
- {
- using base = ECOM::IO::Stream::OStream;
- public:
- OStreamOnHandle (std::shared_ptr <HandleHolder> Holder);
- virtual ~OStreamOnHandle ();
- OStreamOnHandle & operator = (OStreamOnHandle && from)
- {
- m_NOB = std::move (from.m_NOB);
- return (*this);
- }
- OStreamOnHandle (OStreamOnHandle && from);
- OStreamOnHandle (const OStreamOnHandle & from) = delete;
- OStreamOnHandle & operator = (const OStreamOnHandle & from) = delete;
- };
- }
|