class Reader { public: enum Type { Unknown, Normal, GZIP, ZIP, JMA, }; static Type detect(const char *fn, bool inspectheader); virtual unsigned size() = 0; virtual uint8_t* read(unsigned length = 0) = 0; virtual bool ready() { return true; } //can only call read() when ready() returns true };