1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.nio; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20a1603838fe9e865575c87982e32c6343740e464cElliott Hughesimport java.util.Arrays; 21a1603838fe9e865575c87982e32c6343740e464cElliott Hughes 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This class wraps a char sequence to be a char buffer. 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Implementation notice: 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul> 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Char sequence based buffer is always readonly.</li> 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul> 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </p> 30f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectfinal class CharSequenceAdapter extends CharBuffer { 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static CharSequenceAdapter copy(CharSequenceAdapter other) { 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CharSequenceAdapter buf = new CharSequenceAdapter(other.sequence); 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf.limit = other.limit; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf.position = other.position; 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project buf.mark = other.mark; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return buf; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project final CharSequence sequence; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CharSequenceAdapter(CharSequence chseq) { 452589e301d1fb85960045c9ef29682d7e73b1aee7Narayan Kamath super(chseq.length(), 0); 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sequence = chseq; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 49eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CharBuffer asReadOnlyBuffer() { 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return duplicate(); 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 54eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CharBuffer compact() { 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ReadOnlyBufferException(); 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CharBuffer duplicate() { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return copy(this); 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char get() { 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (position == limit) { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferUnderflowException(); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sequence.charAt(position++); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 72eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public char get(int index) { 74a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkIndex(index); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sequence.charAt(index); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 78eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 790e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public final CharBuffer get(char[] dst, int dstOffset, int charCount) { 80a1603838fe9e865575c87982e32c6343740e464cElliott Hughes Arrays.checkOffsetAndCount(dst.length, dstOffset, charCount); 810e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes if (charCount > remaining()) { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new BufferUnderflowException(); 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 840e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes int newPosition = position + charCount; 850e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes sequence.toString().getChars(position, newPosition, dst, dstOffset); 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project position = newPosition; 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return this; 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 90eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isDirect() { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 95eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isReadOnly() { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 100eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ByteOrder order() { 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ByteOrder.nativeOrder(); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override char[] protectedArray() { 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnsupportedOperationException(); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 109bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override int protectedArrayOffset() { 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new UnsupportedOperationException(); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 113bdd17cde8cf675f5d5703aad4dfb565932fb4c50Elliott Hughes @Override boolean protectedHasArray() { 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 117eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CharBuffer put(char c) { 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ReadOnlyBufferException(); 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 122eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CharBuffer put(int index, char c) { 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ReadOnlyBufferException(); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 127eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 1280e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes public final CharBuffer put(char[] src, int srcOffset, int charCount) { 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ReadOnlyBufferException(); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 132eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CharBuffer put(String src, int start, int end) { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ReadOnlyBufferException(); 135eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson } 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 137eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson @Override 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CharBuffer slice() { 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return new CharSequenceAdapter(sequence.subSequence(position, limit)); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 14240b4f1db4031eff92cb0b31740b6e644b8e4c733Elliott Hughes @Override public CharBuffer subSequence(int start, int end) { 143a1603838fe9e865575c87982e32c6343740e464cElliott Hughes checkStartEndRemaining(start, end); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CharSequenceAdapter result = copy(this); 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.position = position + start; 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project result.limit = position + end; 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return result; 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 150