Author: lehmi
Date: Sun May  4 11:40:47 2025
New Revision: 1925396

URL: http://svn.apache.org/viewvc?rev=1925396&view=rev
Log:
PDFBOX-5998: avoid unnecessary map lookups based on a proposal by Axel Howind

Modified:
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
    pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java
    
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalOriginTable.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
    
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java?rev=1925396&r1=1925395&r2=1925396&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFCIDFont.java 
Sun May  4 11:40:47 2025
@@ -179,8 +179,8 @@ public class CFFCIDFont extends CFFFont
         {
             return 1000;
         }
-        Map<String, Object> privDict = 
this.privateDictionaries.get(fdArrayIndex);
-        return privDict.containsKey("defaultWidthX") ? 
((Number)privDict.get("defaultWidthX")).intValue() : 1000;
+        Object privDictValue = 
this.privateDictionaries.get(fdArrayIndex).get("defaultWidthX");
+        return privDictValue instanceof Number ? ((Number) 
privDictValue).intValue() : 1000;
     }
 
     /**
@@ -195,8 +195,8 @@ public class CFFCIDFont extends CFFFont
         {
             return 0;
         }
-        Map<String, Object> privDict = 
this.privateDictionaries.get(fdArrayIndex);
-        return privDict.containsKey("nominalWidthX") ? 
((Number)privDict.get("nominalWidthX")).intValue() : 0;
+        Object privDictValue = 
this.privateDictionaries.get(fdArrayIndex).get("nominalWidthX");
+        return privDictValue instanceof Number ? ((Number) 
privDictValue).intValue() : 0;
     }
 
     /**

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java?rev=1925396&r1=1925395&r2=1925396&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cff/CFFParser.java 
Sun May  4 11:40:47 2025
@@ -674,13 +674,13 @@ public class CFFParser
 
             parseCIDFontDicts(input, topDict, (CFFCIDFont) font, numEntries);
 
-            List<Number> privMatrix = null;
             List<Map<String, Object>> fontDicts = ((CFFCIDFont) 
font).getFontDicts();
-            if (!fontDicts.isEmpty() && 
fontDicts.get(0).containsKey("FontMatrix"))
+            List<Number> privMatrix = null;
+            if (!fontDicts.isEmpty())
             {
-                privMatrix = (List<Number>) fontDicts.get(0).get("FontMatrix");
+                privMatrix = (List<Number>) 
fontDicts.get(0).getOrDefault("FontMatrix", null);
             }
-            // some malformed fonts have FontMatrix in their Font DICT, see 
PDFBOX-2495
+            // some malformed fonts have FontMatrix in their Font DICT, 
seePDFBOX-2495
             List<Number> matrix = topDict.getArray("FontMatrix", null);
             if (matrix == null)
             {

Modified: pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java?rev=1925396&r1=1925395&r2=1925396&view=diff
==============================================================================
--- pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java 
(original)
+++ pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/cmap/CMap.java Sun 
May  4 11:40:47 2025
@@ -242,15 +242,12 @@ public class CMap
             return 0;
         }
         Integer cid = null;
-        if (codeToCid.containsKey(code.length))
+        Map<Integer, Integer> codeToCidMap = codeToCid.get(code.length);
+        if (codeToCidMap != null)
         {
-            cid = codeToCid.get(code.length).get(toInt(code));
+            cid = codeToCidMap.get(toInt(code));
         }
-        if (cid == null)
-        {
-            cid = toCIDFromRanges(code);
-        }
-        return cid;
+        return cid != null ? cid : toCIDFromRanges(code);
     }
 
     /**
@@ -294,9 +291,10 @@ public class CMap
             return 0;
         }
         Integer cid = null;
-        if (codeToCid.containsKey(length))
+        Map<Integer, Integer> codeToCidMap = codeToCid.get(length);
+        if (codeToCidMap != null)
         {
-            cid = codeToCid.get(length).get(code);
+            cid = codeToCidMap.get(code);
         }
         return cid != null ? cid : toCIDFromRanges(code, length);
     }

Modified: 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalOriginTable.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalOriginTable.java?rev=1925396&r1=1925395&r2=1925396&view=diff
==============================================================================
--- 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalOriginTable.java
 (original)
+++ 
pdfbox/trunk/fontbox/src/main/java/org/apache/fontbox/ttf/VerticalOriginTable.java
 Sun May  4 11:40:47 2025
@@ -91,13 +91,6 @@ public class VerticalOriginTable extends
      */
     public int getOriginY(int gid)
     {
-        if (origins.containsKey(gid))
-        {
-            return origins.get(gid);
-        }
-        else
-        {
-            return defaultVertOriginY;
-        }
+        return origins.getOrDefault(gid, defaultVertOriginY);
     }
 }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java?rev=1925396&r1=1925395&r2=1925396&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/documentinterchange/logicalstructure/PDStructureElement.java
 Sun May  4 11:40:47 2025
@@ -603,14 +603,10 @@ public class PDStructureElement extends
     public String getStandardStructureType()
     {
         String type = this.getStructureType();
-        Map<String,Object> roleMap = getRoleMap();
-        if (roleMap.containsKey(type))
+        Object mappedValue = getRoleMap().get(type);
+        if (mappedValue instanceof String)
         {
-            Object mappedValue = getRoleMap().get(type);
-            if (mappedValue instanceof String)
-            {
-                type = (String)mappedValue;
-            }
+            type = (String) mappedValue;
         }
         return type;
     }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java?rev=1925396&r1=1925395&r2=1925396&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/PDTrueTypeFont.java
 Sun May  4 11:40:47 2025
@@ -78,10 +78,7 @@ public class PDTrueTypeFont extends PDSi
     {
         MacOSRomanEncoding.INSTANCE.getCodeToNameMap().forEach((key, value) ->
         {
-            if (!INVERTED_MACOS_ROMAN.containsKey(value))
-            {
-                INVERTED_MACOS_ROMAN.put(value, key);
-            }
+            INVERTED_MACOS_ROMAN.putIfAbsent(value, key);
         });
     }
 
@@ -93,7 +90,7 @@ public class PDTrueTypeFont extends PDSi
     private CmapSubtable cmapWinSymbol = null;
     private CmapSubtable cmapMacRoman = null;
     private boolean cmapInitialized = false;
-    private Map<Integer, Integer> gidToCode; // for embedding
+    private final Map<Integer, Integer> gidToCode = new HashMap<>(); // for 
embedding
     private BoundingBox fontBBox;
 
     /**
@@ -454,19 +451,15 @@ public class PDTrueTypeFont extends PDSi
      */
     protected Map<Integer, Integer> getGIDToCode() throws IOException
     {
-        if (gidToCode != null)
+        if (!gidToCode.isEmpty())
         {
             return gidToCode;
         }
 
-        gidToCode = new HashMap<>();
         for (int code = 0; code <= 255; code++)
         {
             int gid = codeToGID(code);
-            if (!gidToCode.containsKey(gid))
-            {
-                gidToCode.put(gid, code);
-            }
+            gidToCode.putIfAbsent(gid, code);
         }
         return gidToCode;
     }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java?rev=1925396&r1=1925395&r2=1925396&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/font/encoding/GlyphList.java
 Sun May  4 11:40:47 2025
@@ -136,12 +136,6 @@ public final class GlyphList
                     String name = parts[0];
                     String[] unicodeList = parts[1].split(" ");
 
-                    if (nameToUnicode.containsKey(name))
-                    {
-                        LOG.warn("duplicate value for {} -> {} {}", name, 
parts[1],
-                                nameToUnicode.get(name));
-                    }
-
                     int[] codePoints = new int[unicodeList.length];
                     int index = 0;
                     for (String hex : unicodeList)
@@ -151,8 +145,11 @@ public final class GlyphList
                     String string = new String(codePoints, 0 , 
codePoints.length);
 
                     // forward mapping
-                    nameToUnicode.put(name, string);
-
+                    String oldMapping = nameToUnicode.put(name, string);
+                    if (oldMapping != null)
+                    {
+                        LOG.warn("duplicate value for {} -> {} {}", name, 
parts[1], oldMapping);
+                    }
                     // reverse mapping
                     // PDFBOX-3884: take the various standard encodings as 
canonical, 
                     // e.g. tilde over ilde
@@ -162,10 +159,14 @@ public final class GlyphList
                           MacExpertEncoding.INSTANCE.contains(name) ||
                           SymbolEncoding.INSTANCE.contains(name) ||
                           ZapfDingbatsEncoding.INSTANCE.contains(name);
-                    if (!unicodeToName.containsKey(string) || forceOverride)
+                    if (forceOverride)
                     {
                         unicodeToName.put(string, name);
                     }
+                    else
+                    {
+                        unicodeToName.putIfAbsent(string, name);
+                    }
                 }
             }
         }

Modified: 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java
URL: 
http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java?rev=1925396&r1=1925395&r2=1925396&view=diff
==============================================================================
--- 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java
 (original)
+++ 
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/state/PDExtendedGraphicsState.java
 Sun May  4 11:40:47 2025
@@ -586,11 +586,8 @@ public class PDExtendedGraphicsState imp
      */
     public PDSoftMask getSoftMask()
     {
-        if (!dict.containsKey(COSName.SMASK))
-        {
-            return null;
-        }
-        return PDSoftMask.create(dict.getDictionaryObject(COSName.SMASK));
+        COSBase smask = dict.getDictionaryObject(COSName.SMASK);
+        return smask == null ? null : PDSoftMask.create(smask);
     }
 
     /**


Reply via email to