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