00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _DECAF_NIO_CHARBUFFER_H_
00019 #define _DECAF_NIO_CHARBUFFER_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 #include <decaf/lang/CharSequence.h>
00029 #include <decaf/lang/Appendable.h>
00030
00031 namespace decaf{
00032 namespace nio{
00033
00065 class DECAF_API CharBuffer : public Buffer,
00066 public lang::CharSequence,
00067 public lang::Appendable,
00068 public lang::Comparable<CharBuffer> {
00069 protected:
00070
00081 CharBuffer( int capacity );
00082
00083 public:
00084
00085 virtual ~CharBuffer() {}
00086
00090 virtual std::string toString() const;
00091
00103 CharBuffer& append( char value );
00104
00117 CharBuffer& append( const lang::CharSequence* value );
00118
00136 CharBuffer& append( const lang::CharSequence* value, int start, int end );
00137
00152 virtual char* array() = 0;
00153
00166 virtual int arrayOffset() = 0;
00167
00185 virtual CharBuffer* asReadOnlyBuffer() const = 0;
00186
00197 char charAt( int index ) const;
00198
00217 virtual CharBuffer& compact() = 0;
00218
00232 virtual CharBuffer* duplicate() = 0;
00233
00242 virtual char get() = 0;
00243
00255 virtual char get( int index ) const = 0;
00256
00271 CharBuffer& get( std::vector<char> buffer );
00272
00302 CharBuffer& get( char* buffer, int size, int offset, int length );
00303
00313 virtual bool hasArray() const = 0;
00314
00320 int length() const {
00321 return this->remaining();
00322 }
00323
00343 CharBuffer& put( CharBuffer& src );
00344
00372 CharBuffer& put( const char* buffer, int size, int offset, int length );
00373
00386 CharBuffer& put( std::vector<char>& buffer );
00387
00401 virtual CharBuffer& put( char value ) = 0;
00402
00417 virtual CharBuffer& put( int index, char value ) = 0;
00418
00446 CharBuffer& put( std::string& src, int start, int end );
00447
00463 CharBuffer& put( const std::string& src );
00464
00480 virtual int read( CharBuffer* target );
00481
00504 virtual lang::CharSequence* subSequence( int start, int end ) const = 0;
00505
00519 virtual CharBuffer* slice() const = 0;
00520
00521 public:
00522
00526 virtual int compareTo( const CharBuffer& value ) const;
00527
00531 virtual bool equals( const CharBuffer& value ) const;
00532
00536 virtual bool operator==( const CharBuffer& value ) const;
00537
00541 virtual bool operator<( const CharBuffer& value ) const;
00542
00543 public:
00544
00559 static CharBuffer* allocate( int capacity );
00560
00584 static CharBuffer* wrap( char* array, int size, int offset, int length );
00585
00601 static CharBuffer* wrap( std::vector<char>& buffer );
00602
00624
00625
00626
00642
00643
00644
00645 };
00646
00647 }}
00648
00649 #endif