FileDocCategorySizeDatePackage
DirectCharBufferS.javaAPI DocJava SE 5 API6952Fri Aug 26 16:49:18 BST 2005java.nio

DirectCharBufferS

public class DirectCharBufferS extends CharBuffer implements DirectBuffer

Fields Summary
protected static final Unsafe
unsafe
protected static final boolean
unaligned
protected Object
viewedBuffer
Constructors Summary
DirectCharBufferS(DirectBuffer db, int mark, int pos, int lim, int cap, int off)


	super(mark, pos, lim, cap);
	address = db.address() + off;
	viewedBuffer = db;






    
Methods Summary
public longaddress()

	return address;
    
public java.nio.CharBufferasReadOnlyBuffer()


	return new DirectCharBufferRS(this,
					   this.markValue(),
					   this.position(),
					   this.limit(),
					   this.capacity(),
					   0);



    
public sun.misc.Cleanercleaner()

 return null; 
public java.nio.CharBuffercompact()


	int pos = position();
	int lim = limit();
	assert (pos <= lim);
	int rem = (pos <= lim ? lim - pos : 0);

 	unsafe.copyMemory(ix(pos), ix(0), rem << 1);
 	position(rem);
	limit(capacity());
	return this;



    
public java.nio.CharBufferduplicate()

	return new DirectCharBufferS(this,
					      this.markValue(),
					      this.position(),
					      this.limit(),
					      this.capacity(),
					      0);
    
public charget(int i)

	return (Bits.swap(unsafe.getChar(ix(checkIndex(i)))));
    
public java.nio.CharBufferget(char[] dst, int offset, int length)


	if ((length << 1) > Bits.JNI_COPY_TO_ARRAY_THRESHOLD) {
	    checkBounds(offset, length, dst.length);
	    int pos = position();
	    int lim = limit();
	    assert (pos <= lim);
	    int rem = (pos <= lim ? lim - pos : 0);
	    if (length > rem)
		throw new BufferUnderflowException();

	    if (order() != ByteOrder.nativeOrder())
		Bits.copyToCharArray(ix(pos), dst,
					  offset << 1,
					  length << 1);
	    else
		Bits.copyToByteArray(ix(pos), dst,
				     offset << 1,
				     length << 1);
	    position(pos + length);
	} else {
	    super.get(dst, offset, length);
	}
	return this;



    
public charget()

	return (Bits.swap(unsafe.getChar(ix(nextGetIndex()))));
    
public booleanisDirect()

	return true;
    
public booleanisReadOnly()

	return false;
    
private longix(int i)

        return address + (i << 1);
    
public java.nio.ByteOrderorder()


	return ((ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN)
		? ByteOrder.LITTLE_ENDIAN : ByteOrder.BIG_ENDIAN);





    
public java.nio.CharBufferput(char x)


	unsafe.putChar(ix(nextPutIndex()), Bits.swap((x)));
	return this;



    
public java.nio.CharBufferput(int i, char x)


	unsafe.putChar(ix(checkIndex(i)), Bits.swap((x)));
	return this;



    
public java.nio.CharBufferput(java.nio.CharBuffer src)


	if (src instanceof DirectCharBufferS) {
	    if (src == this)
		throw new IllegalArgumentException();
	    DirectCharBufferS sb = (DirectCharBufferS)src;

	    int spos = sb.position();
	    int slim = sb.limit();
	    assert (spos <= slim);
	    int srem = (spos <= slim ? slim - spos : 0);

	    int pos = position();
	    int lim = limit();
	    assert (pos <= lim);
	    int rem = (pos <= lim ? lim - pos : 0);

	    if (srem > rem)
		throw new BufferOverflowException();
 	    unsafe.copyMemory(sb.ix(spos), ix(pos), srem << 1);
 	    sb.position(spos + srem);
 	    position(pos + srem);
	} else if (!src.isDirect()) {

	    int spos = src.position();
	    int slim = src.limit();
	    assert (spos <= slim);
	    int srem = (spos <= slim ? slim - spos : 0);

	    put(src.hb, src.offset + spos, srem);
	    src.position(spos + srem);

	} else {
	    super.put(src);
	}
	return this;



    
public java.nio.CharBufferput(char[] src, int offset, int length)


	if ((length << 1) > Bits.JNI_COPY_FROM_ARRAY_THRESHOLD) {
	    checkBounds(offset, length, src.length);
	    int pos = position();
	    int lim = limit();
	    assert (pos <= lim);
	    int rem = (pos <= lim ? lim - pos : 0);
	    if (length > rem)
		throw new BufferOverflowException();

	    if (order() != ByteOrder.nativeOrder()) 
		Bits.copyFromCharArray(src, offset << 1,
					    ix(pos), length << 1);
	    else
		Bits.copyFromByteArray(src, offset << 1,
				       ix(pos), length << 1);
	    position(pos + length);
	} else {
	    super.put(src, offset, length);
	}
	return this;



    
public java.nio.CharBufferslice()

	int pos = this.position();
	int lim = this.limit();
	assert (pos <= lim);
	int rem = (pos <= lim ? lim - pos : 0);
	int off = (pos << 1);
        assert (off >= 0);
	return new DirectCharBufferS(this, -1, 0, rem, rem, off);
    
public java.lang.CharSequencesubSequence(int start, int end)

	int pos = position();
	int lim = limit();
	assert (pos <= lim);
	pos = (pos <= lim ? pos : lim);
	int len = lim - pos;

	if ((start < 0) || (end > len) || (start > end))
	    throw new IndexOutOfBoundsException();
	int sublen = end - start;
 	int off = (pos + start) << 1;
        assert (off >= 0);
	return new DirectCharBufferS(this, -1, 0, sublen, sublen, off);
    
public java.lang.StringtoString(int start, int end)

	if ((end > limit()) || (start > end))
	    throw new IndexOutOfBoundsException();
	try {
	    int len = end - start;
	    char[] ca = new char[len];
	    CharBuffer cb = CharBuffer.wrap(ca);
	    CharBuffer db = this.duplicate();
	    db.position(start);
	    db.limit(end);
	    cb.put(db);
	    return new String(ca);
	} catch (StringIndexOutOfBoundsException x) {
	    throw new IndexOutOfBoundsException();
	}
    
public java.lang.ObjectviewedBuffer()


       
        return viewedBuffer;