summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2018-03-25 14:23:08 +0200
committerDavid Tardon <dtardon@redhat.com>2018-03-25 14:23:40 +0200
commit467618a5b883c7303fc6ef8e10756e203ceaed11 (patch)
tree91740d7b893aa64874aa5f45e8bc17bcc76b365b
parent8dfa37807ee1d40f98729a911db3a52df0d2e65b (diff)
avoid manual memory mgmt
Change-Id: I4694b93a135dc568beb234a6300a492326122257
-rw-r--r--src/lib/VSDCharacterList.cpp20
-rw-r--r--src/lib/VSDCharacterList.h3
2 files changed, 9 insertions, 14 deletions
diff --git a/src/lib/VSDCharacterList.cpp b/src/lib/VSDCharacterList.cpp
index ae702ef..65de7af 100644
--- a/src/lib/VSDCharacterList.cpp
+++ b/src/lib/VSDCharacterList.cpp
@@ -83,14 +83,14 @@ libvisio::VSDCharacterList::VSDCharacterList(const libvisio::VSDCharacterList &c
m_elementsOrder(charList.m_elementsOrder)
{
for (auto iter = charList.m_elements.begin(); iter != charList.m_elements.end(); ++iter)
- m_elements[iter->first] = iter->second->clone();
+ m_elements[iter->first] = clone(iter->second);
}
libvisio::VSDCharacterList &libvisio::VSDCharacterList::operator=(const libvisio::VSDCharacterList &charList)
{
clear();
for (auto iter = charList.m_elements.begin(); iter != charList.m_elements.end(); ++iter)
- m_elements[iter->first] = iter->second->clone();
+ m_elements[iter->first] = clone(iter->second);
m_elementsOrder = charList.m_elementsOrder;
return *this;
}
@@ -107,14 +107,11 @@ void libvisio::VSDCharacterList::addCharIX(unsigned id, unsigned level, unsigned
const boost::optional<bool> &allcaps, const boost::optional<bool> &initcaps, const boost::optional<bool> &smallcaps,
const boost::optional<bool> &superscript, const boost::optional<bool> &subscript, const boost::optional<double> &scaleWidth)
{
- auto *tmpElement = dynamic_cast<VSDCharIX *>(m_elements[id]);
+ auto *tmpElement = dynamic_cast<VSDCharIX *>(m_elements[id].get());
if (!tmpElement)
{
- if (m_elements[id])
- delete m_elements[id];
-
- m_elements[id] = new VSDCharIX(id, level, charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline,
- strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
+ m_elements[id] = make_unique<VSDCharIX>(id, level, charCount, font, fontColour, fontSize, bold, italic, underline, doubleunderline,
+ strikeout, doublestrikeout, allcaps, initcaps, smallcaps, superscript, subscript, scaleWidth);
}
else
tmpElement->m_style.override(VSDOptionalCharStyle(charCount, font, fontColour, fontSize, bold, italic, underline,
@@ -168,19 +165,18 @@ void libvisio::VSDCharacterList::handle(VSDCollector *collector) const
{
if (empty())
return;
- std::map<unsigned, VSDCharacterListElement *>::const_iterator iter;
if (!m_elementsOrder.empty())
{
for (unsigned i = 0; i < m_elementsOrder.size(); i++)
{
- iter = m_elements.find(m_elementsOrder[i]);
+ auto iter = m_elements.find(m_elementsOrder[i]);
if (iter != m_elements.end() && (0 == i || iter->second->getCharCount()))
iter->second->handle(collector);
}
}
else
{
- for (iter = m_elements.begin(); iter != m_elements.end(); ++iter)
+ for (auto iter = m_elements.begin(); iter != m_elements.end(); ++iter)
if (m_elements.begin() == iter || iter->second->getCharCount())
iter->second->handle(collector);
}
@@ -188,8 +184,6 @@ void libvisio::VSDCharacterList::handle(VSDCollector *collector) const
void libvisio::VSDCharacterList::clear()
{
- for (auto &element : m_elements)
- delete element.second;
m_elements.clear();
m_elementsOrder.clear();
}
diff --git a/src/lib/VSDCharacterList.h b/src/lib/VSDCharacterList.h
index 5211384..555b9d6 100644
--- a/src/lib/VSDCharacterList.h
+++ b/src/lib/VSDCharacterList.h
@@ -10,6 +10,7 @@
#ifndef __VSDCHARACTERLIST_H__
#define __VSDCHARACTERLIST_H__
+#include <memory>
#include <vector>
#include <map>
#include "VSDTypes.h"
@@ -48,7 +49,7 @@ public:
return (m_elements.empty());
}
private:
- std::map<unsigned, VSDCharacterListElement *> m_elements;
+ std::map<unsigned, std::unique_ptr<VSDCharacterListElement>> m_elements;
std::vector<unsigned> m_elementsOrder;
};