00001 #ifndef __BUFFEREDREADER_H__
00002 #define __BUFFEREDREADER_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 namespace jcpp {
00015
00017 class BufferedReader : public virtual Reader {
00018 private:
00019 CDELETE Reader* in;
00020
00021 char* cb;
00022 long nChars;
00023 int nextChar;
00024 int maxChars;
00025 long defaultCharBufferSize;
00026 long defaultExpectedLineLength;
00027 CDELETE StringBuffer* sb;
00028 public:
00029 BufferedReader(Reader* in);
00031 virtual void close() {
00032 in->close();
00033 }
00035 virtual void mark() {
00036 en((char *)"not allowed to use mark() in Reader");
00037 }
00039 virtual boolean markSupported() {
00040 return FALSE;
00041 }
00043 virtual int read();
00045 virtual int read(char* cbuf, int length) {
00046 return read(cbuf, 0 , length);
00047 }
00048 private:
00052 int preRead(char* cbuf, int off, int length);
00053 public:
00054
00057 virtual int read(char* cbuf, int off, int length);
00059 virtual boolean ready() {
00060 return (nextChar < nChars) || in->ready();
00061 }
00064 virtual void reset() {
00065 en((char *)":-( Reader::reset() not supported");
00066 }
00068 virtual long skip(long length);
00070 virtual CFREE char* readLine();
00071 private:
00074 int findLineInBuffer();
00076 void fill();
00077 protected:
00079 void en(char* str) {
00080 ::fprintf(stderr, "%s\n", str);
00081 }
00082
00083 };
00084
00085 } ENDSEMI
00086
00087
00088 #endif // __BUFFEREDREADER_H__