Path: blob/main/misc/emulator/xnes/snes9x/jma/iiostrm.h
28798 views
/*1Copyright (C) 2005-2006 NSRT Team ( http://nsrt.edgeemu.com )2Copyright (C) 2002 Andrea Mazzoleni ( http://advancemame.sf.net )3Copyright (C) 2001-4 Igor Pavlov ( http://www.7-zip.org )45This library is free software; you can redistribute it and/or6modify it under the terms of the GNU Lesser General Public7License version 2.1 as published by the Free Software Foundation.89This library is distributed in the hope that it will be useful,10but WITHOUT ANY WARRANTY; without even the implied warranty of11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU12Lesser General Public License for more details.1314You should have received a copy of the GNU Lesser General Public15License along with this library; if not, write to the Free Software16Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA17*/1819#ifndef __IINOUTSTREAMS_H20#define __IINOUTSTREAMS_H2122#include <string>23#include <fstream>2425#include "portable.h"262728class ISequentialInStream29{30public:31virtual HRESULT Read(void *, UINT32, UINT32 *) = 0;3233virtual ~ISequentialInStream() {}34};353637class ISequentialInStream_Array : public ISequentialInStream38{39const char *data;40unsigned int size;41public:42ISequentialInStream_Array(const char *Adata, unsigned Asize) : data(Adata), size(Asize) { }4344HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize);4546virtual ~ISequentialInStream_Array() {}47};4849class ISequentialInStream_String : public ISequentialInStream50{51std::string& data;52public:53ISequentialInStream_String(std::string& Adata) : data(Adata) { }5455HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize);5657virtual ~ISequentialInStream_String() {}58};5960class ISequentialInStream_Istream : public ISequentialInStream61{62std::istream& data;63public:64ISequentialInStream_Istream(std::istream& Adata) : data(Adata) { }6566HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize);6768virtual ~ISequentialInStream_Istream() {}69};70717273class ISequentialOutStream74{75public:76virtual bool overflow_get() const = 0;77virtual unsigned int size_get() const = 0;7879virtual HRESULT Write(const void *, UINT32, UINT32 *) = 0;8081virtual ~ISequentialOutStream() {}82};838485class ISequentialOutStream_Array : public ISequentialOutStream86{87char *data;88unsigned int size;89bool overflow;90unsigned int total;91public:92ISequentialOutStream_Array(char *Adata, unsigned Asize) : data(Adata), size(Asize), overflow(false), total(0) { }9394bool overflow_get() const { return(overflow); }95unsigned int size_get() const { return(total); }9697HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize);9899virtual ~ISequentialOutStream_Array() {}100};101102class ISequentialOutStream_String : public ISequentialOutStream103{104std::string& data;105unsigned int total;106public:107ISequentialOutStream_String(std::string& Adata) : data(Adata), total(0) { }108109bool overflow_get() const { return(false); }110unsigned int size_get() const { return(total); }111112HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize);113114virtual ~ISequentialOutStream_String() {}115};116117118class ISequentialOutStream_Ostream : public ISequentialOutStream119{120std::ostream& data;121unsigned int total;122public:123ISequentialOutStream_Ostream(std::ostream& Adata) : data(Adata), total(0) { }124125bool overflow_get() const { return(false); }126unsigned int size_get() const { return(total); }127128HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize);129130virtual ~ISequentialOutStream_Ostream() {}131};132133134135class ISequentialStreamCRC32136{137protected:138unsigned int crc32;139public:140ISequentialStreamCRC32() : crc32(0) {}141unsigned int crc32_get() const { return(crc32); }142143virtual ~ISequentialStreamCRC32() {}144};145146147class ISequentialInStreamCRC32_Array : public ISequentialInStream_Array, public ISequentialStreamCRC32148{149public:150ISequentialInStreamCRC32_Array(const char *Adata, unsigned Asize) : ISequentialInStream_Array(Adata, Asize) { }151152HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize);153154virtual ~ISequentialInStreamCRC32_Array() {}155};156157class ISequentialInStreamCRC32_String : public ISequentialInStream_String, public ISequentialStreamCRC32158{159public:160ISequentialInStreamCRC32_String(std::string& Adata) : ISequentialInStream_String(Adata) { }161162HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize);163164virtual ~ISequentialInStreamCRC32_String() {}165};166167class ISequentialInStreamCRC32_Istream : public ISequentialInStream_Istream, public ISequentialStreamCRC32168{169public:170ISequentialInStreamCRC32_Istream(std::istream& Adata) : ISequentialInStream_Istream(Adata) { }171172HRESULT Read(void *aData, UINT32 aSize, UINT32 *aProcessedSize);173174virtual ~ISequentialInStreamCRC32_Istream() {}175};176177178class ISequentialOutStreamCRC32_Array : public ISequentialOutStream_Array, public ISequentialStreamCRC32179{180public:181ISequentialOutStreamCRC32_Array(char *Adata, unsigned Asize) : ISequentialOutStream_Array(Adata, Asize) { }182183HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize);184185virtual ~ISequentialOutStreamCRC32_Array() {}186};187188class ISequentialOutStreamCRC32_String : public ISequentialOutStream_String, public ISequentialStreamCRC32189{190public:191ISequentialOutStreamCRC32_String(std::string& Adata) : ISequentialOutStream_String(Adata) { }192193HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize);194195virtual ~ISequentialOutStreamCRC32_String() {}196};197198199class ISequentialOutStreamCRC32_Ostream : public ISequentialOutStream_Ostream, public ISequentialStreamCRC32200{201public:202ISequentialOutStreamCRC32_Ostream(std::ostream& Adata) : ISequentialOutStream_Ostream(Adata) { }203204HRESULT Write(const void *aData, UINT32 aSize, UINT32 *aProcessedSize);205206virtual ~ISequentialOutStreamCRC32_Ostream() {}207};208209#endif210211212