00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _DECAF_IO_BYTEARRAYINPUTSTREAM_H_
00019 #define _DECAF_IO_BYTEARRAYINPUTSTREAM_H_
00020
00021 #include <decaf/io/InputStream.h>
00022 #include <decaf/util/concurrent/Mutex.h>
00023 #include <vector>
00024
00025 namespace decaf{
00026 namespace io{
00027
00042 class DECAF_API ByteArrayInputStream: public InputStream {
00043 private:
00044
00050 const unsigned char* buffer;
00051
00055 int size;
00056
00060 bool own;
00061
00068 int count;
00069
00075 int pos;
00076
00086 int markpos;
00087
00088 private:
00089
00090 ByteArrayInputStream(const ByteArrayInputStream&);
00091 ByteArrayInputStream& operator=(const ByteArrayInputStream&);
00092
00093 public:
00094
00099 ByteArrayInputStream();
00100
00108 ByteArrayInputStream(const std::vector<unsigned char>& buffer);
00109
00124 ByteArrayInputStream(const unsigned char* buffer, int bufferSize, bool own = false);
00125
00144 ByteArrayInputStream(const unsigned char* buffer, int bufferSize, int offset, int length, bool own = false);
00145
00146 virtual ~ByteArrayInputStream();
00147
00159 virtual void setByteArray(const std::vector<unsigned char>& buffer);
00160
00173 virtual void setByteArray(const unsigned char* buffer, int bufferSize);
00174
00191 virtual void setByteArray(const unsigned char* buffer, int bufferSize, int offset, int length);
00192
00196 virtual int available() const;
00197
00201 virtual long long skip(long long num);
00202
00206 virtual void mark(int readLimit);
00207
00211 virtual void reset();
00212
00216 virtual bool markSupported() const {
00217 return true;
00218 }
00219
00220 protected:
00221
00222 virtual int doReadByte();
00223
00224 virtual int doReadArrayBounded(unsigned char* buffer, int size, int offset, int length);
00225
00226 };
00227
00228 }}
00229
00230 #endif