From a668761a640502f54637382d1420a5b58d89d725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Sat, 26 Mar 2016 00:15:05 -0700 Subject: [PATCH] readerwriter: Split open/close interfaces. --- include/bx/readerwriter.h | 45 ++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/include/bx/readerwriter.h b/include/bx/readerwriter.h index 245d158..2f1d4f5 100644 --- a/include/bx/readerwriter.h +++ b/include/bx/readerwriter.h @@ -230,38 +230,59 @@ namespace bx { }; - struct BX_NO_VTABLE FileReaderI : public ReaderSeekerI + struct BX_NO_VTABLE ReaderOpenI { + virtual ~ReaderOpenI() = 0; virtual bool open(const char* _filePath, Error* _err) = 0; - virtual void close() = 0; }; - struct BX_NO_VTABLE FileWriterI : public WriterSeekerI + inline ReaderOpenI::~ReaderOpenI() { + } + + struct BX_NO_VTABLE WriterOpenI + { + virtual ~WriterOpenI() = 0; virtual bool open(const char* _filePath, bool _append, Error* _err) = 0; + }; + + inline WriterOpenI::~WriterOpenI() + { + } + + struct BX_NO_VTABLE CloserI + { + virtual ~CloserI() = 0; virtual void close() = 0; }; - inline bool open(FileReaderI* _reader, const char* _filePath, Error* _err = NULL) + inline CloserI::~CloserI() + { + } + + struct BX_NO_VTABLE FileReaderI : public ReaderOpenI, public CloserI, public ReaderSeekerI + { + }; + + struct BX_NO_VTABLE FileWriterI : public WriterOpenI, public CloserI, public WriterSeekerI + { + }; + + inline bool open(ReaderOpenI* _reader, const char* _filePath, Error* _err = NULL) { BX_ERROR_USE_TEMP_WHEN_NULL(_err); return _reader->open(_filePath, _err); } - inline void close(FileReaderI* _reader) - { - _reader->close(); - } - - inline bool open(FileWriterI* _writer, const char* _filePath, bool _append = false, Error* _err = NULL) + inline bool open(WriterOpenI* _writer, const char* _filePath, bool _append = false, Error* _err = NULL) { BX_ERROR_USE_TEMP_WHEN_NULL(_err); return _writer->open(_filePath, _append, _err); } - inline void close(FileWriterI* _writer) + inline void close(CloserI* _reader) { - _writer->close(); + _reader->close(); } struct BX_NO_VTABLE MemoryBlockI