93 lines · 3.2 KB · Java
RawDownload
/* * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package sun.text; /** * SupplementaryCharacterData is an SMI-private class which was written for * RuleBasedBreakIterator and BreakDictionary. */public final class SupplementaryCharacterData implements Cloneable {     /**     * An array for supplementary characters and values.     * Lower one byte is used to keep a byte-value.     * Upper three bytes are used to keep the first supplementary character     * which has the value. The value is also valid for the following     * supplementary characters until the next supplementary character in     * the array <code>dataTable</code>.     * For example, if the value of <code>dataTable[2]</code> is     * <code>0x01000123</code> and the value of <code>dataTable[3]</code> is     * <code>0x01000567</code>, supplementary characters from     * <code>0x10001</code> to <code>0x10004</code> has the value     * <code>0x23</code>. And, <code>getValue(0x10003)</code> returns the value.     */    private int[] dataTable;      /**     * Creates a new SupplementaryCharacterData object with the given table.     */    public SupplementaryCharacterData(int[] table) {        dataTable = table;    }     /**     * Returns a corresponding value for the given supplementary code-point.     */    public int getValue(int index) {        // Index should be a valid supplementary character.        assert index >= Character.MIN_SUPPLEMENTARY_CODE_POINT &&               index <= Character.MAX_CODE_POINT :               "Invalid code point:" + Integer.toHexString(index);         int i = 0;        int j = dataTable.length - 1;        int k;         for (;;) {            k = (i + j) / 2;             int start = dataTable[k] >> 8;            int end   = dataTable[k+1] >> 8;             if (index < start) {                j = k;            } else if (index > (end-1)) {                i = k;            } else {                return dataTable[k] & 0xFF;            }        }    }     /**     * Returns the data array.     */    public int[] getArray() {        return dataTable;    } }