blob: 957d25660efe5677526d98098413595f6f2cd98d [file] [log] [blame]
/**
*******************************************************************************
* Copyright (C) 1996-2001, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
* $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/text/Attic/UCharacterUtil.java,v $
* $Date: 2001/03/23 19:51:38 $
* $Revision: 1.3 $
*
*******************************************************************************
*/
package com.ibm.text;
/**
* Internal character utility class for simple data type conversion and String
* parsing functions. Does not have an analog in the JDK.
* @author Syn Wee Quek
* @since sep2900
*/
final class UCharacterUtil
{
// constructor =====================================================
/**
* private constructor to avoid initialisation
*/
private UCharacterUtil()
{
}
// protected methods ===============================================
/**
* joining 2 chars to form an int
* @param msc most significant char
* @param lsc least significant char
* @return int form
*/
protected static int toInt(char msc, char lsc)
{
return ((msc << 16) | lsc);
}
/**
* converting first 2 bytes of a byte array into char
* if array size is < 2 then algorithmn will only return value == 1 byte
* @param bytes 2 byte argument
* @return char form
*/
protected static char toChar(byte bytes[])
{
if (bytes == null || bytes.length == 0) {
return 0;
}
if (bytes.length == 1) {
return toChar(bytes[0]);
}
char firstbyte = (char)(toChar(bytes[0]) << 8);
char secondbyte = toChar(bytes[1]);
return (char)(firstbyte | secondbyte);
}
/**
* converting 2 bytes into a char
* @param msb the most significant byte
* @param lsb the least significant byte
* @return char form
*/
protected static char toChar(byte msb, byte lsb)
{
char firstbyte = (char)(toChar(msb) << 8);
char secondbyte = toChar(lsb);
return (char)(firstbyte | secondbyte);
}
/**
* converting first 4 bytes of a byte array into int
* if array size is < 4 then algorithmn will only return value == # bytes
* @param bytes 4 byte argument
* @return int form
*/
protected static int toInt(byte bytes[])
{
if (bytes == null || bytes.length == 0)
return 0;
int size = bytes.length;
if (size > 4)
size = 4;
int result = 0;
for (int i = 0; i < size; i ++)
result = (result << 8) | (0x000000FF & bytes[i]);
return result;
}
/**
* converting a byte into char
* @param onebyte
* @return char form
*/
protected static char toChar(byte onebyte)
{
char result = (char)(onebyte & 0x000000ff);
return result;
}
/**
* converting a integer to a array of 4 characters where each character
* corresponds to its respective byte
* @param i integer to be converted
* @return array of 4 characters
*/
protected static char[] to4Char(int i)
{
char result[] = new char[4];
result[0] = (char)((i >> 24) & 0xFF);
result[1] = (char)((i & 0x00FF0000) >> 16);
result[2] = (char)((i & 0x0000FF00) >> 8);
result[3] = (char)(i & 0xFF);
return result;
}
/**
* Retrieves a null terminated substring from an array of bytes.
* Substring is a set of non-zero bytes starting from argument start to the
* next zero byte. If the first byte is a zero, the next byte will be taken as
* the first byte.
* @param str stringbuffer to store data in, data will be store with each
* byte as a char
* @param array byte array
* @param index to start substring in byte count
* @return the end position of the substring within the character array
*/
protected static int getNullTermByteSubString(StringBuffer str, byte[] array,
int index)
{
byte b = 1;
while (b != 0)
{
b = array[index];
if (b != 0) {
str.append((char)(b & 0x00FF));
}
index ++;
}
return index;
}
/**
* Compares a null terminated substring from an array of bytes.
* Substring is a set of non-zero bytes starting from argument start to the
* next zero byte. if the first byte is a zero, the next byte will be taken as
* the first byte.
* @param str string to compare
* @param array byte array
* @param strindex index within str to start comparing
* @param aindex array index to start in byte count
* @return the end position of the substring within str if matches otherwise
* a -1
*/
protected static int compareNullTermByteSubString(String str, byte[] array,
int strindex, int aindex)
{
byte b = 1;
int length = str.length();
while (b != 0)
{
b = array[aindex];
aindex ++;
if (b == 0) {
break;
}
// if we have reached the end of the string and yet the array has not
// reached the end of their substring yet, abort
if (strindex == length || (str.charAt(strindex) != (char)(b & 0xFF))) {
return -1;
}
strindex ++;
}
return strindex;
}
/**
* Skip null terminated substrings from an array of bytes.
* Substring is a set of non-zero bytes starting from argument start to the
* next zero byte. If the first byte is a zero, the next byte will be taken as
* the first byte.
* @param array byte array
* @param index to start substrings in byte count
* @param skipcount number of null terminated substrings to skip
* @return the end position of the substrings within the character array
*/
protected static int skipNullTermByteSubString(byte[] array, int index,
int skipcount)
{
byte b;
for (int i = 0; i < skipcount; i ++)
{
b = 1;
while (b != 0)
{
b = array[index];
index ++;
}
}
return index;
}
/**
* skip substrings from an array of characters, where each character is a set
* of 2 bytes. substring is a set of non-zero bytes starting from argument
* start to the byte of the argument value. skips up to a max number of
* characters
* @param array byte array to parse
* @param index to start substrings in byte count
* @param length the max number of bytes to skip
* @param skipend value of byte to skip to
* @return the number of bytes skipped
*/
protected static int skipByteSubString(byte[] array, int index, int length,
byte skipend)
{
int result;
byte b;
for (result = 0; result < length; result ++)
{
b = array[index + result];
if (b == skipend)
{
result ++;
break;
}
}
return result;
}
/**
* skip substrings from an array of characters, where each character is a set
* of 2 bytes. substring is a set of non-zero bytes starting from argument
* start to the byte of the argument value.
* @param array byte array to parse
* @param index to start substrings in byte count
* @param skipend value of byte to skip to
* @return the number of bytes skipped
*/
protected static int skipByteSubString(byte[] array, int index, byte skipend)
{
int result = 0;
byte b;
while (true)
{
b = array[index + result];
result ++;
if (b == skipend) {
break;
}
}
return result;
}
}