glib/poppler-document.cc | 17 +++++++---------- poppler/FontInfo.cc | 34 +++++----------------------------- poppler/FontInfo.h | 18 +++++++++--------- 3 files changed, 21 insertions(+), 48 deletions(-)
New commits: commit 996dfb015f5567cdaf191c127c2cf804f852d80b Author: Oliver Sander <oliver.san...@tu-dresden.de> Date: Fri Feb 18 10:46:57 2022 +0100 Store the strings in FontInfo in std::optional<std::string> This saves some memory allocations, because the strings are now stored by value rather than by a pointer pointing to the heap. Also, the costum copy constructor can be replaced by the default one with this change. diff --git a/glib/poppler-document.cc b/glib/poppler-document.cc index 7da76987..9089023c 100644 --- a/glib/poppler-document.cc +++ b/glib/poppler-document.cc @@ -2781,14 +2781,13 @@ G_DEFINE_BOXED_TYPE(PopplerFontsIter, poppler_fonts_iter, poppler_fonts_iter_cop */ const char *poppler_fonts_iter_get_full_name(PopplerFontsIter *iter) { - const GooString *name; FontInfo *info; info = iter->items[iter->index]; - name = info->getName(); - if (name != nullptr) { - return info->getName()->c_str(); + std::optional<std::string> name = info->getName(); + if (name) { + return name->c_str(); } else { return nullptr; } @@ -2834,13 +2833,12 @@ const char *poppler_fonts_iter_get_name(PopplerFontsIter *iter) */ const char *poppler_fonts_iter_get_substitute_name(PopplerFontsIter *iter) { - const GooString *name; FontInfo *info; info = iter->items[iter->index]; - name = info->getSubstituteName(); - if (name != nullptr) { + std::optional<std::string> name = info->getSubstituteName(); + if (name) { return name->c_str(); } else { return nullptr; @@ -2858,13 +2856,12 @@ const char *poppler_fonts_iter_get_substitute_name(PopplerFontsIter *iter) */ const char *poppler_fonts_iter_get_file_name(PopplerFontsIter *iter) { - const GooString *file; FontInfo *info; info = iter->items[iter->index]; - file = info->getFile(); - if (file != nullptr) { + std::optional<std::string> file = info->getFile(); + if (file) { return file->c_str(); } else { return nullptr; diff --git a/poppler/FontInfo.cc b/poppler/FontInfo.cc index 53c9bf2d..038255c0 100644 --- a/poppler/FontInfo.cc +++ b/poppler/FontInfo.cc @@ -169,9 +169,7 @@ FontInfo::FontInfo(GfxFont *font, XRef *xref) // font name origName = font->getName(); if (origName != nullptr) { - name = font->getName()->copy(); - } else { - name = nullptr; + name = font->getName()->toStr(); } // font type @@ -184,15 +182,15 @@ FontInfo::FontInfo(GfxFont *font, XRef *xref) emb = font->getEmbeddedFontID(&embRef); } - file = nullptr; - substituteName = nullptr; if (!emb) { SysFontType dummy; int dummy2; GooString substituteNameAux; - file = globalParams->findSystemFontFile(font, &dummy, &dummy2, &substituteNameAux); + std::unique_ptr<GooString> tmpFile(globalParams->findSystemFontFile(font, &dummy, &dummy2, &substituteNameAux)); + if (tmpFile) + file = tmpFile->toStr(); if (substituteNameAux.getLength() > 0) - substituteName = substituteNameAux.copy(); + substituteName = substituteNameAux.toStr(); } encoding = font->getEncodingName(); @@ -207,25 +205,3 @@ FontInfo::FontInfo(GfxFont *font, XRef *xref) // sign subset = font->isSubset(); } - -FontInfo::FontInfo(const FontInfo &f) -{ - name = f.name ? f.name->copy() : nullptr; - file = f.file ? f.file->copy() : nullptr; - encoding = f.encoding; - substituteName = f.substituteName ? f.substituteName->copy() : nullptr; - type = f.type; - emb = f.emb; - subset = f.subset; - hasToUnicode = f.hasToUnicode; - fontRef = f.fontRef; - embRef = f.embRef; -} - -FontInfo::~FontInfo() -{ - delete name; - delete file; - if (substituteName) - delete substituteName; -} diff --git a/poppler/FontInfo.h b/poppler/FontInfo.h index a798c5d2..0c920769 100644 --- a/poppler/FontInfo.h +++ b/poppler/FontInfo.h @@ -30,6 +30,8 @@ #include "Object.h" #include "poppler_private_export.h" +#include <optional> +#include <string> #include <unordered_set> class GfxFont; @@ -57,15 +59,13 @@ public: // Constructor. FontInfo(GfxFont *fontA, XRef *xrefA); // Copy constructor - FontInfo(const FontInfo &f); - // Destructor. - ~FontInfo(); + FontInfo(const FontInfo &f) = default; FontInfo &operator=(const FontInfo &) = delete; - const GooString *getName() const { return name; }; - const GooString *getSubstituteName() const { return substituteName; }; - const GooString *getFile() const { return file; }; + const std::optional<std::string> &getName() const { return name; }; + const std::optional<std::string> &getSubstituteName() const { return substituteName; }; + const std::optional<std::string> &getFile() const { return file; }; const std::string &getEncoding() const { return encoding; }; Type getType() const { return type; }; bool getEmbedded() const { return emb; }; @@ -75,9 +75,9 @@ public: Ref getEmbRef() const { return embRef; }; private: - GooString *name; - GooString *substituteName; - GooString *file; + std::optional<std::string> name; + std::optional<std::string> substituteName; + std::optional<std::string> file; std::string encoding; Type type; bool emb;