mrglavas    2004/09/30 20:43:22

  Modified:    java/src/org/apache/xerces/impl/dv/xs DoubleDV.java
                        FloatDV.java
  Log:
  Avoid creating objects when testing whether two

  doubles or floats are identical. We can determine

  whether two 0.0' values are identical by examining

  their bits.
  
  Revision  Changes    Path
  1.10      +9 -5      xml-xerces/java/src/org/apache/xerces/impl/dv/xs/DoubleDV.java
  
  Index: DoubleDV.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/DoubleDV.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DoubleDV.java     30 Sep 2004 19:35:19 -0000      1.9
  +++ DoubleDV.java     1 Oct 2004 03:43:21 -0000       1.10
  @@ -103,11 +103,15 @@
                   return true;
               }
               
  -            Double d1 = new Double(value);
  -            Double d2 = new Double(val.value);
  +            if (value == val.value) {
  +                return (value != 0.0d || 
  +                    (Double.doubleToLongBits(value) == 
Double.doubleToLongBits(val.value)));
  +            }
               
  -            //Double values of 0.0 and -0.0 return false for Double#equals method
  -            return d1.equals(d2); 
  +            if (value != value && val.value != val.value)
  +                return true;
  +
  +            return false; 
           }
   
           private int compareTo(XDouble val) {
  
  
  
  1.10      +9 -5      xml-xerces/java/src/org/apache/xerces/impl/dv/xs/FloatDV.java
  
  Index: FloatDV.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/dv/xs/FloatDV.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- FloatDV.java      30 Sep 2004 19:35:19 -0000      1.9
  +++ FloatDV.java      1 Oct 2004 03:43:21 -0000       1.10
  @@ -104,11 +104,15 @@
                   return true;
               }
               
  -            Float f1 = new Float(value);
  -            Float f2 = new Float(val.value);
  +            if (value == val.value) {
  +                return (value != 0.0f || 
  +                    (Float.floatToIntBits(value) == 
Float.floatToIntBits(val.value)));
  +            }
               
  -            //Float values of 0.0 and -0.0 return false for Float#equals method
  -            return f1.equals(f2); 
  +            if (value != value && val.value != val.value)
  +                return true;
  +
  +            return false;
           }
   
           private int compareTo(XFloat val) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to