poppler/FontInfo.cc | 46 ++++++++-------------------------------------- poppler/FontInfo.h | 11 +++-------- 2 files changed, 11 insertions(+), 46 deletions(-)
New commits: commit d30dd8c6f6491beac9750447126930168394cd9f Author: Albert Astals Cid <[email protected]> Date: Sun Nov 28 13:25:39 2010 +0000 Use sets instead of arrays diff --git a/poppler/FontInfo.cc b/poppler/FontInfo.cc index df9c577..1dea32c 100644 --- a/poppler/FontInfo.cc +++ b/poppler/FontInfo.cc @@ -3,11 +3,11 @@ // FontInfo.cc // // Copyright (C) 2005, 2006 Kristian Høgsberg <[email protected]> -// Copyright (C) 2005-2008 Albert Astals Cid <[email protected]> +// Copyright (C) 2005-2008, 2010 Albert Astals Cid <[email protected]> // Copyright (C) 2005 Brad Hards <[email protected]> // Copyright (C) 2006 Kouhei Sutou <[email protected]> // Copyright (C) 2009 Pino Toscano <[email protected]> -// Copyright 2010 Hib Eris <[email protected]> +// Copyright (C) 2010 Hib Eris <[email protected]> // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git @@ -40,15 +40,9 @@ FontInfoScanner::FontInfoScanner(PDFDoc *docA, int firstPage) { doc = docA; currentPage = firstPage + 1; - fonts = NULL; - fontsLen = fontsSize = 0; - visitedXObjects = NULL; - visitedXObjectsLen = visitedXObjectsSize = 0; } FontInfoScanner::~FontInfoScanner() { - gfree(fonts); - gfree(visitedXObjects); } GooList *FontInfoScanner::scan(int nPages) { @@ -119,26 +113,13 @@ void FontInfoScanner::scanFonts(Dict *resDict, GooList *fontsList) { } if (gfxFontDict) { for (i = 0; i < gfxFontDict->getNumFonts(); ++i) { - int k; if ((font = gfxFontDict->getFont(i))) { Ref fontRef = *font->getID(); - GBool alreadySeen = gFalse; - // check for an already-seen font - for (k = 0; k < fontsLen; ++k) { - if (fontRef.num == fonts[k].num && fontRef.gen == fonts[k].gen) { - alreadySeen = gTrue; - } - } - - // add this font to the list - if (!alreadySeen) { + // add this font to the list if not already found + if (fonts.find(fontRef.num) == fonts.end()) { fontsList->append(new FontInfo(font, doc)); - if (fontsLen == fontsSize) { - fontsSize += 32; - fonts = (Ref *)grealloc(fonts, fontsSize * sizeof(Ref)); - } - fonts[fontsLen++] = *font->getID(); + fonts.insert(fontRef.num); } } } @@ -153,25 +134,14 @@ void FontInfoScanner::scanFonts(Dict *resDict, GooList *fontsList) { for (i = 0; i < xObjDict.dictGetLength(); ++i) { xObjDict.dictGetValNF(i, &xObj); if (xObj.isRef()) { - GBool alreadySeen = gFalse; // check for an already-seen XObject - for (int k = 0; k < visitedXObjectsLen; ++k) { - if (xObj.getRef().num == visitedXObjects[k].num && - xObj.getRef().gen == visitedXObjects[k].gen) { - alreadySeen = gTrue; - } - } - - if (alreadySeen) { + const Ref r = xObj.getRef(); + if (visitedXObjects.find(r.num) != visitedXObjects.end()) { xObj.free(); continue; } - if (visitedXObjectsLen == visitedXObjectsSize) { - visitedXObjectsSize += 32; - visitedXObjects = (Ref *)grealloc(visitedXObjects, visitedXObjectsSize * sizeof(Ref)); - } - visitedXObjects[visitedXObjectsLen++] = xObj.getRef(); + visitedXObjects.insert(r.num); } xObj.fetch(doc->getXRef(), &xObj2); diff --git a/poppler/FontInfo.h b/poppler/FontInfo.h index 79eafea..7ecfad2 100644 --- a/poppler/FontInfo.h +++ b/poppler/FontInfo.h @@ -3,7 +3,7 @@ // FontInfo.h // // Copyright (C) 2005 Kristian Høgsberg <[email protected]> -// Copyright (C) 2005-2008 Albert Astals Cid <[email protected]> +// Copyright (C) 2005-2008, 2010 Albert Astals Cid <[email protected]> // Copyright (C) 2005 Brad Hards <[email protected]> // Copyright (C) 2009 Pino Toscano <[email protected]> // @@ -84,13 +84,8 @@ private: PDFDoc *doc; int currentPage; - Ref *fonts; - int fontsLen; - int fontsSize; - - Ref *visitedXObjects; - int visitedXObjectsLen; - int visitedXObjectsSize; + std::set<int> fonts; + std::set<int> visitedXObjects; void scanFonts(Dict *resDict, GooList *fontsList); };
_______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
