You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by se...@apache.org on 2010/12/10 23:41:08 UTC

svn commit: r1044525 - in /httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn: routing/HttpRoute.java routing/RouteTracker.java scheme/Scheme.java

Author: sebb
Date: Fri Dec 10 22:41:07 2010
New Revision: 1044525

URL: http://svn.apache.org/viewvc?rev=1044525&view=rev
Log:
Improve equals performance: no need to check for null; perform cheapest checks first.
Use short-cut evaluation

Modified:
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/RouteTracker.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/scheme/Scheme.java

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java?rev=1044525&r1=1044524&r2=1044525&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/HttpRoute.java Fri Dec 10 22:41:07 2010
@@ -324,22 +324,23 @@ public final class HttpRoute implements 
     /**
      * Compares this route to another.
      *
-     * @param o         the object to compare with
+     * @param obj         the object to compare with
      *
      * @return  <code>true</code> if the argument is the same route,
      *          <code>false</code>
      */
     @Override
     public final boolean equals(Object obj) {
-        if (obj == null) return false;
         if (this == obj) return true;
         if (obj instanceof HttpRoute) {
             HttpRoute that = (HttpRoute) obj;
-            return LangUtils.equals(this.targetHost, that.targetHost) &&
-                LangUtils.equals(this.localAddress, that.localAddress) &&
+            return 
+                // Do the cheapest tests first
                 (this.secure    == that.secure) &&
                 (this.tunnelled == that.tunnelled) &&
                 (this.layered   == that.layered) &&
+                LangUtils.equals(this.targetHost, that.targetHost) &&
+                LangUtils.equals(this.localAddress, that.localAddress) &&
                 LangUtils.equals(this.proxyChain, that.proxyChain);
         } else {
             return false;

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/RouteTracker.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/RouteTracker.java?rev=1044525&r1=1044524&r2=1044525&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/RouteTracker.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/routing/RouteTracker.java Fri Dec 10 22:41:07 2010
@@ -30,6 +30,7 @@ package org.apache.http.conn.routing;
 import java.net.InetAddress;
 
 import org.apache.http.annotation.NotThreadSafe;
+import org.apache.http.util.LangUtils;
 
 import org.apache.http.HttpHost;
 
@@ -293,30 +294,15 @@ public final class RouteTracker implemen
             return false;
 
         RouteTracker that = (RouteTracker) o;
-        boolean equal = this.targetHost.equals(that.targetHost);
-        equal &=
-            ( this.localAddress == that.localAddress) ||
-            ((this.localAddress != null) &&
-              this.localAddress.equals(that.localAddress));
-        equal &=
-            ( this.proxyChain        == that.proxyChain) ||
-            ((this.proxyChain        != null) &&
-             (that.proxyChain        != null) &&
-             (this.proxyChain.length == that.proxyChain.length));
-        // comparison of actual proxies follows below
-        equal &=
+        return 
+            // Do the cheapest checks first
             (this.connected == that.connected) &&
             (this.secure    == that.secure) &&
             (this.tunnelled == that.tunnelled) &&
-            (this.layered   == that.layered);
-
-        // chain length has been compared above, now check the proxies
-        if (equal && (this.proxyChain != null)) {
-            for (int i=0; equal && (i<this.proxyChain.length); i++)
-                equal = this.proxyChain[i].equals(that.proxyChain[i]);
-        }
-
-        return equal;
+            (this.layered   == that.layered) &&
+            LangUtils.equals(this.targetHost, that.targetHost) &&
+            LangUtils.equals(this.localAddress, that.localAddress) &&
+            LangUtils.equals(this.proxyChain, that.proxyChain);
     }
 
     /**

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/scheme/Scheme.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/scheme/Scheme.java?rev=1044525&r1=1044524&r2=1044525&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/scheme/Scheme.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/scheme/Scheme.java Fri Dec 10 22:41:07 2010
@@ -237,7 +237,6 @@ public final class Scheme {
 
     @Override
     public final boolean equals(Object obj) {
-        if (obj == null) return false;
         if (this == obj) return true;
         if (obj instanceof Scheme) {
             Scheme that = (Scheme) obj;