1 #pragma once
2 
3 #include <map>
4 #include <list>
5 #include <string>
6 #include <memory>
7 #include "ZipDefs.h"
8 #include "Stream.h"
9 
10 namespace Framework
11 {
12 	class CZipArchiveReader
13 	{
14 	public:
15 		typedef std::map<std::string, Zip::ZIPDIRFILEHEADER> FileHeaderList;
16 		typedef std::shared_ptr<Framework::CStream> StreamPtr;
17 		typedef std::list<std::string> FileNameList;
18 
19 										CZipArchiveReader(Framework::CStream&);
20 		virtual							~CZipArchiveReader();
21 
22 		//Non-copyable
23 										CZipArchiveReader(const CZipArchiveReader&) = delete;
24 		CZipArchiveReader&				operator =(const CZipArchiveReader&) = delete;
25 
26 		const FileHeaderList&			GetFileHeaders() const;
27 
28 		StreamPtr						BeginReadFile(const char*);
29 		const Zip::ZIPDIRFILEHEADER*	GetFileHeader(const char*) const;
30 		FileNameList					GetFileNameList(const char*);
31 
32 	private:
33 		void							Read(Framework::CStream&);
34 		void							EndReadFile(Framework::CStream*);
35 
36 		Framework::CStream&				m_stream;
37 		FileHeaderList					m_files;
38 		bool							m_readingLock;
39 	};
40 }
41