1 // Transparently decompresses gzip files, as well as uncompressed
2 
3 // File_Extractor 1.0.0
4 #ifndef GZIP_READER_H
5 #define GZIP_READER_H
6 
7 #include "Data_Reader.h"
8 #include "Zlib_Inflater.h"
9 
10 class Gzip_Reader : public Data_Reader {
11 public:
12 	// Keeps pointer to reader until close(). If
13 	blargg_err_t open( File_Reader* );
14 
15 	// True if file is open
opened()16 	bool opened() const                 { return in != NULL; }
17 
18 	// Frees memory
19 	void close();
20 
21 	// True if file is compressed
deflated()22 	bool deflated() const               { return inflater.deflated(); }
23 
24 	// CRC-32 of data, of 0 if unavailable
crc32()25 	unsigned int crc32() const          { return crc32_; }
26 
27 	// Number of bytes read since opening
tell()28 	int tell() const                    { return size_ - remain(); }
29 
30 public:
31 	Gzip_Reader();
32 	virtual ~Gzip_Reader();
33 
34 protected:
35 	virtual blargg_err_t read_v( void*, int );
36 
37 private:
38 	File_Reader* in;
39 	unsigned crc32_;
40 	int size_;
41 	Zlib_Inflater inflater;
42 
43 	blargg_err_t calc_size();
44 };
45 
46 #endif
47