| /* |
| * Copyright 2008 Google Inc. |
| * |
| * 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 com.google.gwt.core.client.impl; |
| |
| |
| /** |
| * <p> |
| * The interface to defer bound implementations of {@link StringBuilder} and |
| * {@link StringBuffer}. |
| * </p> |
| * |
| * <p> |
| * All of the implementations have been carefully tweaked to get the most |
| * inlining possible, so be sure to check with benchmark whenever these classes |
| * are modified. |
| * </p> |
| */ |
| public abstract class StringBufferImpl { |
| |
| public static String reverseString(String s) { |
| int length = s.length(); |
| |
| if (length <= 1) { |
| return s; |
| } |
| |
| char[] buffer = new char[length]; |
| |
| buffer[0] = s.charAt(length - 1); |
| |
| for (int i = 1; i < length; i++) { |
| buffer[i] = s.charAt(length - 1 - i); |
| if (Character.isSurrogatePair(buffer[i], buffer[i - 1])) { |
| swap(buffer, i - 1, i); |
| } |
| } |
| |
| return new String(buffer); |
| } |
| |
| private static void swap(char[] buffer, int f, int s) { |
| char tmp = buffer[f]; |
| buffer[f] = buffer[s]; |
| buffer[s] = tmp; |
| } |
| |
| /** |
| * Append for primitive; the value can be stored and only later converted to a string. |
| */ |
| public abstract void append(Object data, boolean x); |
| |
| /** |
| * Append for primitive; the value can be stored and only later converted to a |
| * string. |
| */ |
| public abstract void append(Object data, double x); |
| |
| /** |
| * Append for primitive; the value can be stored and only later converted to a |
| * string. |
| */ |
| public abstract void append(Object data, float x); |
| |
| /** |
| * Append for primitive; the value can be stored and only later converted to a |
| * string. |
| */ |
| public abstract void append(Object data, int x); |
| |
| /** |
| * Append for object. It is important to immediately convert the object to a |
| * string, because the conversion can give different results if it is |
| * deferred. |
| */ |
| public abstract void append(Object data, Object x); |
| |
| /** |
| * Append for a possibly null string object. |
| */ |
| public abstract void append(Object data, String x); |
| |
| /** |
| * Append for a string that is definitely not null. |
| */ |
| public abstract void appendNonNull(Object data, String x); |
| |
| /** |
| * Returns a data holder object for use with subsequent calls. |
| */ |
| public abstract Object createData(); |
| |
| /** |
| * Returns the current length of the string buffer. |
| */ |
| public abstract int length(Object data); |
| |
| /** |
| * Replaces a segment of the string buffer. |
| */ |
| public abstract void replace(Object data, int start, int end, String toInsert); |
| |
| /** |
| * Reverses the whole StringBuffer/Builder |
| */ |
| public abstract void reverse(Object data); |
| |
| /** |
| * Returns the string buffer as a String. |
| */ |
| public abstract String toString(Object data); |
| } |