1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/* 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 8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 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 tests.support; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Reader; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Support_StringReader extends Reader { 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private String str; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int markpos = -1; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int pos = 0; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private int count; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Construct a StringReader on the String <code>str</code>. The size of 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the reader is set to the <code>length()</code> of the String and the 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Object to synchronize access through is set to <code>str</code>. 36f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param str 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the String to filter reads on. 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Support_StringReader(String str) { 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(str); 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.str = str; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.count = str.length(); 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This method closes this StringReader. Once it is closed, you can no 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * longer read from it. Only the first invocation of this method has any 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * effect. 50f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void close() { 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (lock) { 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isOpen()) { 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project str = null; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Answer a boolean indicating whether or not this StringReader is open. 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private boolean isOpen() { 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return str != null; 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Set a Mark position in this Reader. The parameter <code>readLimit</code> 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is ignored for StringReaders. Sending reset() will reposition the reader 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * back to the marked position provided the mark has not been invalidated. 72f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param readlimit 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ignored for StringReaders. 75f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception java.io.IOException 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If an error occurs attempting mark this StringReader. 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void mark(int readLimit) throws IOException { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (readLimit >= 0) { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (lock) { 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isOpen()) { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project markpos = pos; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("StringReader is closed"); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IllegalArgumentException(); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Answers a boolean indicating whether or not this StringReader supports 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * mark() and reset(). This method always returns true. 97f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return <code>true</code> if mark() and reset() are supported, 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>false</code> otherwise. This implementation always 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns <code>true</code>. 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean markSupported() { 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads a single character from this StringReader and returns the result as 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an int. The 2 higher-order bytes are set to 0. If the end of reader was 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * encountered then return -1. 111f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the character read or -1 if end of reader. 113f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception java.io.IOException 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the StringReader is already closed. 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int read() throws IOException { 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (lock) { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isOpen()) { 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pos != count) { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return str.charAt(pos++); 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return -1; 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("StringReader is closed"); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reads at most <code>count</code> characters from this StringReader and 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * stores them at <code>offset</code> in the character array 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>buf</code>. Returns the number of characters actually read or -1 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the end of reader was encountered. 135f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param buf 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * character array to store the read characters 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param offset 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * offset in buf to store the read characters 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param count 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * maximum number of characters to read 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of characters read or -1 if end of reader. 143f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception java.io.IOException 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If the StringReader is closed. 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int read(char buf[], int offset, int count) throws IOException { 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // avoid int overflow 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (0 <= offset && offset <= buf.length && 0 <= count 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && count <= buf.length - offset) { 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (lock) { 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isOpen()) { 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (pos == this.count) { 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return -1; 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int end = pos + count > this.count ? this.count : pos 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + count; 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project str.getChars(pos, end, buf, offset); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int read = end - pos; 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pos = end; 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return read; 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("StringReader is closed"); 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new ArrayIndexOutOfBoundsException(); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Answers a <code>boolean</code> indicating whether or not this 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * StringReader is ready to be read without blocking. If the result is 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>true</code>, the next <code>read()</code> will not block. If 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the result is <code>false</code> this Reader may or may not block when 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>read()</code> is sent. The implementation in StringReader always 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * returns <code>true</code> even when it has been closed. 177f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return <code>true</code> if the receiver will not block when 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <code>read()</code> is called, <code>false</code> if unknown 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or blocking will occur. 181f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception java.io.IOException 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If an IO error occurs. 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean ready() throws IOException { 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (lock) { 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isOpen()) { 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("StringReader is closed"); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Reset this StringReader's position to the last <code>mark()</code> 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * location. Invocations of <code>read()/skip()</code> will occur from 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this new location. If this Reader was not marked, the StringReader is 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reset to the beginning of the String. 200f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception java.io.IOException 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this StringReader has already been closed. 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void reset() throws IOException { 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (lock) { 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isOpen()) { 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pos = markpos != -1 ? markpos : 0; 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("StringReader is closed"); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Skips <code>count</code> number of characters in this StringReader. 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Subsequent <code>read()</code>'s will not return these characters 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unless <code>reset()</code> is used. 219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param count 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The number of characters to skip. 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of characters actually skipped. 223f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @exception java.io.IOException 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If this StringReader has already been closed. 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public long skip(long count) throws IOException { 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project synchronized (lock) { 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (isOpen()) { 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (count <= 0) { 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long skipped = 0; 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (count < this.count - pos) { 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pos = pos + (int) count; 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skipped = count; 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project skipped = this.count - pos; 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project pos = this.count; 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return skipped; 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new IOException("StringReader is closed"); 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 248