diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-05-23 23:12:32 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-05-23 23:12:32 +0900 |
| commit | b0799b6e4627ca7ad483c49e04f17bd40c8feae0 (patch) | |
| tree | 179a13dc8bc9377bd8c7423905ffa827ef2403f4 /src/BufferedFile.cc | |
| parent | 6c0fa43fa583ad41a31a0191de6783cb856da55b (diff) | |
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.
Diffstat (limited to 'src/BufferedFile.cc')
| -rw-r--r-- | src/BufferedFile.cc | 92 |
1 files changed, 19 insertions, 73 deletions
diff --git a/src/BufferedFile.cc b/src/BufferedFile.cc index 62b8e87d..44ea076e 100644 --- a/src/BufferedFile.cc +++ b/src/BufferedFile.cc @@ -43,10 +43,6 @@ namespace aria2 { -const char BufferedFile::READ[] = "rb"; -const char BufferedFile::WRITE[] = "wb"; -const char BufferedFile::APPEND[] = "ab"; - BufferedFile::BufferedFile(const char* filename, const char* mode) : #ifdef __MINGW32__ @@ -67,67 +63,22 @@ BufferedFile::~BufferedFile() close(); } -BufferedFile::operator unspecified_bool_type() const -{ - bool ok = isOpen() && !isError(); - return ok ? &BufferedFile::good_state : 0; -} - -size_t BufferedFile::read(void* ptr, size_t count) +size_t BufferedFile::onRead(void* ptr, size_t count) { return fread(ptr, 1, count, fp_); } -size_t BufferedFile::write(const void* ptr, size_t count) +size_t BufferedFile::onWrite(const void* ptr, size_t count) { return fwrite(ptr, 1, count, fp_); } -size_t BufferedFile::write(const char* str) -{ - return write(str, strlen(str)); -} - -char* BufferedFile::gets(char* s, int size) +char* BufferedFile::onGets(char* s, int size) { return fgets(s, size, fp_); } -char* BufferedFile::getsn(char* s, int size) -{ - char* ptr = gets(s, size); - if(ptr) { - int len = strlen(ptr); - if(ptr[len-1] == '\n') { - ptr[len-1] = '\0'; - } - } - return ptr; -} - -std::string BufferedFile::getLine() -{ - std::string res; - if(eof()) { - return res; - } - char buf[4096]; - while(gets(buf, sizeof(buf))) { - size_t len = strlen(buf); - bool lineBreak = false; - if(buf[len-1] == '\n') { - --len; - lineBreak = true; - } - res.append(buf, len); - if(lineBreak) { - break; - } - } - return res; -} - -int BufferedFile::close() +int BufferedFile::onClose() { if (open_) { open_ = false; @@ -136,39 +87,34 @@ int BufferedFile::close() return 0; } -bool BufferedFile::eof() +int BufferedFile::onVprintf(const char* format, va_list va) { - return !isOpen()|| isEOF(); + return vfprintf(fp_, format, va); } -size_t BufferedFile::transfer(std::ostream& out) +int BufferedFile::onFlush() { - size_t count = 0; - char buf[4096]; - while(1) { - size_t r = this->read(buf, sizeof(buf)); - out.write(buf, r); - count += r; - if(r < sizeof(buf)) { - break; - } - } - return count; + return fflush(fp_); } -int BufferedFile::vprintf(const char* format, va_list va) +bool BufferedFile::onSupportsColor() { - return vfprintf(fp_, format, va); + return supportsColor_; } -int BufferedFile::flush() +bool BufferedFile::isError() const { - return fflush(fp_); + return ferror(fp_); } -bool BufferedFile::supportsColor() +bool BufferedFile::isEOF() const { - return supportsColor_; + return feof(fp_); +} + +bool BufferedFile::isOpen() const +{ + return open_; } } // namespace aria2 |
