00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _DECAF_IO_READER_H
00018 #define _DECAF_IO_READER_H
00019
00020 #include <string>
00021 #include <decaf/lang/Readable.h>
00022 #include <decaf/io/Closeable.h>
00023 #include <decaf/io/IOException.h>
00024 #include <decaf/io/InputStream.h>
00025
00026 #include <decaf/lang/exceptions/IndexOutOfBoundsException.h>
00027 #include <decaf/lang/exceptions/NullPointerException.h>
00028
00029 namespace decaf{
00030 namespace io{
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 class DECAF_API Reader: public virtual decaf::io::Closeable, public virtual decaf::lang::Readable {
00041 private:
00042
00043 Reader(const Reader&);
00044 Reader& operator=(const Reader&);
00045
00046 protected:
00047
00048 Reader();
00049
00050 public:
00051
00052 virtual ~Reader();
00053
00065 virtual void mark(int readAheadLimit);
00066
00073 virtual bool markSupported() const {
00074 return false;
00075 }
00076
00085 virtual bool ready() const;
00086
00096 virtual void reset();
00097
00109 virtual long long skip(long long count);
00110
00122 virtual int read(std::vector<char>& buffer);
00123
00139 virtual int read(char* buffer, int size);
00140
00160 virtual int read(char* buffer, int size, int offset, int length);
00161
00174 virtual int read();
00175
00176 virtual int read(decaf::nio::CharBuffer* charBuffer);
00177
00178 protected:
00179
00187 virtual int doReadArrayBounded(char* buffer, int size, int offset, int length) = 0;
00188
00189 protected:
00190
00195 virtual int doReadVector(std::vector<char>& buffer);
00196
00201 virtual int doReadArray(char* buffer, int length);
00202
00207 virtual int doReadChar();
00208
00213 virtual int doReadCharBuffer(decaf::nio::CharBuffer* charBuffer);
00214
00215 };
00216
00217 }}
00218
00219 #endif