/**
*******************************************************************************
* 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;
    }
}