mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			110 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Java
		
	
	
	
// CollationKey.java - Sort key for locale-sensitive String.
 | 
						|
 | 
						|
/* Copyright (C) 1999, 2000  Free Software Foundation
 | 
						|
 | 
						|
   This file is part of libgcj.
 | 
						|
 | 
						|
This software is copyrighted work licensed under the terms of the
 | 
						|
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
 | 
						|
details.  */
 | 
						|
 | 
						|
package java.text;
 | 
						|
 | 
						|
/**
 | 
						|
 * @author Tom Tromey <tromey@cygnus.com>
 | 
						|
 * @date March 25, 1999
 | 
						|
 */
 | 
						|
/* Written using "Java Class Libraries", 2nd edition, plus online
 | 
						|
 * API docs for JDK 1.2 from http://www.javasoft.com.
 | 
						|
 * Status: Believed complete and correct.
 | 
						|
 */
 | 
						|
 | 
						|
public final class CollationKey implements Comparable
 | 
						|
{
 | 
						|
  public int compareTo (CollationKey target)
 | 
						|
  {
 | 
						|
    int max = Math.min(key.length, target.key.length);
 | 
						|
 | 
						|
    for (int i = 0; i < max; ++i)
 | 
						|
      {
 | 
						|
	if (key[i] != target.key[i])
 | 
						|
	  return key[i] - target.key[i];
 | 
						|
      }
 | 
						|
 | 
						|
    return key.length - target.key.length;
 | 
						|
  }
 | 
						|
 | 
						|
  public int compareTo (Object o)
 | 
						|
  {
 | 
						|
    return compareTo ((CollationKey) o);
 | 
						|
  }
 | 
						|
 | 
						|
  public boolean equals (Object obj)
 | 
						|
  {
 | 
						|
    if (! (obj instanceof CollationKey))
 | 
						|
      return false;
 | 
						|
 | 
						|
    CollationKey ck = (CollationKey) obj;
 | 
						|
 | 
						|
    if (key.length != ck.key.length)
 | 
						|
      return false;
 | 
						|
 | 
						|
    for (int i = 0; i < key.length; ++i)
 | 
						|
      if (key[i] != ck.key[i])
 | 
						|
	return false;
 | 
						|
 | 
						|
    return true;
 | 
						|
  }
 | 
						|
 | 
						|
  public String getSourceString ()
 | 
						|
  {
 | 
						|
    return originalText;
 | 
						|
  }
 | 
						|
 | 
						|
  public int hashCode ()
 | 
						|
  {
 | 
						|
    // We just follow BitSet instead of thinking up something new.
 | 
						|
    long h = originalText.hashCode();
 | 
						|
    for (int i = key.length - 1; i >= 0; --i)
 | 
						|
      h ^= key[i] * (i + 1);
 | 
						|
    return (int) ((h >> 32) ^ h);
 | 
						|
  }
 | 
						|
 | 
						|
  public byte[] toByteArray ()
 | 
						|
  {
 | 
						|
    byte[] r = new byte[4 * key.length];
 | 
						|
    int off = 0;
 | 
						|
    for (int i = 0; i < key.length; ++i)
 | 
						|
      {
 | 
						|
	r[off++] = (byte) ((key[i] >>> 24) & 255);
 | 
						|
	r[off++] = (byte) ((key[i] >>> 16) & 255);
 | 
						|
	r[off++] = (byte) ((key[i] >>>  8) & 255);
 | 
						|
	r[off++] = (byte) ((key[i]       ) & 255);
 | 
						|
      }
 | 
						|
    return r;
 | 
						|
  }
 | 
						|
 | 
						|
  CollationKey (CollationElementIterator iter, String originalText,
 | 
						|
		int strength)
 | 
						|
  {
 | 
						|
    this.originalText = originalText;
 | 
						|
 | 
						|
    // Compute size of required array.
 | 
						|
    int size = 0;
 | 
						|
    while (RuleBasedCollator.next(iter, strength)
 | 
						|
	   != CollationElementIterator.NULLORDER)
 | 
						|
      ++size;
 | 
						|
 | 
						|
    iter.reset();
 | 
						|
    key = new int[size];
 | 
						|
    for (int i = 0; i < size; i++)
 | 
						|
      key[i] = RuleBasedCollator.next(iter, strength);
 | 
						|
  }
 | 
						|
 | 
						|
  // Original string.
 | 
						|
  private String originalText;
 | 
						|
 | 
						|
  // Collation key.
 | 
						|
  private int[] key;
 | 
						|
}
 |