01: /*
02: * @(#)ByteArrayLexOrder.java 1.16 06/10/10
03: *
04: * Copyright 1990-2006 Sun Microsystems, Inc. All Rights Reserved.
05: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
06: *
07: * This program is free software; you can redistribute it and/or
08: * modify it under the terms of the GNU General Public License version
09: * 2 only, as published by the Free Software Foundation.
10: *
11: * This program is distributed in the hope that it will be useful, but
12: * WITHOUT ANY WARRANTY; without even the implied warranty of
13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: * General Public License version 2 for more details (a copy is
15: * included at /legal/license.txt).
16: *
17: * You should have received a copy of the GNU General Public License
18: * version 2 along with this work; if not, write to the Free Software
19: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
20: * 02110-1301 USA
21: *
22: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
23: * Clara, CA 95054 or visit www.sun.com if you need additional
24: * information or have any questions.
25: *
26: */
27:
28: package sun.security.util;
29:
30: import java.util.Comparator;
31:
32: /**
33: * Compare two byte arrays in lexicographical order.
34: *
35: * @version 1.9 02/02/00
36: * @author D. N. Hoover
37: */
38: public class ByteArrayLexOrder implements Comparator {
39:
40: /**
41: * Perform lexicographical comparison of two byte arrays,
42: * regarding each byte as unsigned. That is, compare array entries
43: * in order until they differ--the array with the smaller entry
44: * is "smaller". If array entries are
45: * equal till one array ends, then the longer array is "bigger".
46: *
47: * @param obj1 first byte array to compare.
48: * @param obj2 second byte array to compare.
49: * @return negative number if obj1 < obj2, 0 if obj1 == obj2,
50: * positive number if obj1 > obj2.
51: *
52: * @exception <code>ClassCastException</code>
53: * if either argument is not a byte array.
54: */
55: public final int compare(Object obj1, Object obj2) {
56:
57: byte[] bytes1 = (byte[]) obj1;
58: byte[] bytes2 = (byte[]) obj2;
59:
60: int diff;
61: for (int i = 0; i < bytes1.length && i < bytes2.length; i++) {
62: diff = (bytes1[i] & 0xFF) - (bytes2[i] & 0xFF);
63: if (diff != 0) {
64: return diff;
65: }
66: }
67: // if array entries are equal till the first ends, then the
68: // longer is "bigger"
69: return bytes1.length - bytes2.length;
70: }
71:
72: }
|