00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _DECAF_NIO_BYTEBUFFER_H_
00019 #define _DECAF_NIO_BYTEBUFFER_H_
00020
00021 #include <decaf/nio/Buffer.h>
00022 #include <decaf/lang/Comparable.h>
00023 #include <decaf/lang/exceptions/NullPointerException.h>
00024 #include <decaf/lang/exceptions/IndexOutOfBoundsException.h>
00025 #include <decaf/nio/BufferUnderflowException.h>
00026 #include <decaf/nio/BufferOverflowException.h>
00027 #include <decaf/nio/ReadOnlyBufferException.h>
00028
00029 namespace decaf{
00030 namespace nio{
00031
00032 class CharBuffer;
00033 class DoubleBuffer;
00034 class FloatBuffer;
00035 class ShortBuffer;
00036 class IntBuffer;
00037 class LongBuffer;
00038
00097 class DECAF_API ByteBuffer : public Buffer,
00098 public lang::Comparable<ByteBuffer> {
00099 protected:
00100
00111 ByteBuffer( int capacity );
00112
00113 public:
00114
00115 virtual ~ByteBuffer() {}
00116
00120 virtual std::string toString() const;
00121
00136 ByteBuffer& get( std::vector<unsigned char> buffer );
00137
00167 ByteBuffer& get( unsigned char* buffer, int size, int offset, int length );
00168
00189 ByteBuffer& put( ByteBuffer& src );
00190
00218 ByteBuffer& put( const unsigned char* buffer, int size, int offset, int length );
00219
00232 ByteBuffer& put( std::vector<unsigned char>& buffer );
00233
00234 public:
00235
00241 virtual bool isReadOnly() const = 0;
00242
00259 virtual unsigned char* array() = 0;
00260
00279 virtual int arrayOffset() const = 0;
00280
00290 virtual bool hasArray() const = 0;
00291
00305 virtual CharBuffer* asCharBuffer() const = 0;
00306
00321 virtual DoubleBuffer* asDoubleBuffer() const = 0;
00322
00337 virtual FloatBuffer* asFloatBuffer() const = 0;
00338
00353 virtual IntBuffer* asIntBuffer() const = 0;
00354
00369 virtual LongBuffer* asLongBuffer() const = 0;
00370
00385 virtual ShortBuffer* asShortBuffer() const = 0;
00386
00404 virtual ByteBuffer* asReadOnlyBuffer() const = 0;
00405
00424 virtual ByteBuffer& compact() = 0;
00425
00439 virtual ByteBuffer* duplicate() = 0;
00440
00450 virtual unsigned char get() const = 0;
00451
00463 virtual unsigned char get( int index ) const = 0;
00464
00474 virtual char getChar() = 0;
00475
00487 virtual char getChar( int index ) const = 0;
00488
00498 virtual double getDouble() = 0;
00499
00511 virtual double getDouble( int index ) const = 0;
00512
00522 virtual float getFloat() = 0;
00523
00535 virtual float getFloat( int index ) const = 0;
00536
00546 virtual long long getLong() = 0;
00547
00559 virtual long long getLong( int index ) const = 0;
00560
00570 virtual int getInt() = 0;
00571
00583 virtual int getInt( int index ) const = 0;
00584
00594 virtual short getShort() = 0;
00595
00607 virtual short getShort( int index ) const = 0;
00608
00621 virtual ByteBuffer& put( unsigned char value ) = 0;
00622
00635 virtual ByteBuffer& put( int index, unsigned char value ) = 0;
00636
00650 virtual ByteBuffer& putChar( char value ) = 0;
00651
00667 virtual ByteBuffer& putChar( int index, char value ) = 0;
00668
00682 virtual ByteBuffer& putDouble( double value ) = 0;
00683
00699 virtual ByteBuffer& putDouble( int index, double value ) = 0;
00700
00714 virtual ByteBuffer& putFloat( float value ) = 0;
00715
00731 virtual ByteBuffer& putFloat( int index, float value ) = 0;
00732
00746 virtual ByteBuffer& putLong( long long value ) = 0;
00747
00763 virtual ByteBuffer& putLong( int index, long long value ) = 0;
00764
00778 virtual ByteBuffer& putInt( int value ) = 0;
00779
00795 virtual ByteBuffer& putInt( int index, int value ) = 0;
00796
00810 virtual ByteBuffer& putShort( short value ) = 0;
00811
00827 virtual ByteBuffer& putShort( int index, short value ) = 0;
00828
00842 virtual ByteBuffer* slice() const = 0;
00843
00844 public:
00845
00849 virtual int compareTo( const ByteBuffer& value ) const;
00850
00854 virtual bool equals( const ByteBuffer& value ) const;
00855
00859 virtual bool operator==( const ByteBuffer& value ) const;
00860
00864 virtual bool operator<( const ByteBuffer& value ) const;
00865
00866 public:
00867
00879 static ByteBuffer* allocate( int capacity );
00880
00905 static ByteBuffer* wrap( unsigned char* array, int size, int offset, int length );
00906
00922 static ByteBuffer* wrap( std::vector<unsigned char>& buffer );
00923
00924 };
00925
00926 }}
00927
00928 #endif