Author: lehmi
Date: Sun Jun 14 15:45:10 2020
New Revision: 1878835

URL: http://svn.apache.org/viewvc?rev=1878835&view=rev
Log:
PDFBOX-4883: optimize checkMinMaxValues and removeNullDigits

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java?rev=1878835&r1=1878834&r2=1878835&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java 
(original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/cos/COSFloat.java Sun 
Jun 14 15:45:10 2020
@@ -92,42 +92,36 @@ public class COSFloat extends COSNumber
     
     private void checkMinMaxValues()
     {
-        float floatValue = value.floatValue();
-        double doubleValue = value.doubleValue();
-        boolean valueReplaced = false;
-        // check for huge values
-        if (Float.isInfinite(floatValue))
-        {      
+        int signum = value.signum();
+        // don't check 0 values
+        if (signum != 0)
+        {
+            double doubleValue = value.doubleValue();
+            // check for huge values
             if (Math.abs(doubleValue) > Float.MAX_VALUE)
             {
-                floatValue = Float.MAX_VALUE * (Float.compare(floatValue, 
Float.POSITIVE_INFINITY) == 0 ? 1 : -1);
-                valueReplaced = true;
+                value = BigDecimal.valueOf(signum * Float.MAX_VALUE);
+                valueAsString = value.toPlainString();
+            }
+            // check for very small values
+            else if (Math.abs(doubleValue) < Float.MIN_NORMAL)
+            {
+                value = BigDecimal.valueOf(signum * Float.MIN_NORMAL);
+                valueAsString = value.toPlainString();
             }
-        }
-        // check for very small values
-        else if (Float.compare(floatValue, 0) == 0 && 
Double.compare(doubleValue, 0) != 0 &&
-                 Math.abs(doubleValue) < Float.MIN_NORMAL)
-        {
-            floatValue = Float.MIN_NORMAL;
-            floatValue *= doubleValue >= 0  ? 1 : -1;
-            valueReplaced = true;
-        }
-        if (valueReplaced)
-        {
-            value = BigDecimal.valueOf(floatValue);
-            valueAsString = removeNullDigits(value.toPlainString());
         }
     }
     
     private String removeNullDigits(String plainStringValue)
     {
         // remove fraction digit "0" only
-        if (plainStringValue.indexOf('.') > -1 && 
!plainStringValue.endsWith(".0"))
+        int lastIndex = plainStringValue.lastIndexOf('.');
+        if (lastIndex > 0)
         {
-            while (plainStringValue.endsWith("0") && 
!plainStringValue.endsWith(".0"))
-            {
-                plainStringValue = 
plainStringValue.substring(0,plainStringValue.length()-1);
-            }
+            int i = plainStringValue.length() - 1;
+            while (i > lastIndex + 1 && plainStringValue.charAt(i) == '0')
+                i--;
+            return plainStringValue.substring(0, i + 1);
         }
         return plainStringValue;
     }


Reply via email to