com.ibm.icu.impl.USerializedSet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vaadin-client-compiler-deps Show documentation
Show all versions of vaadin-client-compiler-deps Show documentation
Vaadin is a web application framework for Rich Internet Applications (RIA).
Vaadin enables easy development and maintenance of fast and
secure rich web
applications with a stunning look and feel and a wide browser support.
It features a server-side architecture with the majority of the logic
running
on the server. Ajax technology is used at the browser-side to ensure a
rich
and interactive user experience.
/*
*******************************************************************************
* Copyright (C) 2002-2010, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*/
package com.ibm.icu.impl;
/**
* @version 1.1
* @author Markus W. Scherer
* Ram: Add documentation, remove unwanted methods, improve coverage.
*/
/**
* Simple class for handling serialized USet/UnicodeSet structures
* without object creation. See ICU4C icu/source/common/uset.c.
*
* @internal
*/
public final class USerializedSet {
/**
* Fill in the given serialized set object.
* @param src pointer to start of array
* @param srcStart pointer to start of serialized data (length value)
* @return true if the given array is valid, otherwise false
*/
public final boolean getSet(char src[], int srcStart) {
// leave most argument checking up to Java exceptions
array=null;
arrayOffset=bmpLength=length=0;
length=src[srcStart++];
if((length&0x8000) >0) {
/* there are supplementary values */
length&=0x7fff;
if(src.length<(srcStart+1+length)) {
length=0;
throw new IndexOutOfBoundsException();
}
bmpLength=src[srcStart++];
} else {
/* only BMP values */
if(src.length<(srcStart+length)) {
length=0;
throw new IndexOutOfBoundsException();
}
bmpLength=length;
}
array = new char[length];
System.arraycopy(src,srcStart,array,0,length);
//arrayOffset=srcStart;
return true;
}
/**
* Set the USerializedSet to contain the given character (and nothing
* else).
*/
public final void setToOne(int c) {
if( 0x10ffff>16);
array[1]=(char)c;
++c;
array[2]=(char)(c>>16);
array[3]=(char)c;
} else /* c==0x10ffff */ {
bmpLength=0;
length=2;
array[0]=0x10;
array[1]=0xffff;
}
}
/**
* Returns a range of characters contained in the given serialized
* set.
* @param rangeIndex a non-negative integer in the range 0..
* getSerializedRangeCount()-1
* @param range variable to receive the data in the range
* @return true if rangeIndex is valid, otherwise false
*/
public final boolean getRange(int rangeIndex, int[] range) {
if( rangeIndex<0) {
return false;
}
if(array==null){
array = new char[8];
}
if(range==null || range.length <2){
throw new IllegalArgumentException();
}
rangeIndex*=2; /* address start/limit pairs */
if(rangeIndex0x10ffff) {
return false;
}
if(c<=0xffff) {
int i;
/* find c in the BMP part */
for(i=0; i=array[i]; ++i) {}
return ((i&1) != 0);
} else {
int i;
/* find c in the supplementary part */
char high=(char)(c>>16), low=(char)c;
for(i=bmpLength;
iarray[i] || (high==array[i] && low>=array[i+1]));
i+=2) {}
/* count pairs of 16-bit units even per BMP and check if the number of pairs is odd */
return (((i+bmpLength)&2)!=0);
}
}
/**
* Returns the number of disjoint ranges of characters contained in
* the given serialized set. Ignores any strings contained in the
* set.
* @return a non-negative integer counting the character ranges
* contained in set
*/
public final int countRanges() {
return (bmpLength+(length-bmpLength)/2+1)/2;
}
private char array[] = new char[8];
private int arrayOffset, bmpLength, length;
}