diff options
author | David Tardon <dtardon@redhat.com> | 2017-04-23 20:13:22 +0200 |
---|---|---|
committer | David Tardon <dtardon@redhat.com> | 2017-04-23 20:13:22 +0200 |
commit | bef23fc8db94b94f7391a64df7fa6871456eb443 (patch) | |
tree | d05c2f2fff0e0f5eae0952e4b6690f890194525b | |
parent | 6ce30072d9b5f25ed1ebfc83801b5d533e4ee626 (diff) |
replace dumb pointers by smart ones
Change-Id: Ia5497a98c7de264edfb61a78123c288448e476dd
-rw-r--r-- | src/lib/ABWContentCollector.cpp | 9 | ||||
-rw-r--r-- | src/lib/ABWContentCollector.h | 8 | ||||
-rw-r--r-- | src/lib/ABWParser.cpp | 27 | ||||
-rw-r--r-- | src/lib/ABWStylesCollector.cpp | 12 | ||||
-rw-r--r-- | src/lib/ABWStylesCollector.h | 4 |
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 |