summaryrefslogtreecommitdiff
path: root/src/BufferedFile.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-05-23 23:12:32 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-05-23 23:12:32 +0900
commitb0799b6e4627ca7ad483c49e04f17bd40c8feae0 (patch)
tree179a13dc8bc9377bd8c7423905ffa827ef2403f4 /src/BufferedFile.cc
parent6c0fa43fa583ad41a31a0191de6783cb856da55b (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.cc92
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