[poppler] poppler/FontInfo.cc poppler/FontInfo.h
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sun Apr 7 22:44:14 UTC 2019
poppler/FontInfo.cc | 15 +++++----------
poppler/FontInfo.h | 6 ++++--
2 files changed, 9 insertions(+), 12 deletions(-)
New commits:
commit 0ec33438f4a407c122c9bfc4dc34758203b50e8a
Author: Adam Reichold <adam.reichold at t-online.de>
Date: Sun Apr 7 20:48:30 2019 +0200
Avoid duplicate set look-up and ordering overhead when tracking visited fonts and objects in FontScanner.
diff --git a/poppler/FontInfo.cc b/poppler/FontInfo.cc
index b7e970d7..e6ccfb26 100644
--- a/poppler/FontInfo.cc
+++ b/poppler/FontInfo.cc
@@ -115,9 +115,8 @@ void FontInfoScanner::scanFonts(XRef *xrefA, Dict *resDict, std::vector<FontInfo
Ref fontRef = *font->getID();
// add this font to the list if not already found
- if (fonts.find(fontRef.num) == fonts.end()) {
+ if (fonts.insert(fontRef.num).second) {
fontsList->push_back(new FontInfo(font, xrefA));
- fonts.insert(fontRef.num);
}
}
}
@@ -135,11 +134,9 @@ void FontInfoScanner::scanFonts(XRef *xrefA, Dict *resDict, std::vector<FontInfo
const Object obj2 = objDict.getDict()->getVal(i, &obj2Ref);
if (obj2Ref != Ref::INVALID()) {
// check for an already-seen object
- if (visitedObjects.find(obj2Ref.num) != visitedObjects.end()) {
+ if (!visitedObjects.insert(obj2Ref.num).second) {
continue;
- }
-
- visitedObjects.insert(obj2Ref.num);
+ }
}
if (obj2.isStream()) {
@@ -147,11 +144,9 @@ void FontInfoScanner::scanFonts(XRef *xrefA, Dict *resDict, std::vector<FontInfo
const Object resObj = obj2.streamGetDict()->lookup("Resources", &resourcesRef);
if (resourcesRef != Ref::INVALID()) {
- if (visitedObjects.find(resourcesRef.num) != visitedObjects.end()) {
+ if (!visitedObjects.insert(resourcesRef.num).second) {
continue;
- }
-
- visitedObjects.insert(resourcesRef.num);
+ }
}
if (resObj.isDict() && resObj.getDict() != resDict) {
diff --git a/poppler/FontInfo.h b/poppler/FontInfo.h
index 6394c4ac..2a40bcda 100644
--- a/poppler/FontInfo.h
+++ b/poppler/FontInfo.h
@@ -28,6 +28,8 @@
#include "Object.h"
+#include <unordered_set>
+
class GfxFont;
class PDFDoc;
@@ -95,8 +97,8 @@ private:
PDFDoc *doc;
int currentPage;
- std::set<int> fonts;
- std::set<int> visitedObjects;
+ std::unordered_set<int> fonts;
+ std::unordered_set<int> visitedObjects;
void scanFonts(XRef *xrefA, Dict *resDict, std::vector<FontInfo*> *fontsList);
};
More information about the poppler
mailing list