00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _DECAF_IO_PUSHBACKINPUTSTREAM_H_
00019 #define _DECAF_IO_PUSHBACKINPUTSTREAM_H_
00020
00021 #include <decaf/util/Config.h>
00022
00023 #include <decaf/io/InputStream.h>
00024 #include <decaf/io/FilterInputStream.h>
00025
00026 namespace decaf {
00027 namespace io {
00028
00042 class PushbackInputStream: public FilterInputStream {
00043 private:
00044
00045 unsigned char* buffer;
00046 int bufferSize;
00047 int pos;
00048
00049 private:
00050
00051 PushbackInputStream(const PushbackInputStream&);
00052 PushbackInputStream& operator=(const PushbackInputStream&);
00053
00054 public:
00055
00065 PushbackInputStream(InputStream* stream, bool own = false);
00066
00080 PushbackInputStream(InputStream* stream, int bufSize, bool own = false);
00081
00082 virtual ~PushbackInputStream();
00083
00094 void unread(unsigned char value);
00095
00110 void unread(const unsigned char* buffer, int size);
00111
00130 void unread(const unsigned char* buffer, int size, int offset, int length);
00131
00138 virtual int available() const;
00139
00147 virtual long long skip(long long num);
00148
00154 virtual void mark(int readLimit);
00155
00161 virtual void reset();
00162
00168 virtual bool markSupported() const {
00169 return false;
00170 }
00171
00172 protected:
00173
00174 virtual int doReadByte();
00175
00176 virtual int doReadArrayBounded(unsigned char* buffer, int size, int offset, int length);
00177
00178 };
00179
00180 }}
00181
00182 #endif