From b0799b6e4627ca7ad483c49e04f17bd40c8feae0 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 23 May 2013 23:12:32 +0900 Subject: Introduce IOFile abstract class to refactor BufferedFile and GZipFile IOFile provides the same interface of old BufferedFile. It provides extension points as pure virtual functions. Those functions are implemented by 2 concrete subclasses: BufferedFile and GZipFile. --- src/BufferedFile.h | 59 +++++++++++++++--------------------------------------- 1 file changed, 16 insertions(+), 43 deletions(-) (limited to 'src/BufferedFile.h') diff --git a/src/BufferedFile.h b/src/BufferedFile.h index 7eb6a36d..f3612fc4 100644 --- a/src/BufferedFile.h +++ b/src/BufferedFile.h @@ -35,69 +35,42 @@ #ifndef D_BUFFERED_FILE_H #define D_BUFFERED_FILE_H -#include "OutputFile.h" +#include "IOFile.h" #include -#include -#include namespace aria2 { -// This is a wrapper class for fopen/fclose/fread/fwrite/fgets. -class BufferedFile:public OutputFile { -private: - typedef void (BufferedFile::*unspecified_bool_type)() const; - void good_state() const {} +// IOFILE implementation using standard I/O functions. +class BufferedFile:public IOFile { public: BufferedFile(const char* filename, const char* mode); BufferedFile(FILE* fp); virtual ~BufferedFile(); - // Returns true if file is opened and ferror returns 0. Otherwise - // returns false. - operator unspecified_bool_type() const; +protected: // wrapper for fread. Using 1 for 2nd argument of fread. - virtual size_t read(void* ptr, size_t count); + virtual size_t onRead(void* ptr, size_t count); // wrapper for fwrite. Using 1 for 2nd argument of fwrite. - virtual size_t write(const void* ptr, size_t count); - virtual size_t write(const char* str); + virtual size_t onWrite(const void* ptr, size_t count); // wrapper for fgets - virtual char* gets(char* s, int size); - // wrapper for fgets, but trailing '\n' is replaced with '\0'. - char* getsn(char* s, int size); - // Reads one line and returns it. The last '\n' is removed. - std::string getLine(); - // wrapper for fclose - virtual int close(); - // Return true if open_ && feof(fp_) != 0. Otherwise returns false. - bool eof(); - // Convenient method. Read data to end of file and write them into - // given stream. Returns written size. - size_t transfer(std::ostream& out); - virtual int vprintf(const char* format, va_list va); + virtual char* onGets(char* s, int size); + virtual int onVprintf(const char* format, va_list va); // wrapper for fflush - virtual int flush(); - virtual bool supportsColor(); - // Mode for reading - static const char READ[]; - // Mode for writing - static const char WRITE[]; - // Mode for append - static const char APPEND[]; - + virtual int onFlush(); + // wrapper for fclose + virtual int onClose(); + virtual bool onSupportsColor(); + virtual bool isError() const; + virtual bool isEOF() const; + virtual bool isOpen() const; private: - // Don't allow copying + // Don't allow copying; BufferedFile(const BufferedFile&); BufferedFile& operator=(const BufferedFile&); FILE* fp_; bool open_; bool supportsColor_; - -protected: - virtual bool isError() const { return ferror(fp_); } - virtual bool isEOF() const { return feof(fp_); } - virtual bool isOpen() const { return open_; } - }; } // namespace aria2 -- cgit