/** ******************************************************************************* * Copyright (C) 1996-2001, International Business Machines Corporation and * * others. All Rights Reserved. * ******************************************************************************* * * $Source: /xsrl/Nsvn/icu/unicodetools/com/ibm/text/UCA/RuleComparator.java,v $ * $Date: 2001/08/31 00:20:40 $ * $Revision: 1.2 $ * ******************************************************************************* */ package com.ibm.text.UCA; import com.ibm.text.UCD.*; import com.ibm.text.utility.*; public final class RuleComparator implements java.util.Comparator { public int compare(Object s, Object t) { String ss = (String)s; String tt = (String)t; // compare just the initial portions of each level, FIRST // only if there is a difference outside of the initial level do we stop // we assume that there are the same number of levels!! int si = 0; int ti = 0; int result = 0; try { while (si < ss.length() && ti < tt.length()) { char cs = ss.charAt(si++); char ct = tt.charAt(ti++); if (cs == ct) continue; /* if (cs == 0) { if (result == 0) result = -1; while (ct != 0 && ti < tt.length()) { ct = tt.charAt(ti++); } continue; } if (ct == 0) { if (result == 0) result = 1; while (cs != 0 && si < ss.length()) { cs = ss.charAt(si++); } continue; } */ if (cs < ct) return -1; return 1; } } catch (StringIndexOutOfBoundsException e) { System.out.println("WHOOPS: "); System.out.println(si + ", " + Utility.hex(ss)); System.out.println(ti + ", " + Utility.hex(tt)); } if (result != 0) return result; if (ss.length() > tt.length()) return 1; if (ss.length() < tt.length()) return -1; return 0; } }