| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.net.http; |
| |
| import org.apache.http.util.CharArrayBuffer; |
| import org.apache.http.protocol.HTTP; |
| |
| /** |
| * Utility methods for working on CharArrayBuffers. |
| * |
| * {@hide} |
| */ |
| class CharArrayBuffers { |
| |
| static final char uppercaseAddon = 'a' - 'A'; |
| |
| /** |
| * Returns true if the buffer contains the given string. Ignores leading |
| * whitespace and case. |
| * |
| * @param buffer to search |
| * @param beginIndex index at which we should start |
| * @param str to search for |
| */ |
| static boolean containsIgnoreCaseTrimmed(CharArrayBuffer buffer, |
| int beginIndex, final String str) { |
| int len = buffer.length(); |
| char[] chars = buffer.buffer(); |
| while (beginIndex < len && HTTP.isWhitespace(chars[beginIndex])) { |
| beginIndex++; |
| } |
| int size = str.length(); |
| boolean ok = len >= beginIndex + size; |
| for (int j=0; ok && (j<size); j++) { |
| char a = chars[beginIndex+j]; |
| char b = str.charAt(j); |
| if (a != b) { |
| a = toLower(a); |
| b = toLower(b); |
| ok = a == b; |
| } |
| } |
| return ok; |
| } |
| |
| /** |
| * Returns index of first occurence ch. Lower cases characters leading up |
| * to first occurrence of ch. |
| */ |
| static int setLowercaseIndexOf(CharArrayBuffer buffer, final int ch) { |
| |
| int beginIndex = 0; |
| int endIndex = buffer.length(); |
| char[] chars = buffer.buffer(); |
| |
| for (int i = beginIndex; i < endIndex; i++) { |
| char current = chars[i]; |
| if (current == ch) { |
| return i; |
| } else if (current >= 'A' && current <= 'Z'){ |
| // make lower case |
| current += uppercaseAddon; |
| chars[i] = current; |
| } |
| } |
| return -1; |
| } |
| |
| private static char toLower(char c) { |
| if (c >= 'A' && c <= 'Z'){ |
| c += uppercaseAddon; |
| } |
| return c; |
| } |
| } |