1 // Copyright (C) 2002-2012 Nikolaus Gebhardt
2 // This file is part of the "Irrlicht Engine".
3 // For conditions of distribution and use, see copyright notice in irrlicht.h
4 
5 #ifndef __C_MEMORY_READ_WRITE_FILE_H_INCLUDED__
6 #define __C_MEMORY_READ_WRITE_FILE_H_INCLUDED__
7 
8 #include "IWriteFile.h"
9 #include "IReadFile.h"
10 #include "irrArray.h"
11 #include "irrString.h"
12 #include "memory.h"
13 
14 namespace irr
15 {
16 namespace io
17 {
18 
19 	//! Provides write acess to an array as if it is a file.
20 	class CMemoryReadWriteFile : public virtual IWriteFile, public virtual IReadFile
21 	{
22 	public:
23 
24 		CMemoryReadWriteFile(const c8* filename=0);
25 
26 		//! Reads an amount of bytes from the file.
27 		//! \param buffer: Pointer to buffer of bytes to write.
28 		//! \param sizeToWrite: Amount of bytes to wrtie to the file.
29 		//! \return Returns how much bytes were written.
30 		virtual s32 write(const void* buffer, u32 sizeToWrite);
31 
32 		//! Changes position in file, returns true if successful.
33 		//! \param finalPos: Destination position in the file.
34 		//! \param relativeMovement: If set to true, the position in the file is
35 		//! changed relative to current position. Otherwise the position is changed
36 		//! from begin of file.
37 		//! \return Returns true if successful, otherwise false.
38 		virtual bool seek(long finalPos, bool relativeMovement = false);
39 
40 		//! Returns size of file.
41 		//! \return Returns the size of the file in bytes.
42 		virtual long getSize() const;
43 
44 		//! Reads an amount of bytes from the file.
45 		//! \param buffer: Pointer to buffer where to read bytes will be written to.
46 		//! \param sizeToRead: Amount of bytes to read from the file.
47 		//! \return Returns how much bytes were read.
48 		virtual s32 read(void* buffer, u32 sizeToRead);
49 
50 		//! Returns the current position in the file.
51 		//! \return Returns the current position in the file in bytes.
52 		virtual long getPos() const;
53 
54 		//! Returns name of file.
55 		//! \return Returns the file name as zero terminated character string.
56 		virtual const io::path& getFileName() const;
57 
58 		//! Returns file data as an array
59 		core::array<c8>& getData();
60 
61 	private:
62 
63 		core::array<c8> Data;
64 		io::path FileName;
65 		long Pos;
66 	};
67 
68 
69 
70 } // end namespace io
71 } // end namespace irr
72 
73 #endif // __C_MEMORY_READ_WRITE_FILE_H_INCLUDED__
74