1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/*
2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $HeadURL: http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/module-main/src/main/java/org/apache/http/util/CharArrayBuffer.java $
3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Revision: 496070 $
4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * $Date: 2007-01-14 04:18:34 -0800 (Sun, 14 Jan 2007) $
5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ====================================================================
7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one
8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * or more contributor license agreements.  See the NOTICE file
9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * distributed with this work for additional information
10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * regarding copyright ownership.  The ASF licenses this file
11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * to you under the Apache License, Version 2.0 (the
12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "License"); you may not use this file except in compliance
13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * with the License.  You may obtain a copy of the License at
14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *   http://www.apache.org/licenses/LICENSE-2.0
16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Unless required by applicable law or agreed to in writing,
18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * software distributed under the License is distributed on an
19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * KIND, either express or implied.  See the License for the
21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * specific language governing permissions and limitations
22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * under the License.
23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * ====================================================================
24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * This software consists of voluntary contributions made by many
26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * individuals on behalf of the Apache Software Foundation.  For more
27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * information on the Apache Software Foundation, please see
28069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * <http://www.apache.org/>.
29069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
30069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
31069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpackage org.apache.http.util;
33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectimport org.apache.http.protocol.HTTP;
35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/**
37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * A resizable char array.
38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @version $Revision: 496070 $
42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *
43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * @since 4.0
44d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *
45d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath * @deprecated Please use {@link java.net.URL#openConnection} instead.
46d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     Please visit <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">this webpage</a>
47d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath *     for further details.
48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project */
49d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath@Deprecated
50069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Projectpublic final class CharArrayBuffer  {
51069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
52069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private char[] buffer;
53069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private int len;
54069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public CharArrayBuffer(int capacity) {
56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        super();
57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (capacity < 0) {
58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IllegalArgumentException("Buffer capacity may not be negative");
59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.buffer = new char[capacity];
61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    private void expand(int newlen) {
64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        char newbuffer[] = new char[Math.max(this.buffer.length << 1, newlen)];
65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        System.arraycopy(this.buffer, 0, newbuffer, 0, this.len);
66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.buffer = newbuffer;
67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void append(final char[] b, int off, int len) {
70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (b == null) {
71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if ((off < 0) || (off > b.length) || (len < 0) ||
74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                ((off + len) < 0) || ((off + len) > b.length)) {
75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (len == 0) {
78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        int newlen = this.len + len;
81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (newlen > this.buffer.length) {
82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            expand(newlen);
83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        System.arraycopy(b, off, this.buffer, this.len, len);
85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.len = newlen;
86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void append(String str) {
89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (str == null) {
90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            str = "null";
91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        int strlen = str.length();
93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        int newlen = this.len + strlen;
94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (newlen > this.buffer.length) {
95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            expand(newlen);
96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        str.getChars(0, strlen, this.buffer, this.len);
98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.len = newlen;
99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void append(final CharArrayBuffer b, int off, int len) {
102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (b == null) {
103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        append(b.buffer, off, len);
106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void append(final CharArrayBuffer b) {
109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (b == null) {
110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        append(b.buffer,0, b.len);
113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void append(char ch) {
116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        int newlen = this.len + 1;
117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (newlen > this.buffer.length) {
118069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            expand(newlen);
119069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
120069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.buffer[this.len] = ch;
121069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.len = newlen;
122069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
123069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
124069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void append(final byte[] b, int off, int len) {
125069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (b == null) {
126069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
127069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
128069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if ((off < 0) || (off > b.length) || (len < 0) ||
129069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                ((off + len) < 0) || ((off + len) > b.length)) {
130069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
131069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
132069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (len == 0) {
133069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
134069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
135069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        int oldlen = this.len;
136069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        int newlen = oldlen + len;
137069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (newlen > this.buffer.length) {
138069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            expand(newlen);
139069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
140069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        for (int i1 = off, i2 = oldlen; i2 < newlen; i1++, i2++) {
141069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            int ch = b[i1];
142069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            if (ch < 0) {
143069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                ch = 256 + ch;
144069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
145069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            this.buffer[i2] = (char) ch;
146069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
147069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.len = newlen;
148069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
149069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
150069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void append(final ByteArrayBuffer b, int off, int len) {
151069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (b == null) {
152069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return;
153069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
154069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        append(b.buffer(), off, len);
155069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
156069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
157069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void append(final Object obj) {
158069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        append(String.valueOf(obj));
159069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
160069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
161069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void clear() {
162069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.len = 0;
163069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
164069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
165069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public char[] toCharArray() {
166069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        char[] b = new char[this.len];
167069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (this.len > 0) {
168069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            System.arraycopy(this.buffer, 0, b, 0, this.len);
169069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
170069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return b;
171069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
172069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
173069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public char charAt(int i) {
174069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.buffer[i];
175069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
176069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
177069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public char[] buffer() {
178069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.buffer;
179069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
180069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
181069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public int capacity() {
182069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.buffer.length;
183069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
184069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
185069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public int length() {
186069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.len;
187069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
188069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
189069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void ensureCapacity(int required) {
190069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        int available = this.buffer.length - this.len;
191069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (required > available) {
192069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            expand(this.len + required);
193069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
194069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
195069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
196069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public void setLength(int len) {
197069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (len < 0 || len > this.buffer.length) {
198069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
199069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
200069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        this.len = len;
201069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
202069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
203069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public boolean isEmpty() {
204069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.len == 0;
205069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
206069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
207069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public boolean isFull() {
208069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return this.len == this.buffer.length;
209069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
210069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
211069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public int indexOf(int ch, int beginIndex, int endIndex) {
212069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (beginIndex < 0) {
213069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            beginIndex = 0;
214069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
215069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (endIndex > this.len) {
216069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            endIndex = this.len;
217069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
218069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (beginIndex > endIndex) {
219069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            return -1;
220069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
221069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        for (int i = beginIndex; i < endIndex; i++) {
222069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            if (this.buffer[i] == ch) {
223069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project                return i;
224069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            }
225069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
226069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return -1;
227069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
228069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
229069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public int indexOf(int ch) {
230069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return indexOf(ch, 0, this.len);
231069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
232069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
233069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public String substring(int beginIndex, int endIndex) {
234069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (beginIndex < 0) {
235069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
236069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
237069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (endIndex > this.len) {
238069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
239069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
240069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (beginIndex > endIndex) {
241069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
242069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
243069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return new String(this.buffer, beginIndex, endIndex - beginIndex);
244069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
245069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
246069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public String substringTrimmed(int beginIndex, int endIndex) {
247069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (beginIndex < 0) {
248069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
249069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
250069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (endIndex > this.len) {
251069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
252069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
253069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        if (beginIndex > endIndex) {
254069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            throw new IndexOutOfBoundsException();
255069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
256069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        while (beginIndex < endIndex && HTTP.isWhitespace(this.buffer[beginIndex])) {
257069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            beginIndex++;
258069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
259069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        while (endIndex > beginIndex && HTTP.isWhitespace(this.buffer[endIndex - 1])) {
260069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project            endIndex--;
261069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        }
262069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return new String(this.buffer, beginIndex, endIndex - beginIndex);
263069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
264069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
265069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    public String toString() {
266069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project        return new String(this.buffer, 0, this.len);
267069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project    }
268069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project
269069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project}
270