You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							129 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
	
	
							129 lines
						
					
					
						
							3.1 KiB
						
					
					
				/*
 | 
						|
 * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
 | 
						|
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
package java.nio;
 | 
						|
 | 
						|
 | 
						|
// ## If the sequence is a string, use reflection to share its array
 | 
						|
 | 
						|
class StringCharBuffer                                  // package-private
 | 
						|
    extends CharBuffer
 | 
						|
{
 | 
						|
    CharSequence str;
 | 
						|
 | 
						|
    StringCharBuffer(CharSequence s, int start, int end) { // package-private
 | 
						|
        super(-1, start, end, s.length());
 | 
						|
        int n = s.length();
 | 
						|
        if ((start < 0) || (start > n) || (end < start) || (end > n))
 | 
						|
            throw new IndexOutOfBoundsException();
 | 
						|
        str = s;
 | 
						|
    }
 | 
						|
 | 
						|
    public CharBuffer slice() {
 | 
						|
        return new StringCharBuffer(str,
 | 
						|
                                    -1,
 | 
						|
                                    0,
 | 
						|
                                    this.remaining(),
 | 
						|
                                    this.remaining(),
 | 
						|
                                    offset + this.position());
 | 
						|
    }
 | 
						|
 | 
						|
    private StringCharBuffer(CharSequence s,
 | 
						|
                             int mark,
 | 
						|
                             int pos,
 | 
						|
                             int limit,
 | 
						|
                             int cap,
 | 
						|
                             int offset) {
 | 
						|
        super(mark, pos, limit, cap, null, offset);
 | 
						|
        str = s;
 | 
						|
    }
 | 
						|
 | 
						|
    public CharBuffer duplicate() {
 | 
						|
        return new StringCharBuffer(str, markValue(),
 | 
						|
                                    position(), limit(), capacity(), offset);
 | 
						|
    }
 | 
						|
 | 
						|
    public CharBuffer asReadOnlyBuffer() {
 | 
						|
        return duplicate();
 | 
						|
    }
 | 
						|
 | 
						|
    public final char get() {
 | 
						|
        return str.charAt(nextGetIndex() + offset);
 | 
						|
    }
 | 
						|
 | 
						|
    public final char get(int index) {
 | 
						|
        return str.charAt(checkIndex(index) + offset);
 | 
						|
    }
 | 
						|
 | 
						|
    char getUnchecked(int index) {
 | 
						|
        return str.charAt(index + offset);
 | 
						|
    }
 | 
						|
 | 
						|
    // ## Override bulk get methods for better performance
 | 
						|
 | 
						|
    public final CharBuffer put(char c) {
 | 
						|
        throw new ReadOnlyBufferException();
 | 
						|
    }
 | 
						|
 | 
						|
    public final CharBuffer put(int index, char c) {
 | 
						|
        throw new ReadOnlyBufferException();
 | 
						|
    }
 | 
						|
 | 
						|
    public final CharBuffer compact() {
 | 
						|
        throw new ReadOnlyBufferException();
 | 
						|
    }
 | 
						|
 | 
						|
    public final boolean isReadOnly() {
 | 
						|
        return true;
 | 
						|
    }
 | 
						|
 | 
						|
    final String toString(int start, int end) {
 | 
						|
        return str.toString().substring(start + offset, end + offset);
 | 
						|
    }
 | 
						|
 | 
						|
    public final CharBuffer subSequence(int start, int end) {
 | 
						|
        try {
 | 
						|
            int pos = position();
 | 
						|
            return new StringCharBuffer(str,
 | 
						|
                                        -1,
 | 
						|
                                        pos + checkIndex(start, pos),
 | 
						|
                                        pos + checkIndex(end, pos),
 | 
						|
                                        capacity(),
 | 
						|
                                        offset);
 | 
						|
        } catch (IllegalArgumentException x) {
 | 
						|
            throw new IndexOutOfBoundsException();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public boolean isDirect() {
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    public ByteOrder order() {
 | 
						|
        return ByteOrder.nativeOrder();
 | 
						|
    }
 | 
						|
 | 
						|
}
 |