15 #ifndef PANDAFILESTREAMBUF_H
16 #define PANDAFILESTREAMBUF_H
18 #include "dtoolbase.h"
20 #ifdef USE_PANDAFILESTREAM
23 #ifndef WIN32_LEAN_AND_MEAN
24 #define WIN32_LEAN_AND_MEAN 1
34 class EXPCL_DTOOL PandaFileStreamBuf :
public streambuf {
37 virtual ~PandaFileStreamBuf();
39 void open(
const char *filename, ios::openmode mode);
41 void attach(
const char *filename, HANDLE handle, ios::openmode mode);
43 void attach(
const char *filename,
int fd, ios::openmode mode);
56 static NewlineMode _newline_mode;
59 virtual streampos seekoff(streamoff off, ios_seekdir dir, ios_openmode which);
60 virtual streampos seekpos(streampos pos, ios_openmode which);
62 virtual int overflow(
int c);
64 virtual int underflow();
67 size_t read_chars(
char *start,
size_t length);
68 size_t write_chars(
const char *start,
size_t length);
70 size_t read_chars_raw(
char *start,
size_t length);
71 size_t write_chars_raw(
const char *start,
size_t length);
73 size_t decode_newlines(
char *dest,
size_t dest_length,
74 const char *source,
size_t source_length);
76 size_t encode_newlines_msdos(
char *dest,
size_t dest_length,
77 const char *source,
size_t source_length);
78 size_t encode_newlines_unix(
char *dest,
size_t dest_length,
79 const char *source,
size_t source_length);
80 size_t encode_newlines_mac(
char *dest,
size_t dest_length,
81 const char *source,
size_t source_length);
86 ios::openmode _open_mode;
101 EXPCL_DTOOL ostream &
102 operator << (ostream &out, PandaFileStreamBuf::NewlineMode newline_mode);
104 EXPCL_DTOOL istream &
105 operator >> (istream &in, PandaFileStreamBuf::NewlineMode &newline_mode);
107 #endif // USE_PANDAFILESTREAM