summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2017-04-23 20:13:22 +0200
committerDavid Tardon <dtardon@redhat.com>2017-04-23 20:13:22 +0200
commitbef23fc8db94b94f7391a64df7fa6871456eb443 (patch)
treed05c2f2fff0e0f5eae0952e4b6690f890194525b
parent6ce30072d9b5f25ed1ebfc83801b5d533e4ee626 (diff)
replace dumb pointers by smart ones
Change-Id: Ia5497a98c7de264edfb61a78123c288448e476dd
-rw-r--r--src/lib/ABWContentCollector.cpp9
-rw-r--r--src/lib/ABWContentCollector.h8
-rw-r--r--src/lib/ABWParser.cpp27
-rw-r--r--src/lib/ABWStylesCollector.cpp12
-rw-r--r--src/lib/ABWStylesCollector.h4
5 files changed, 22 insertions, 38 deletions
diff --git a/src/lib/ABWContentCollector.cpp b/src/lib/ABWContentCollector.cpp
index f1ccfe3..8eded0c 100644
--- a/src/lib/ABWContentCollector.cpp
+++ b/src/lib/ABWContentCollector.cpp
@@ -428,7 +428,7 @@ libabw::ABWContentParsingState::~ABWContentParsingState()
libabw::ABWContentCollector::ABWContentCollector(librevenge::RVNGTextInterface *iface, const std::map<int, int> &tableSizes,
const std::map<std::string, ABWData> &data,
- const std::map<int, ABWListElement *> &listElements) :
+ const std::map<int, std::shared_ptr<ABWListElement>> &listElements) :
m_ps(new ABWContentParsingState),
m_iface(iface),
m_parsingStates(),
@@ -448,9 +448,6 @@ libabw::ABWContentCollector::ABWContentCollector(librevenge::RVNGTextInterface *
libabw::ABWContentCollector::~ABWContentCollector()
{
- for (std::vector<ABWListElement *>::iterator iter = m_dummyListElements.begin();
- iter != m_dummyListElements.end(); ++iter)
- DELETEP(*iter);
}
void libabw::ABWContentCollector::collectTextStyle(const char *name, const char *basedon, const char *followedby, const char *props)
@@ -2316,7 +2313,7 @@ void libabw::ABWContentCollector::_writeOutDummyListLevels(int oldLevel, int new
if (oldLevel < newLevel)
{
_writeOutDummyListLevels(oldLevel, newLevel-1);
- m_dummyListElements.push_back(new ABWUnorderedListElement());
+ m_dummyListElements.push_back(std::make_shared<ABWUnorderedListElement>());
m_dummyListElements.back()->m_listLevel = newLevel;
m_ps->m_listLevels.push(std::make_pair(newLevel, m_dummyListElements.back()));
librevenge::RVNGPropertyList propList;
@@ -2329,7 +2326,7 @@ void libabw::ABWContentCollector::_recurseListLevels(int oldLevel, int newLevel,
{
if (oldLevel >= newLevel)
return;
- std::map<int, ABWListElement *>::const_iterator iter = m_listElements.find(newListId);
+ const auto iter = m_listElements.find(newListId);
if (iter != m_listElements.end() && iter->second)
{
if (iter->second->m_parentId)
diff --git a/src/lib/ABWContentCollector.h b/src/lib/ABWContentCollector.h
index faee248..4064380 100644
--- a/src/lib/ABWContentCollector.h
+++ b/src/lib/ABWContentCollector.h
@@ -112,7 +112,7 @@ struct ABWContentParsingState
bool m_isFirstTextInListElement;
std::stack<ABWContentTableState> m_tableStates;
- std::stack<std::pair<int, ABWListElement *> > m_listLevels;
+ std::stack<std::pair<int, std::shared_ptr<ABWListElement>>> m_listLevels;
};
class ABWContentCollector : public ABWCollector
@@ -120,7 +120,7 @@ class ABWContentCollector : public ABWCollector
public:
ABWContentCollector(librevenge::RVNGTextInterface *iface, const std::map<int, int> &tableSizes,
const std::map<std::string, ABWData> &data,
- const std::map<int, ABWListElement *> &listElements);
+ const std::map<int, std::shared_ptr<ABWListElement>> &listElements);
virtual ~ABWContentCollector();
// collector functions
@@ -240,8 +240,8 @@ private:
int m_tableCounter;
ABWOutputElements m_outputElements;
ABWOutputElements m_pageOutputElements;
- const std::map<int, ABWListElement *> &m_listElements;
- std::vector<ABWListElement *> m_dummyListElements;
+ const std::map<int, std::shared_ptr<ABWListElement>> &m_listElements;
+ std::vector<std::shared_ptr<ABWListElement>> m_dummyListElements;
};
} // namespace libabw
diff --git a/src/lib/ABWParser.cpp b/src/lib/ABWParser.cpp
index 09a739a..778fd31 100644
--- a/src/lib/ABWParser.cpp
+++ b/src/lib/ABWParser.cpp
@@ -32,17 +32,6 @@ namespace libabw
namespace
{
-static void clearListElements(std::map<int, ABWListElement *> &listElements)
-{
- for (std::map<int, ABWListElement *>::iterator i = listElements.begin();
- i != listElements.end(); ++i)
- {
- if (i->second)
- delete i->second;
- }
- listElements.clear();
-}
-
static bool findBool(const std::string &str, bool &res)
{
using namespace ::boost::spirit::classic;
@@ -81,11 +70,11 @@ static xmlChar *call_BAD_CAST_OnConst(char const *str)
Seen corresponds to the list of level that we have already examined,
it is used to check also for loop
*/
-static int _findAndUpdateListElementId(std::map<int, ABWListElement *> &listElements, int id, std::set<int> &seen)
+static int _findAndUpdateListElementId(std::map<int, std::shared_ptr<ABWListElement>> &listElements, int id, std::set<int> &seen)
{
if (listElements.find(id)==listElements.end() || !listElements.find(id)->second)
return 0;
- ABWListElement *tmpElement= listElements.find(id)->second;
+ const std::shared_ptr<ABWListElement> &tmpElement= listElements.find(id)->second;
if (tmpElement->m_listId)
return tmpElement->m_listId;
if (seen.find(id)!=seen.end())
@@ -105,14 +94,13 @@ static int _findAndUpdateListElementId(std::map<int, ABWListElement *> &listElem
}
/** try to update the final list id for each list elements */
-static void updateListElementIds(std::map<int, ABWListElement *> &listElements)
+static void updateListElementIds(std::map<int, std::shared_ptr<ABWListElement>> &listElements)
{
std::set<int> seens;
- for (std::map<int, ABWListElement *>::iterator it=listElements.begin();
- it!=listElements.end(); ++it)
+ for (const auto &elem : listElements)
{
- if (!it->second) continue;
- _findAndUpdateListElementId(listElements, it->first, seens);
+ if (!elem.second) continue;
+ _findAndUpdateListElementId(listElements, elem.first, seens);
}
}
@@ -124,7 +112,7 @@ struct ABWParserState
~ABWParserState();
std::map<int, int> m_tableSizes;
std::map<std::string, ABWData> m_data;
- std::map<int, ABWListElement *> m_listElements;
+ std::map<int, std::shared_ptr<ABWListElement>> m_listElements;
bool m_inMetadata;
std::string m_currentMetadataKey;
@@ -145,7 +133,6 @@ ABWParserState::ABWParserState()
ABWParserState::~ABWParserState()
{
- clearListElements(m_listElements);
}
} // namespace libabw
diff --git a/src/lib/ABWStylesCollector.cpp b/src/lib/ABWStylesCollector.cpp
index 59b0b83..86182bd 100644
--- a/src/lib/ABWStylesCollector.cpp
+++ b/src/lib/ABWStylesCollector.cpp
@@ -135,7 +135,7 @@ libabw::ABWStylesParsingState::~ABWStylesParsingState() {}
libabw::ABWStylesCollector::ABWStylesCollector(std::map<int, int> &tableSizes,
std::map<std::string, ABWData> &data,
- std::map<int, ABWListElement *> &listElements) :
+ std::map<int, std::shared_ptr<ABWListElement>> &listElements) :
m_ps(new ABWStylesParsingState),
m_tableSizes(tableSizes),
m_data(data),
@@ -216,7 +216,7 @@ void libabw::ABWStylesCollector::_processList(int id, const char *listDelim, int
if ((type >= BULLETED_LIST && type < LAST_BULLETED_LIST) || type == NOT_A_LIST)
{
- ABWUnorderedListElement *tmpElement = new ABWUnorderedListElement();
+ auto tmpElement = std::make_shared<ABWUnorderedListElement>();
switch (type)
{
case BULLETED_LIST:
@@ -263,7 +263,7 @@ void libabw::ABWStylesCollector::_processList(int id, const char *listDelim, int
}
else
{
- ABWOrderedListElement *tmpElement = new ABWOrderedListElement();
+ auto tmpElement = std::make_shared<ABWOrderedListElement>();
switch (type)
{
case NUMBERED_LIST:
@@ -320,7 +320,7 @@ void libabw::ABWStylesCollector::collectList(const char *id, const char *, const
if (!intId)
return;
if (m_listElements[intId])
- delete m_listElements[intId];
+ m_listElements[intId].reset();
int intType(0);
if (!type || !findInt(type, intType) || intType < 0)
intType = 5;
@@ -346,7 +346,7 @@ void libabw::ABWStylesCollector::collectParagraphProperties(const char *level, c
if (!listid || !findInt(listid, intListId) || intListId < 0)
intListId = 0;
- std::map<int, ABWListElement *>::iterator iter = m_listElements.find(intListId);
+ auto iter = m_listElements.find(intListId);
if (iter == m_listElements.end() || !iter->second)
{
ABWPropertyMap::const_iterator i = properties.find("list-style");
@@ -406,7 +406,7 @@ void libabw::ABWStylesCollector::collectParagraphProperties(const char *level, c
}
if (iter != m_listElements.end() && iter->second)
{
- ABWListElement *listElement = iter->second;
+ const auto &listElement = iter->second;
if (!level || !findInt(level, listElement->m_listLevel) || listElement->m_listLevel < 0)
listElement->m_listLevel = 0;
diff --git a/src/lib/ABWStylesCollector.h b/src/lib/ABWStylesCollector.h
index 2b00b5d..987ea54 100644
--- a/src/lib/ABWStylesCollector.h
+++ b/src/lib/ABWStylesCollector.h
@@ -45,7 +45,7 @@ class ABWStylesCollector : public ABWCollector
public:
ABWStylesCollector(std::map<int, int> &tableSizes,
std::map<std::string, ABWData> &data,
- std::map<int, ABWListElement *> &listElements);
+ std::map<int, std::shared_ptr<ABWListElement>> &listElements);
virtual ~ABWStylesCollector();
// collector functions
@@ -108,7 +108,7 @@ private:
std::map<int, int> &m_tableSizes;
std::map<std::string, ABWData> &m_data;
int m_tableCounter;
- std::map<int, ABWListElement *> &m_listElements;
+ std::map<int, std::shared_ptr<ABWListElement>> &m_listElements;
};
} // namespace libabw