poppler/Annot.cc | 44 +++++++++++++------------------------------- poppler/Annot.h | 9 ++++----- 2 files changed, 17 insertions(+), 36 deletions(-)
New commits: commit 139f2a4c1ab53fd5eb339e395a7c068e3622f83f Author: Oliver Sander <[email protected]> Date: Thu Aug 30 23:58:37 2018 +0200 Port the implementation of 'class Annots' to std::vector This simplifies the code a little: most of the memory management code disappears, because std::vector does it for us. diff --git a/poppler/Annot.cc b/poppler/Annot.cc index 75320836..0ec9e22c 100644 --- a/poppler/Annot.cc +++ b/poppler/Annot.cc @@ -41,7 +41,7 @@ // Copyright (C) 2018 Adam Reichold <[email protected]> // Copyright (C) 2018 Dileep Sankhla <[email protected]> // Copyright (C) 2018 Tobias Deiminger <[email protected]> -// Copyright (C) Oliver Sander <[email protected]> +// Copyright (C) 2018 Oliver Sander <[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 @@ -6816,9 +6816,6 @@ Annots::Annots(PDFDoc *docA, int page, Object *annotsObj) { int i; doc = docA; - annots = nullptr; - size = 0; - nAnnots = 0; if (annotsObj->isArray()) { for (i = 0; i < annotsObj->arrayGetLength(); ++i) { @@ -6843,30 +6840,20 @@ Annots::Annots(PDFDoc *docA, int page, Object *annotsObj) { void Annots::appendAnnot(Annot *annot) { if (annot && annot->isOk()) { - if (nAnnots >= size) { - size += 16; - annots = (Annot **)greallocn(annots, size, sizeof(Annot *)); - } - annots[nAnnots++] = annot; + annots.push_back(annot); annot->incRefCnt(); } } GBool Annots::removeAnnot(Annot *annot) { - int idx = -1; - // Search annot and determine its index - for (int i = 0; idx == -1 && i < nAnnots; i++) { - if (annots[i] == annot) { - idx = i; - } - } - if (idx == -1) { - return gFalse; + auto idx = std::find(annots.begin(), annots.end(), annot); + + if (idx == annots.end()) { + return false; } else { - --nAnnots; - memmove( annots + idx, annots + idx + 1, sizeof(annots[0]) * (nAnnots - idx) ); annot->decRefCnt(); - return gTrue; + annots.erase(idx); + return true; } } @@ -6957,11 +6944,9 @@ Annot *Annots::createAnnot(Object* dictObject, Object *obj) { } Annot *Annots::findAnnot(Ref *ref) { - int i; - - for (i = 0; i < nAnnots; ++i) { - if (annots[i]->match(ref)) { - return annots[i]; + for (auto* annot : annots) { + if (annot->match(ref)) { + return annot; } } return nullptr; @@ -6969,12 +6954,9 @@ Annot *Annots::findAnnot(Ref *ref) { Annots::~Annots() { - int i; - - for (i = 0; i < nAnnots; ++i) { - annots[i]->decRefCnt(); + for (auto* annot : annots) { + annot->decRefCnt(); } - gfree(annots); } diff --git a/poppler/Annot.h b/poppler/Annot.h index e4c5d65b..7934c4f0 100644 --- a/poppler/Annot.h +++ b/poppler/Annot.h @@ -29,7 +29,7 @@ // Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <[email protected]>. Work sponsored by the LiMux project of the city of Munich // Copyright (C) 2018 Dileep Sankhla <[email protected]> // Copyright (C) 2018 Tobias Deiminger <[email protected]> -// Copyright (C) Oliver Sander <[email protected]> +// Copyright (C) 2018 Oliver Sander <[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 @@ -46,6 +46,7 @@ #include <memory> #include <atomic> #include <mutex> +#include <vector> #include "Object.h" @@ -1684,7 +1685,7 @@ public: Annots& operator=(const Annots &) = delete; // Iterate through list of annotations. - int getNumAnnots() { return nAnnots; } + int getNumAnnots() const { return annots.size(); } Annot *getAnnot(int i) { return annots[i]; } void appendAnnot(Annot *annot); GBool removeAnnot(Annot *annot); @@ -1694,9 +1695,7 @@ private: Annot *findAnnot(Ref *ref); PDFDoc *doc; - Annot **annots; - int nAnnots; - int size; + std::vector<Annot*> annots; }; #endif _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
