#include <ofile_streambuf.hpp>
Inherits streambuf.
Public Member Functions | |
OFileStreambuf (const std::string &filename) | |
~OFileStreambuf () | |
Protected Member Functions | |
virtual int | overflow (int c) |
virtual int | sync () |
Private Member Functions | |
OFileStreambuf (const OFileStreambuf &) | |
OFileStreambuf & | operator= (const OFileStreambuf &) |
Private Attributes | |
PHYSFS_file * | file |
char | buf [1024] |
Definition at line 23 of file ofile_streambuf.hpp.
OFileStreambuf::OFileStreambuf | ( | const std::string & | filename | ) |
Definition at line 22 of file ofile_streambuf.cpp.
00022 : 00023 file() 00024 { 00025 file = PHYSFS_openWrite(filename.c_str()); 00026 if(file == 0) { 00027 std::stringstream msg; 00028 msg << "Couldn't open file '" << filename << "': " 00029 << PHYSFS_getLastError(); 00030 throw std::runtime_error(msg.str()); 00031 } 00032 00033 setp(buf, buf+sizeof(buf)); 00034 }
OFileStreambuf::~OFileStreambuf | ( | ) |
OFileStreambuf::OFileStreambuf | ( | const OFileStreambuf & | ) | [private] |
int OFileStreambuf::overflow | ( | int | c | ) | [protected, virtual] |
Definition at line 43 of file ofile_streambuf.cpp.
Referenced by sync().
00044 { 00045 char c2 = (char)c; 00046 00047 if(pbase() == pptr()) 00048 return 0; 00049 00050 size_t size = pptr() - pbase(); 00051 PHYSFS_sint64 res = PHYSFS_write(file, pbase(), 1, size); 00052 if(res <= 0) 00053 return traits_type::eof(); 00054 00055 if(c != traits_type::eof()) { 00056 PHYSFS_sint64 res = PHYSFS_write(file, &c2, 1, 1); 00057 if(res <= 0) 00058 return traits_type::eof(); 00059 } 00060 00061 setp(buf, buf + res); 00062 return 0; 00063 }
int OFileStreambuf::sync | ( | ) | [protected, virtual] |
Definition at line 66 of file ofile_streambuf.cpp.
References overflow().
Referenced by ~OFileStreambuf().
00067 { 00068 return overflow(traits_type::eof()); 00069 }
OFileStreambuf& OFileStreambuf::operator= | ( | const OFileStreambuf & | ) | [private] |
PHYSFS_file* OFileStreambuf::file [private] |
Definition at line 34 of file ofile_streambuf.hpp.
Referenced by OFileStreambuf(), overflow(), and ~OFileStreambuf().
char OFileStreambuf::buf[1024] [private] |