1b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang/*
2b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * ProGuard -- shrinking, optimization, obfuscation, and preverification
3b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang *             of Java bytecode.
4b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang *
5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu)
6b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang *
7b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * This program is free software; you can redistribute it and/or modify it
8b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * under the terms of the GNU General Public License as published by the Free
9b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Software Foundation; either version 2 of the License, or (at your option)
10b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * any later version.
11b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang *
12b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * This program is distributed in the hope that it will be useful, but WITHOUT
13b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * more details.
16b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang *
17b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * You should have received a copy of the GNU General Public License along
18b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * with this program; if not, write to the Free Software Foundation, Inc.,
19b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */
21b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
22b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wangpackage proguard.util;
23b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
24b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang/**
25b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * This class contains utility methods operating on objects.
26b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang */
27b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wangpublic class ObjectUtil
28b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang{
29b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    /**
30b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * Returns whether the given objects are the same.
31b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @param object1 the first object, may be null.
32b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @param object2 the second object, may be null.
33b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @return whether the objects are the same.
34b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     */
35b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    public static boolean equal(Object object1, Object object2)
36b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    {
37b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang        return object1 == null ?
38b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang            object2 == null :
39b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang            object1.equals(object2);
40b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    }
41b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
42b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
43b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    /**
44b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * Returns the hash code of the given object, or 0 if it is null.
45b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @param object the object, may be null.
46b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @return the hash code.
47b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     */
48b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    public static int hashCode(Object object)
49b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    {
50b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang        return object == null ? 0 : object.hashCode();
51b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    }
52b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
53b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
54b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    /**
55b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * Returns a comparison of the two given objects.
56b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @param object1 the first object, may be null.
57b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @param object2 the second object, may be null.
58b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @return -1, 0, or 1.
59b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * @see Comparable#compareTo(Object)
60b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     */
61b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    public static int compare(Comparable object1, Comparable object2)
62b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    {
63b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang        return object1 == null ?
64b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang            object2 == null ? 0 : -1 :
65b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang            object2 == null ? 1 : object1.compareTo(object2);
66b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    }
67b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang}
68