src/lib/CDRContentCollector.cpp | 13 -- src/lib/CDRContentCollector.h | 3 src/lib/CDRDocument.cpp | 11 +- src/lib/CDROutputElementList.cpp | 179 +++++++++++---------------------------- src/lib/CDROutputElementList.h | 7 - src/lib/CDRParser.cpp | 4 src/lib/CDRParser.h | 7 - src/lib/CDRPath.cpp | 168 +++++++++++++++++------------------- src/lib/CDRPath.h | 9 + src/lib/libcdr_utils.h | 7 + 10 files changed, 164 insertions(+), 244 deletions(-)
New commits: commit 517dbbed46ee34710d0346dbe84c9fbe6a426e7d Author: David Tardon <dtar...@redhat.com> Date: Sat Mar 24 17:22:15 2018 +0100 drop unused headers Change-Id: I44a999f25ea14a73737019350d40dd4ebb982854 diff --git a/src/lib/CDRParser.h b/src/lib/CDRParser.h index 4bb79d6..242736d 100644 --- a/src/lib/CDRParser.h +++ b/src/lib/CDRParser.h @@ -10,8 +10,6 @@ #ifndef __CDRPARSER_H__ #define __CDRPARSER_H__ -#include <stdio.h> -#include <iostream> #include <memory> #include <vector> #include <map> commit 7c9f013d8924407c88515533a1a5703282b075dc Author: David Tardon <dtar...@redhat.com> Date: Sat Mar 24 17:21:45 2018 +0100 use unique_ptr Change-Id: I8954729882f578f59ec15bef193737736281a940 diff --git a/src/lib/CDRDocument.cpp b/src/lib/CDRDocument.cpp index 96f652e..73a9527 100644 --- a/src/lib/CDRDocument.cpp +++ b/src/lib/CDRDocument.cpp @@ -117,7 +117,7 @@ CDRAPI bool libcdr::CDRDocument::parse(librevenge::RVNGInputStream *input_, libr input->seek(0, librevenge::RVNG_SEEK_SET); CDRParserState ps; CDRStylesCollector stylesCollector(ps); - CDRParser stylesParser(std::vector<librevenge::RVNGInputStream *>(), &stylesCollector); + CDRParser stylesParser(std::vector<std::unique_ptr<librevenge::RVNGInputStream>>(), &stylesCollector); if (version >= 300) retVal = stylesParser.parseRecords(input.get()); else @@ -128,7 +128,7 @@ CDRAPI bool libcdr::CDRDocument::parse(librevenge::RVNGInputStream *input_, libr { input->seek(0, librevenge::RVNG_SEEK_SET); CDRContentCollector contentCollector(ps, painter); - CDRParser contentParser(std::vector<librevenge::RVNGInputStream *>(), &contentCollector); + CDRParser contentParser(std::vector<std::unique_ptr<librevenge::RVNGInputStream>>(), &contentCollector); if (version >= 300) retVal = contentParser.parseRecords(input.get()); else @@ -144,7 +144,6 @@ CDRAPI bool libcdr::CDRDocument::parse(librevenge::RVNGInputStream *input_, libr } librevenge::RVNGInputStream *tmpInput = input_; - std::vector<librevenge::RVNGInputStream *> dataStreams; try { std::vector<std::string> dataFiles; @@ -179,6 +178,7 @@ CDRAPI bool libcdr::CDRDocument::parse(librevenge::RVNGInputStream *input_, libr } } } + std::vector<std::unique_ptr<librevenge::RVNGInputStream>> dataStreams; dataStreams.reserve(dataFiles.size()); for (const auto &dataFile : dataFiles) { @@ -186,7 +186,8 @@ CDRAPI bool libcdr::CDRDocument::parse(librevenge::RVNGInputStream *input_, libr streamName += dataFile; CDR_DEBUG_MSG(("Extracting stream: %s\n", streamName.c_str())); tmpInput->seek(0, librevenge::RVNG_SEEK_SET); - dataStreams.push_back(tmpInput->getSubStreamByName(streamName.c_str())); + std::unique_ptr<librevenge::RVNGInputStream> strm(tmpInput->getSubStreamByName(streamName.c_str())); + dataStreams.push_back(std::move(strm)); } if (!input) input.reset(tmpInput, CDRDummyDeleter()); @@ -223,8 +224,6 @@ CDRAPI bool libcdr::CDRDocument::parse(librevenge::RVNGInputStream *input_, libr { retVal = false; } - for (auto &dataStream : dataStreams) - delete dataStream; return retVal; } diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp index 4e7956e..e58fbca 100644 --- a/src/lib/CDRParser.cpp +++ b/src/lib/CDRParser.cpp @@ -157,7 +157,7 @@ void normalizeAngle(double &angle) } // anonymous namespace -libcdr::CDRParser::CDRParser(const std::vector<librevenge::RVNGInputStream *> &externalStreams, libcdr::CDRCollector *collector) +libcdr::CDRParser::CDRParser(const std::vector<std::unique_ptr<librevenge::RVNGInputStream>> &externalStreams, libcdr::CDRCollector *collector) : CommonParser(collector), m_externalStreams(externalStreams), m_fonts(), m_fillStyles(), m_lineStyles(), m_arrows(), m_version(0), m_waldoOutlId(0), m_waldoFillId(0) {} @@ -2427,7 +2427,7 @@ bool libcdr::CDRParser::_redirectX6Chunk(librevenge::RVNGInputStream **input, un if (streamNumber < m_externalStreams.size()) { unsigned streamOffset = readU32(*input); - *input = m_externalStreams[streamNumber]; + *input = m_externalStreams[streamNumber].get(); if (*input) { (*input)->seek(streamOffset, librevenge::RVNG_SEEK_SET); diff --git a/src/lib/CDRParser.h b/src/lib/CDRParser.h index 8ce7887..4bb79d6 100644 --- a/src/lib/CDRParser.h +++ b/src/lib/CDRParser.h @@ -12,6 +12,7 @@ #include <stdio.h> #include <iostream> +#include <memory> #include <vector> #include <map> #include <stack> @@ -27,7 +28,7 @@ class CDRCollector; class CDRParser : protected CommonParser { public: - explicit CDRParser(const std::vector<librevenge::RVNGInputStream *> &externalStreams, CDRCollector *collector); + explicit CDRParser(const std::vector<std::unique_ptr<librevenge::RVNGInputStream>> &externalStreams, CDRCollector *collector); ~CDRParser() override; bool parseRecords(librevenge::RVNGInputStream *input, const std::vector<unsigned> &blockLengths = std::vector<unsigned>(), unsigned level = 0); bool parseWaldo(librevenge::RVNGInputStream *input); @@ -96,7 +97,7 @@ private: bool _redirectX6Chunk(librevenge::RVNGInputStream **input, unsigned &length); void _readX6StyleString(librevenge::RVNGInputStream *input, unsigned length, CDRStyle &style); - std::vector<librevenge::RVNGInputStream *> m_externalStreams; + const std::vector<std::unique_ptr<librevenge::RVNGInputStream>> &m_externalStreams; std::map<unsigned, CDRFont> m_fonts; std::map<unsigned, CDRFillStyle> m_fillStyles; commit fe04e802d5be570709a07d40237ef6bf468578f7 Author: David Tardon <dtar...@redhat.com> Date: Sat Mar 24 17:11:55 2018 +0100 use unique_ptr Change-Id: I4b1dafc395c8dc2a891ea6541abfee23e30b2353 diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp index c8a556f..683d8fd 100644 --- a/src/lib/CDRContentCollector.cpp +++ b/src/lib/CDRContentCollector.cpp @@ -66,7 +66,7 @@ libcdr::CDRContentCollector::CDRContentCollector(libcdr::CDRParserState &ps, lib m_ignorePage(false), m_page(ps.m_pages[0]), m_pageIndex(0), m_currentFillStyle(), m_currentLineStyle(), m_spnd(0), m_currentObjectLevel(0), m_currentGroupLevel(0), m_currentVectLevel(0), m_currentPageLevel(0), m_currentStyleId(0), m_currentImage(), m_currentText(nullptr), m_currentBBox(), m_currentTextBox(), m_currentPath(), - m_currentTransforms(), m_fillTransforms(), m_polygon(nullptr), m_isInPolygon(false), m_isInSpline(false), + m_currentTransforms(), m_fillTransforms(), m_polygon(), m_isInPolygon(false), m_isInSpline(false), m_outputElementsStack(nullptr), m_contentOutputElementsStack(), m_fillOutputElementsStack(), m_outputElementsQueue(nullptr), m_contentOutputElementsQueue(), m_fillOutputElementsQueue(), m_groupLevels(), m_groupTransforms(), m_splineData(), m_fillOpacity(1.0), m_reverseOrder(reverseOrder), @@ -82,7 +82,6 @@ libcdr::CDRContentCollector::~CDRContentCollector() _endPage(); if (m_isDocumentStarted) _endDocument(); - delete m_polygon; } void libcdr::CDRContentCollector::_startDocument() @@ -222,11 +221,7 @@ void libcdr::CDRContentCollector::_flushCurrentPath() { if (m_polygon && m_isInPolygon) m_polygon->create(m_currentPath); - if (m_polygon) - { - delete m_polygon; - m_polygon = nullptr; - } + m_polygon.reset(); m_isInPolygon = false; if (!m_splineData.empty() && m_isInSpline) m_splineData.create(m_currentPath); @@ -682,9 +677,7 @@ void libcdr::CDRContentCollector::collectSpline() void libcdr::CDRContentCollector::collectPolygonTransform(unsigned numAngles, unsigned nextPoint, double rx, double ry, double cx, double cy) { - if (m_polygon) - delete m_polygon; - m_polygon = new CDRPolygon(numAngles, nextPoint, rx, ry, cx, cy); + m_polygon.reset(new CDRPolygon(numAngles, nextPoint, rx, ry, cx, cy)); } void libcdr::CDRContentCollector::_fillProperties(librevenge::RVNGPropertyList &propList) diff --git a/src/lib/CDRContentCollector.h b/src/lib/CDRContentCollector.h index e0cbf86..2eae18c 100644 --- a/src/lib/CDRContentCollector.h +++ b/src/lib/CDRContentCollector.h @@ -11,6 +11,7 @@ #define __CDRCONTENTCOLLECTOR_H__ #include <map> +#include <memory> #include <utility> #include <vector> #include <stack> @@ -107,7 +108,7 @@ private: CDRPath m_currentPath; CDRTransforms m_currentTransforms; CDRTransforms m_fillTransforms; - CDRPolygon *m_polygon; + std::unique_ptr<CDRPolygon> m_polygon; bool m_isInPolygon; bool m_isInSpline; std::stack<CDROutputElementList> *m_outputElementsStack; commit 7807ebc00aafe62d8c54f66c1297e49e48f9cc43 Author: David Tardon <dtar...@redhat.com> Date: Sat Mar 24 17:07:52 2018 +0100 use shared_ptr Change-Id: I40a15f55f3681bc8a70a079d8ee8a80c748639df diff --git a/src/lib/CDROutputElementList.cpp b/src/lib/CDROutputElementList.cpp index 12b142e..001f9dc 100644 --- a/src/lib/CDROutputElementList.cpp +++ b/src/lib/CDROutputElementList.cpp @@ -102,7 +102,6 @@ public: CDROutputElement() {} virtual ~CDROutputElement() {} virtual void draw(librevenge::RVNGDrawingInterface *painter) = 0; - virtual CDROutputElement *clone() = 0; }; @@ -112,10 +111,6 @@ public: CDRStyleOutputElement(const librevenge::RVNGPropertyList &propList); ~CDRStyleOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDRStyleOutputElement(m_propList); - } private: librevenge::RVNGPropertyList m_propList; }; @@ -127,10 +122,6 @@ public: CDRPathOutputElement(const librevenge::RVNGPropertyList &propList); ~CDRPathOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDRPathOutputElement(m_propList); - } private: librevenge::RVNGPropertyList m_propList; }; @@ -142,10 +133,6 @@ public: CDRGraphicObjectOutputElement(const librevenge::RVNGPropertyList &propList); ~CDRGraphicObjectOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDRGraphicObjectOutputElement(m_propList); - } private: librevenge::RVNGPropertyList m_propList; }; @@ -157,10 +144,6 @@ public: CDRStartTextObjectOutputElement(const librevenge::RVNGPropertyList &propList); ~CDRStartTextObjectOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDRStartTextObjectOutputElement(m_propList); - } private: librevenge::RVNGPropertyList m_propList; }; @@ -172,10 +155,6 @@ public: CDROpenParagraphOutputElement(const librevenge::RVNGPropertyList &propList); ~CDROpenParagraphOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDROpenParagraphOutputElement(m_propList); - } private: librevenge::RVNGPropertyList m_propList; }; @@ -187,10 +166,6 @@ public: CDROpenSpanOutputElement(const librevenge::RVNGPropertyList &propList); ~CDROpenSpanOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDROpenSpanOutputElement(m_propList); - } private: librevenge::RVNGPropertyList m_propList; }; @@ -202,10 +177,6 @@ public: CDRInsertTextOutputElement(const librevenge::RVNGString &text); ~CDRInsertTextOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDRInsertTextOutputElement(m_text); - } private: librevenge::RVNGString m_text; }; @@ -217,10 +188,6 @@ public: CDRCloseSpanOutputElement(); ~CDRCloseSpanOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDRCloseSpanOutputElement(); - } }; @@ -230,10 +197,6 @@ public: CDRCloseParagraphOutputElement(); ~CDRCloseParagraphOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDRCloseParagraphOutputElement(); - } }; @@ -243,10 +206,6 @@ public: CDREndTextObjectOutputElement(); ~CDREndTextObjectOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDREndTextObjectOutputElement(); - } }; class CDRStartLayerOutputElement : public CDROutputElement @@ -255,10 +214,6 @@ public: CDRStartLayerOutputElement(const librevenge::RVNGPropertyList &propList); ~CDRStartLayerOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDRStartLayerOutputElement(m_propList); - } private: librevenge::RVNGPropertyList m_propList; }; @@ -269,10 +224,6 @@ public: CDREndLayerOutputElement(); ~CDREndLayerOutputElement() override {} void draw(librevenge::RVNGDrawingInterface *painter) override; - CDROutputElement *clone() override - { - return new CDREndLayerOutputElement(); - } }; CDRStyleOutputElement::CDRStyleOutputElement(const librevenge::RVNGPropertyList &propList) : @@ -394,32 +345,8 @@ CDROutputElementList::CDROutputElementList() { } -CDROutputElementList::CDROutputElementList(const CDROutputElementList &elementList) - : m_elements() -{ - std::vector<CDROutputElement *>::const_iterator iter; - for (iter = elementList.m_elements.begin(); iter != elementList.m_elements.end(); ++iter) - m_elements.push_back((*iter)->clone()); -} - -CDROutputElementList &CDROutputElementList::operator=(const CDROutputElementList &elementList) -{ - for (auto &element : m_elements) - delete element; - - m_elements.clear(); - - for (auto element : elementList.m_elements) - m_elements.push_back(element->clone()); - - return *this; -} - CDROutputElementList::~CDROutputElementList() { - for (auto &element : m_elements) - delete element; - m_elements.clear(); } void CDROutputElementList::draw(librevenge::RVNGDrawingInterface *painter) const @@ -430,62 +357,62 @@ void CDROutputElementList::draw(librevenge::RVNGDrawingInterface *painter) const void CDROutputElementList::addStyle(const librevenge::RVNGPropertyList &propList) { - m_elements.push_back(new CDRStyleOutputElement(propList)); + m_elements.push_back(std::make_shared<CDRStyleOutputElement>(propList)); } void CDROutputElementList::addPath(const librevenge::RVNGPropertyList &propList) { - m_elements.push_back(new CDRPathOutputElement(propList)); + m_elements.push_back(std::make_shared<CDRPathOutputElement>(propList)); } void CDROutputElementList::addGraphicObject(const librevenge::RVNGPropertyList &propList) { - m_elements.push_back(new CDRGraphicObjectOutputElement(propList)); + m_elements.push_back(std::make_shared<CDRGraphicObjectOutputElement>(propList)); } void CDROutputElementList::addStartTextObject(const librevenge::RVNGPropertyList &propList) { - m_elements.push_back(new CDRStartTextObjectOutputElement(propList)); + m_elements.push_back(std::make_shared<CDRStartTextObjectOutputElement>(propList)); } void CDROutputElementList::addOpenParagraph(const librevenge::RVNGPropertyList &propList) { - m_elements.push_back(new CDROpenParagraphOutputElement(propList)); + m_elements.push_back(std::make_shared<CDROpenParagraphOutputElement>(propList)); } void CDROutputElementList::addOpenSpan(const librevenge::RVNGPropertyList &propList) { - m_elements.push_back(new CDROpenSpanOutputElement(propList)); + m_elements.push_back(std::make_shared<CDROpenSpanOutputElement>(propList)); } void CDROutputElementList::addInsertText(const librevenge::RVNGString &text) { - m_elements.push_back(new CDRInsertTextOutputElement(text)); + m_elements.push_back(std::make_shared<CDRInsertTextOutputElement>(text)); } void CDROutputElementList::addCloseSpan() { - m_elements.push_back(new CDRCloseSpanOutputElement()); + m_elements.push_back(std::make_shared<CDRCloseSpanOutputElement>()); } void CDROutputElementList::addCloseParagraph() { - m_elements.push_back(new CDRCloseParagraphOutputElement()); + m_elements.push_back(std::make_shared<CDRCloseParagraphOutputElement>()); } void CDROutputElementList::addEndTextObject() { - m_elements.push_back(new CDREndTextObjectOutputElement()); + m_elements.push_back(std::make_shared<CDREndTextObjectOutputElement>()); } void CDROutputElementList::addStartGroup(const librevenge::RVNGPropertyList &propList) { - m_elements.push_back(new CDRStartLayerOutputElement(propList)); + m_elements.push_back(std::make_shared<CDRStartLayerOutputElement>(propList)); } void CDROutputElementList::addEndGroup() { - m_elements.push_back(new CDREndLayerOutputElement()); + m_elements.push_back(std::make_shared<CDREndLayerOutputElement>()); } } // namespace libcdr diff --git a/src/lib/CDROutputElementList.h b/src/lib/CDROutputElementList.h index d1a4991..f5bba06 100644 --- a/src/lib/CDROutputElementList.h +++ b/src/lib/CDROutputElementList.h @@ -10,6 +10,7 @@ #ifndef __CDROUTPUTELEMENTLIST_H__ #define __CDROUTPUTELEMENTLIST_H__ +#include <memory> #include <vector> #include <librevenge/librevenge.h> @@ -23,9 +24,7 @@ class CDROutputElementList { public: CDROutputElementList(); - CDROutputElementList(const CDROutputElementList &elementList); - CDROutputElementList &operator=(const CDROutputElementList &elementList); - virtual ~CDROutputElementList(); + ~CDROutputElementList(); void draw(librevenge::RVNGDrawingInterface *painter) const; void addStyle(const librevenge::RVNGPropertyList &propList); void addPath(const librevenge::RVNGPropertyList &propList); @@ -44,7 +43,7 @@ public: return m_elements.empty(); } private: - std::vector<CDROutputElement *> m_elements; + std::vector<std::shared_ptr<CDROutputElement>> m_elements; }; commit 7bd7f56e86d5f6b87d402c34072d4054474ae473 Author: David Tardon <dtar...@redhat.com> Date: Sat Mar 24 17:04:36 2018 +0100 put the whole impl. in libcdr namespace Change-Id: Id0571b26ed037c5ec9d455599d96bad6eaf8ae3d diff --git a/src/lib/CDROutputElementList.cpp b/src/lib/CDROutputElementList.cpp index c1de564..12b142e 100644 --- a/src/lib/CDROutputElementList.cpp +++ b/src/lib/CDROutputElementList.cpp @@ -275,136 +275,134 @@ public: } }; -} // namespace libcdr - -libcdr::CDRStyleOutputElement::CDRStyleOutputElement(const librevenge::RVNGPropertyList &propList) : +CDRStyleOutputElement::CDRStyleOutputElement(const librevenge::RVNGPropertyList &propList) : m_propList(propList) {} -void libcdr::CDRStyleOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDRStyleOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->setStyle(m_propList); } -libcdr::CDRPathOutputElement::CDRPathOutputElement(const librevenge::RVNGPropertyList &propList) : +CDRPathOutputElement::CDRPathOutputElement(const librevenge::RVNGPropertyList &propList) : m_propList(propList) {} -void libcdr::CDRPathOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDRPathOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->drawPath(m_propList); } -libcdr::CDRGraphicObjectOutputElement::CDRGraphicObjectOutputElement(const librevenge::RVNGPropertyList &propList) : +CDRGraphicObjectOutputElement::CDRGraphicObjectOutputElement(const librevenge::RVNGPropertyList &propList) : m_propList(propList) {} -void libcdr::CDRGraphicObjectOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDRGraphicObjectOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->drawGraphicObject(m_propList); } -libcdr::CDRStartTextObjectOutputElement::CDRStartTextObjectOutputElement(const librevenge::RVNGPropertyList &propList) : +CDRStartTextObjectOutputElement::CDRStartTextObjectOutputElement(const librevenge::RVNGPropertyList &propList) : m_propList(propList) {} -void libcdr::CDRStartTextObjectOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDRStartTextObjectOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->startTextObject(m_propList); } -libcdr::CDROpenSpanOutputElement::CDROpenSpanOutputElement(const librevenge::RVNGPropertyList &propList) : +CDROpenSpanOutputElement::CDROpenSpanOutputElement(const librevenge::RVNGPropertyList &propList) : m_propList(propList) {} -void libcdr::CDROpenSpanOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDROpenSpanOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->openSpan(m_propList); } -libcdr::CDROpenParagraphOutputElement::CDROpenParagraphOutputElement(const librevenge::RVNGPropertyList &propList) : +CDROpenParagraphOutputElement::CDROpenParagraphOutputElement(const librevenge::RVNGPropertyList &propList) : m_propList(propList) {} -void libcdr::CDROpenParagraphOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDROpenParagraphOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->openParagraph(m_propList); } -libcdr::CDRInsertTextOutputElement::CDRInsertTextOutputElement(const librevenge::RVNGString &text) : +CDRInsertTextOutputElement::CDRInsertTextOutputElement(const librevenge::RVNGString &text) : m_text(text) {} -void libcdr::CDRInsertTextOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDRInsertTextOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) separateSpacesAndInsertText(painter, m_text); } -libcdr::CDRCloseSpanOutputElement::CDRCloseSpanOutputElement() {} +CDRCloseSpanOutputElement::CDRCloseSpanOutputElement() {} -void libcdr::CDRCloseSpanOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDRCloseSpanOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->closeSpan(); } -libcdr::CDRCloseParagraphOutputElement::CDRCloseParagraphOutputElement() {} +CDRCloseParagraphOutputElement::CDRCloseParagraphOutputElement() {} -void libcdr::CDRCloseParagraphOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDRCloseParagraphOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->closeParagraph(); } -libcdr::CDREndTextObjectOutputElement::CDREndTextObjectOutputElement() {} +CDREndTextObjectOutputElement::CDREndTextObjectOutputElement() {} -void libcdr::CDREndTextObjectOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDREndTextObjectOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->endTextObject(); } -libcdr::CDREndLayerOutputElement::CDREndLayerOutputElement() {} +CDREndLayerOutputElement::CDREndLayerOutputElement() {} -void libcdr::CDREndLayerOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDREndLayerOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->endLayer(); } -libcdr::CDRStartLayerOutputElement::CDRStartLayerOutputElement(const librevenge::RVNGPropertyList &propList) : +CDRStartLayerOutputElement::CDRStartLayerOutputElement(const librevenge::RVNGPropertyList &propList) : m_propList(propList) {} -void libcdr::CDRStartLayerOutputElement::draw(librevenge::RVNGDrawingInterface *painter) +void CDRStartLayerOutputElement::draw(librevenge::RVNGDrawingInterface *painter) { if (painter) painter->startLayer(m_propList); } -libcdr::CDROutputElementList::CDROutputElementList() +CDROutputElementList::CDROutputElementList() : m_elements() { } -libcdr::CDROutputElementList::CDROutputElementList(const libcdr::CDROutputElementList &elementList) +CDROutputElementList::CDROutputElementList(const CDROutputElementList &elementList) : m_elements() { - std::vector<libcdr::CDROutputElement *>::const_iterator iter; + std::vector<CDROutputElement *>::const_iterator iter; for (iter = elementList.m_elements.begin(); iter != elementList.m_elements.end(); ++iter) m_elements.push_back((*iter)->clone()); } -libcdr::CDROutputElementList &libcdr::CDROutputElementList::operator=(const libcdr::CDROutputElementList &elementList) +CDROutputElementList &CDROutputElementList::operator=(const CDROutputElementList &elementList) { for (auto &element : m_elements) delete element; @@ -417,77 +415,79 @@ libcdr::CDROutputElementList &libcdr::CDROutputElementList::operator=(const libc return *this; } -libcdr::CDROutputElementList::~CDROutputElementList() +CDROutputElementList::~CDROutputElementList() { for (auto &element : m_elements) delete element; m_elements.clear(); } -void libcdr::CDROutputElementList::draw(librevenge::RVNGDrawingInterface *painter) const +void CDROutputElementList::draw(librevenge::RVNGDrawingInterface *painter) const { for (auto element : m_elements) element->draw(painter); } -void libcdr::CDROutputElementList::addStyle(const librevenge::RVNGPropertyList &propList) +void CDROutputElementList::addStyle(const librevenge::RVNGPropertyList &propList) { m_elements.push_back(new CDRStyleOutputElement(propList)); } -void libcdr::CDROutputElementList::addPath(const librevenge::RVNGPropertyList &propList) +void CDROutputElementList::addPath(const librevenge::RVNGPropertyList &propList) { m_elements.push_back(new CDRPathOutputElement(propList)); } -void libcdr::CDROutputElementList::addGraphicObject(const librevenge::RVNGPropertyList &propList) +void CDROutputElementList::addGraphicObject(const librevenge::RVNGPropertyList &propList) { m_elements.push_back(new CDRGraphicObjectOutputElement(propList)); } -void libcdr::CDROutputElementList::addStartTextObject(const librevenge::RVNGPropertyList &propList) +void CDROutputElementList::addStartTextObject(const librevenge::RVNGPropertyList &propList) { m_elements.push_back(new CDRStartTextObjectOutputElement(propList)); } -void libcdr::CDROutputElementList::addOpenParagraph(const librevenge::RVNGPropertyList &propList) +void CDROutputElementList::addOpenParagraph(const librevenge::RVNGPropertyList &propList) { m_elements.push_back(new CDROpenParagraphOutputElement(propList)); } -void libcdr::CDROutputElementList::addOpenSpan(const librevenge::RVNGPropertyList &propList) +void CDROutputElementList::addOpenSpan(const librevenge::RVNGPropertyList &propList) { m_elements.push_back(new CDROpenSpanOutputElement(propList)); } -void libcdr::CDROutputElementList::addInsertText(const librevenge::RVNGString &text) +void CDROutputElementList::addInsertText(const librevenge::RVNGString &text) { m_elements.push_back(new CDRInsertTextOutputElement(text)); } -void libcdr::CDROutputElementList::addCloseSpan() +void CDROutputElementList::addCloseSpan() { m_elements.push_back(new CDRCloseSpanOutputElement()); } -void libcdr::CDROutputElementList::addCloseParagraph() +void CDROutputElementList::addCloseParagraph() { m_elements.push_back(new CDRCloseParagraphOutputElement()); } -void libcdr::CDROutputElementList::addEndTextObject() +void CDROutputElementList::addEndTextObject() { m_elements.push_back(new CDREndTextObjectOutputElement()); } -void libcdr::CDROutputElementList::addStartGroup(const librevenge::RVNGPropertyList &propList) +void CDROutputElementList::addStartGroup(const librevenge::RVNGPropertyList &propList) { m_elements.push_back(new CDRStartLayerOutputElement(propList)); } -void libcdr::CDROutputElementList::addEndGroup() +void CDROutputElementList::addEndGroup() { m_elements.push_back(new CDREndLayerOutputElement()); } +} // namespace libcdr + /* vim:set shiftwidth=2 softtabstop=2 expandtab: */ commit 53426f781068a9d72456b020223569d4d52252c0 Author: David Tardon <dtar...@redhat.com> Date: Sat Mar 24 17:02:00 2018 +0100 put the whole impl. in libcdr namespace Change-Id: Ibf8e335d7ca43e1c6405da5d2137744ca995df47 diff --git a/src/lib/CDRPath.cpp b/src/lib/CDRPath.cpp index 7d2f7a4..7cff9cf 100644 --- a/src/lib/CDRPath.cpp +++ b/src/lib/CDRPath.cpp @@ -19,6 +19,9 @@ #define DEBUG_SPLINES 0 #endif +namespace libcdr +{ + namespace { @@ -219,9 +222,6 @@ static void getCubicBezierBBox(double x0, double y0, double x1, double y1, doubl } // anonymous namespace -namespace libcdr -{ - class CDRMoveToElement : public CDRPathElement { public: @@ -350,10 +350,7 @@ public: std::unique_ptr<CDRPathElement> clone() override; }; -} // namespace libcdr - - -void libcdr::CDRMoveToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const +void CDRMoveToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const { librevenge::RVNGPropertyList node; node.insert("librevenge:path-action", "M"); @@ -362,22 +359,22 @@ void libcdr::CDRMoveToElement::writeOut(librevenge::RVNGPropertyListVector &vec) vec.append(node); } -void libcdr::CDRMoveToElement::transform(const CDRTransforms &trafos) +void CDRMoveToElement::transform(const CDRTransforms &trafos) { trafos.applyToPoint(m_x,m_y); } -void libcdr::CDRMoveToElement::transform(const CDRTransform &trafo) +void CDRMoveToElement::transform(const CDRTransform &trafo) { trafo.applyToPoint(m_x,m_y); } -std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRMoveToElement::clone() +std::unique_ptr<CDRPathElement> CDRMoveToElement::clone() { return make_unique<CDRMoveToElement>(m_x, m_y); } -void libcdr::CDRLineToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const +void CDRLineToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const { librevenge::RVNGPropertyList node; node.insert("librevenge:path-action", "L"); @@ -386,22 +383,22 @@ void libcdr::CDRLineToElement::writeOut(librevenge::RVNGPropertyListVector &vec) vec.append(node); } -void libcdr::CDRLineToElement::transform(const CDRTransforms &trafos) +void CDRLineToElement::transform(const CDRTransforms &trafos) { trafos.applyToPoint(m_x,m_y); } -void libcdr::CDRLineToElement::transform(const CDRTransform &trafo) +void CDRLineToElement::transform(const CDRTransform &trafo) { trafo.applyToPoint(m_x,m_y); } -std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRLineToElement::clone() +std::unique_ptr<CDRPathElement> CDRLineToElement::clone() { return make_unique<CDRLineToElement>(m_x, m_y); } -void libcdr::CDRCubicBezierToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const +void CDRCubicBezierToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const { librevenge::RVNGPropertyList node; node.insert("librevenge:path-action", "C"); @@ -414,26 +411,26 @@ void libcdr::CDRCubicBezierToElement::writeOut(librevenge::RVNGPropertyListVecto vec.append(node); } -void libcdr::CDRCubicBezierToElement::transform(const CDRTransforms &trafos) +void CDRCubicBezierToElement::transform(const CDRTransforms &trafos) { trafos.applyToPoint(m_x1,m_y1); trafos.applyToPoint(m_x2,m_y2); trafos.applyToPoint(m_x,m_y); } -void libcdr::CDRCubicBezierToElement::transform(const CDRTransform &trafo) +void CDRCubicBezierToElement::transform(const CDRTransform &trafo) { trafo.applyToPoint(m_x1,m_y1); trafo.applyToPoint(m_x2,m_y2); trafo.applyToPoint(m_x,m_y); } -std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRCubicBezierToElement::clone() +std::unique_ptr<CDRPathElement> CDRCubicBezierToElement::clone() { return make_unique<CDRCubicBezierToElement>(m_x1, m_y1, m_x2, m_y2, m_x, m_y); } -void libcdr::CDRQuadraticBezierToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const +void CDRQuadraticBezierToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const { librevenge::RVNGPropertyList node; node.insert("librevenge:path-action", "Q"); @@ -444,26 +441,26 @@ void libcdr::CDRQuadraticBezierToElement::writeOut(librevenge::RVNGPropertyListV vec.append(node); } -void libcdr::CDRQuadraticBezierToElement::transform(const CDRTransforms &trafos) +void CDRQuadraticBezierToElement::transform(const CDRTransforms &trafos) { trafos.applyToPoint(m_x1,m_y1); trafos.applyToPoint(m_x,m_y); } -void libcdr::CDRQuadraticBezierToElement::transform(const CDRTransform &trafo) +void CDRQuadraticBezierToElement::transform(const CDRTransform &trafo) { trafo.applyToPoint(m_x1,m_y1); trafo.applyToPoint(m_x,m_y); } -std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRQuadraticBezierToElement::clone() +std::unique_ptr<CDRPathElement> CDRQuadraticBezierToElement::clone() { return make_unique<CDRQuadraticBezierToElement>(m_x1, m_y1, m_x, m_y); } #define CDR_SPLINE_DEGREE 3 -unsigned libcdr::CDRSplineToElement::knot(unsigned i) const +unsigned CDRSplineToElement::knot(unsigned i) const { /* Emulates knot vector of an uniform B-Spline of degree 3 */ if (i < CDR_SPLINE_DEGREE) @@ -473,7 +470,7 @@ unsigned libcdr::CDRSplineToElement::knot(unsigned i) const return i - CDR_SPLINE_DEGREE; } -void libcdr::CDRSplineToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const +void CDRSplineToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const { librevenge::RVNGPropertyList node; @@ -570,24 +567,24 @@ void libcdr::CDRSplineToElement::writeOut(librevenge::RVNGPropertyListVector &ve } } -void libcdr::CDRSplineToElement::transform(const CDRTransforms &trafos) +void CDRSplineToElement::transform(const CDRTransforms &trafos) { for (auto &point : m_points) trafos.applyToPoint(point.first, point.second); } -void libcdr::CDRSplineToElement::transform(const CDRTransform &trafo) +void CDRSplineToElement::transform(const CDRTransform &trafo) { for (auto &point : m_points) trafo.applyToPoint(point.first, point.second); } -std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRSplineToElement::clone() +std::unique_ptr<CDRPathElement> CDRSplineToElement::clone() { return libcdr::make_unique<CDRSplineToElement>(m_points); } -void libcdr::CDRArcToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const +void CDRArcToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const { librevenge::RVNGPropertyList node; node.insert("librevenge:path-action", "A"); @@ -601,84 +598,84 @@ void libcdr::CDRArcToElement::writeOut(librevenge::RVNGPropertyListVector &vec) vec.append(node); } -void libcdr::CDRArcToElement::transform(const CDRTransforms &trafos) +void CDRArcToElement::transform(const CDRTransforms &trafos) { trafos.applyToArc(m_rx, m_ry, m_rotation, m_sweep, m_x, m_y); } -void libcdr::CDRArcToElement::transform(const CDRTransform &trafo) +void CDRArcToElement::transform(const CDRTransform &trafo) { trafo.applyToArc(m_rx, m_ry, m_rotation, m_sweep, m_x, m_y); } -std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRArcToElement::clone() +std::unique_ptr<CDRPathElement> CDRArcToElement::clone() { return make_unique<CDRArcToElement>(m_rx, m_ry, m_rotation, m_largeArc, m_sweep, m_x, m_y); } -void libcdr::CDRClosePathElement::transform(const CDRTransforms &) +void CDRClosePathElement::transform(const CDRTransforms &) { } -void libcdr::CDRClosePathElement::transform(const CDRTransform &) +void CDRClosePathElement::transform(const CDRTransform &) { } -std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRClosePathElement::clone() +std::unique_ptr<CDRPathElement> CDRClosePathElement::clone() { return make_unique<CDRClosePathElement>(); } -void libcdr::CDRClosePathElement::writeOut(librevenge::RVNGPropertyListVector &vec) const +void CDRClosePathElement::writeOut(librevenge::RVNGPropertyListVector &vec) const { librevenge::RVNGPropertyList node; node.insert("librevenge:path-action", "Z"); vec.append(node); } -void libcdr::CDRPath::appendMoveTo(double x, double y) +void CDRPath::appendMoveTo(double x, double y) { - m_elements.push_back(make_unique<libcdr::CDRMoveToElement>(x, y)); + m_elements.push_back(make_unique<CDRMoveToElement>(x, y)); } -void libcdr::CDRPath::appendLineTo(double x, double y) +void CDRPath::appendLineTo(double x, double y) { - m_elements.push_back(make_unique<libcdr::CDRLineToElement>(x, y)); + m_elements.push_back(make_unique<CDRLineToElement>(x, y)); } -void libcdr::CDRPath::appendCubicBezierTo(double x1, double y1, double x2, double y2, double x, double y) +void CDRPath::appendCubicBezierTo(double x1, double y1, double x2, double y2, double x, double y) { - m_elements.push_back(make_unique<libcdr::CDRCubicBezierToElement>(x1, y1, x2, y2, x, y)); + m_elements.push_back(make_unique<CDRCubicBezierToElement>(x1, y1, x2, y2, x, y)); } -void libcdr::CDRPath::appendQuadraticBezierTo(double x1, double y1, double x, double y) +void CDRPath::appendQuadraticBezierTo(double x1, double y1, double x, double y) { - m_elements.push_back(make_unique<libcdr::CDRQuadraticBezierToElement>(x1, y1, x, y)); + m_elements.push_back(make_unique<CDRQuadraticBezierToElement>(x1, y1, x, y)); } -void libcdr::CDRPath::appendArcTo(double rx, double ry, double rotation, bool longAngle, bool sweep, double x, double y) +void CDRPath::appendArcTo(double rx, double ry, double rotation, bool longAngle, bool sweep, double x, double y) { - m_elements.push_back(make_unique<libcdr::CDRArcToElement>(rx, ry, rotation, longAngle, sweep, x, y)); + m_elements.push_back(make_unique<CDRArcToElement>(rx, ry, rotation, longAngle, sweep, x, y)); } -void libcdr::CDRPath::appendSplineTo(const std::vector<std::pair<double, double> > &points) +void CDRPath::appendSplineTo(const std::vector<std::pair<double, double> > &points) { - m_elements.push_back(libcdr::make_unique<libcdr::CDRSplineToElement>(points)); + m_elements.push_back(libcdr::make_unique<CDRSplineToElement>(points)); } -void libcdr::CDRPath::appendClosePath() +void CDRPath::appendClosePath() { - m_elements.push_back(make_unique<libcdr::CDRClosePathElement>()); + m_elements.push_back(make_unique<CDRClosePathElement>()); m_isClosed = true; } -libcdr::CDRPath::CDRPath(const libcdr::CDRPath &path) : m_elements(), m_isClosed(false) +CDRPath::CDRPath(const CDRPath &path) : m_elements(), m_isClosed(false) { appendPath(path); m_isClosed = path.isClosed(); } -libcdr::CDRPath &libcdr::CDRPath::operator=(const libcdr::CDRPath &path) +CDRPath &CDRPath::operator=(const CDRPath &path) { // Check for self-assignment if (this == &path) @@ -690,17 +687,17 @@ libcdr::CDRPath &libcdr::CDRPath::operator=(const libcdr::CDRPath &path) } -libcdr::CDRPath::~CDRPath() +CDRPath::~CDRPath() { } -void libcdr::CDRPath::appendPath(const CDRPath &path) +void CDRPath::appendPath(const CDRPath &path) { for (const auto &element : path.m_elements) m_elements.push_back(element->clone()); } -void libcdr::CDRPath::writeOut(librevenge::RVNGPropertyListVector &vec) const +void CDRPath::writeOut(librevenge::RVNGPropertyListVector &vec) const { bool wasZ = true; for (const auto &element : m_elements) @@ -721,7 +718,7 @@ void libcdr::CDRPath::writeOut(librevenge::RVNGPropertyListVector &vec) const } } -void libcdr::CDRPath::writeOut(librevenge::RVNGString &path, librevenge::RVNGString &viewBox, double &width) const +void CDRPath::writeOut(librevenge::RVNGString &path, librevenge::RVNGString &viewBox, double &width) const { librevenge::RVNGPropertyListVector vec; writeOut(vec); @@ -848,37 +845,39 @@ void libcdr::CDRPath::writeOut(librevenge::RVNGString &path, librevenge::RVNGStr } } -void libcdr::CDRPath::transform(const CDRTransforms &trafos) +void CDRPath::transform(const CDRTransforms &trafos) { for (auto &element : m_elements) element->transform(trafos); } -void libcdr::CDRPath::transform(const CDRTransform &trafo) +void CDRPath::transform(const CDRTransform &trafo) { for (auto &element : m_elements) element->transform(trafo); } -std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRPath::clone() +std::unique_ptr<CDRPathElement> CDRPath::clone() { return make_unique<CDRPath>(*this); } -void libcdr::CDRPath::clear() +void CDRPath::clear() { m_elements.clear(); m_isClosed = false; } -bool libcdr::CDRPath::empty() const +bool CDRPath::empty() const { return m_elements.empty(); } -bool libcdr::CDRPath::isClosed() const +bool CDRPath::isClosed() const { return m_isClosed; } +} + /* vim:set shiftwidth=2 softtabstop=2 expandtab: */ commit add9661aace5a96ca17976dad48a057ca4b548c3 Author: David Tardon <dtar...@redhat.com> Date: Sat Mar 24 17:00:18 2018 +0100 use unique_ptr Change-Id: I83187bbbbe3c0dfdf7d1c4c59ddd4d8679ae9018 diff --git a/src/lib/CDRPath.cpp b/src/lib/CDRPath.cpp index 1028b1f..7d2f7a4 100644 --- a/src/lib/CDRPath.cpp +++ b/src/lib/CDRPath.cpp @@ -13,6 +13,7 @@ #include <map> #include "CDRTransforms.h" +#include "libcdr_utils.h" #ifndef DEBUG_SPLINES #define DEBUG_SPLINES 0 @@ -231,7 +232,7 @@ public: void writeOut(librevenge::RVNGPropertyListVector &vec) const override; void transform(const CDRTransforms &trafos) override; void transform(const CDRTransform &trafo) override; - CDRPathElement *clone() override; + std::unique_ptr<CDRPathElement> clone() override; private: double m_x; double m_y; @@ -247,7 +248,7 @@ public: void writeOut(librevenge::RVNGPropertyListVector &vec) const override; void transform(const CDRTransforms &trafos) override; void transform(const CDRTransform &trafo) override; - CDRPathElement *clone() override; + std::unique_ptr<CDRPathElement> clone() override; private: double m_x; double m_y; @@ -267,7 +268,7 @@ public: void writeOut(librevenge::RVNGPropertyListVector &vec) const override; void transform(const CDRTransforms &trafos) override; void transform(const CDRTransform &trafo) override; - CDRPathElement *clone() override; + std::unique_ptr<CDRPathElement> clone() override; private: double m_x1; double m_y1; @@ -289,7 +290,7 @@ public: void writeOut(librevenge::RVNGPropertyListVector &vec) const override; void transform(const CDRTransforms &trafos) override; void transform(const CDRTransform &trafo) override; - CDRPathElement *clone() override; + std::unique_ptr<CDRPathElement> clone() override; private: double m_x1; double m_y1; @@ -306,7 +307,7 @@ public: void writeOut(librevenge::RVNGPropertyListVector &vec) const override; void transform(const CDRTransforms &trafos) override; void transform(const CDRTransform &trafo) override; - CDRPathElement *clone() override; + std::unique_ptr<CDRPathElement> clone() override; private: std::vector<std::pair<double, double> > m_points; unsigned knot(unsigned i) const; @@ -327,7 +328,7 @@ public: void writeOut(librevenge::RVNGPropertyListVector &vec) const override; void transform(const CDRTransforms &trafos) override; void transform(const CDRTransform &trafo) override; - CDRPathElement *clone() override; + std::unique_ptr<CDRPathElement> clone() override; private: double m_rx; double m_ry; @@ -346,7 +347,7 @@ public: void writeOut(librevenge::RVNGPropertyListVector &vec) const override; void transform(const CDRTransforms &trafos) override; void transform(const CDRTransform &trafo) override; - CDRPathElement *clone() override; + std::unique_ptr<CDRPathElement> clone() override; }; } // namespace libcdr @@ -371,9 +372,9 @@ void libcdr::CDRMoveToElement::transform(const CDRTransform &trafo) trafo.applyToPoint(m_x,m_y); } -libcdr::CDRPathElement *libcdr::CDRMoveToElement::clone() +std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRMoveToElement::clone() { - return new CDRMoveToElement(m_x, m_y); + return make_unique<CDRMoveToElement>(m_x, m_y); } void libcdr::CDRLineToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const @@ -395,9 +396,9 @@ void libcdr::CDRLineToElement::transform(const CDRTransform &trafo) trafo.applyToPoint(m_x,m_y); } -libcdr::CDRPathElement *libcdr::CDRLineToElement::clone() +std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRLineToElement::clone() { - return new CDRLineToElement(m_x, m_y); + return make_unique<CDRLineToElement>(m_x, m_y); } void libcdr::CDRCubicBezierToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const @@ -427,9 +428,9 @@ void libcdr::CDRCubicBezierToElement::transform(const CDRTransform &trafo) trafo.applyToPoint(m_x,m_y); } -libcdr::CDRPathElement *libcdr::CDRCubicBezierToElement::clone() +std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRCubicBezierToElement::clone() { - return new CDRCubicBezierToElement(m_x1, m_y1, m_x2, m_y2, m_x, m_y); + return make_unique<CDRCubicBezierToElement>(m_x1, m_y1, m_x2, m_y2, m_x, m_y); } void libcdr::CDRQuadraticBezierToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const @@ -455,9 +456,9 @@ void libcdr::CDRQuadraticBezierToElement::transform(const CDRTransform &trafo) trafo.applyToPoint(m_x,m_y); } -libcdr::CDRPathElement *libcdr::CDRQuadraticBezierToElement::clone() +std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRQuadraticBezierToElement::clone() { - return new CDRQuadraticBezierToElement(m_x1, m_y1, m_x, m_y); + return make_unique<CDRQuadraticBezierToElement>(m_x1, m_y1, m_x, m_y); } #define CDR_SPLINE_DEGREE 3 @@ -581,9 +582,9 @@ void libcdr::CDRSplineToElement::transform(const CDRTransform &trafo) trafo.applyToPoint(point.first, point.second); } -libcdr::CDRPathElement *libcdr::CDRSplineToElement::clone() +std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRSplineToElement::clone() { - return new CDRSplineToElement(m_points); + return libcdr::make_unique<CDRSplineToElement>(m_points); } void libcdr::CDRArcToElement::writeOut(librevenge::RVNGPropertyListVector &vec) const @@ -610,9 +611,9 @@ void libcdr::CDRArcToElement::transform(const CDRTransform &trafo) trafo.applyToArc(m_rx, m_ry, m_rotation, m_sweep, m_x, m_y); } -libcdr::CDRPathElement *libcdr::CDRArcToElement::clone() +std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRArcToElement::clone() { - return new CDRArcToElement(m_rx, m_ry, m_rotation, m_largeArc, m_sweep, m_x, m_y); + return make_unique<CDRArcToElement>(m_rx, m_ry, m_rotation, m_largeArc, m_sweep, m_x, m_y); } void libcdr::CDRClosePathElement::transform(const CDRTransforms &) @@ -623,9 +624,9 @@ void libcdr::CDRClosePathElement::transform(const CDRTransform &) { } -libcdr::CDRPathElement *libcdr::CDRClosePathElement::clone() +std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRClosePathElement::clone() { - return new CDRClosePathElement(); + return make_unique<CDRClosePathElement>(); } void libcdr::CDRClosePathElement::writeOut(librevenge::RVNGPropertyListVector &vec) const @@ -637,37 +638,37 @@ void libcdr::CDRClosePathElement::writeOut(librevenge::RVNGPropertyListVector &v void libcdr::CDRPath::appendMoveTo(double x, double y) { - m_elements.push_back(new libcdr::CDRMoveToElement(x, y)); + m_elements.push_back(make_unique<libcdr::CDRMoveToElement>(x, y)); } void libcdr::CDRPath::appendLineTo(double x, double y) { - m_elements.push_back(new libcdr::CDRLineToElement(x, y)); + m_elements.push_back(make_unique<libcdr::CDRLineToElement>(x, y)); } void libcdr::CDRPath::appendCubicBezierTo(double x1, double y1, double x2, double y2, double x, double y) { - m_elements.push_back(new libcdr::CDRCubicBezierToElement(x1, y1, x2, y2, x, y)); + m_elements.push_back(make_unique<libcdr::CDRCubicBezierToElement>(x1, y1, x2, y2, x, y)); } void libcdr::CDRPath::appendQuadraticBezierTo(double x1, double y1, double x, double y) { - m_elements.push_back(new libcdr::CDRQuadraticBezierToElement(x1, y1, x, y)); + m_elements.push_back(make_unique<libcdr::CDRQuadraticBezierToElement>(x1, y1, x, y)); } void libcdr::CDRPath::appendArcTo(double rx, double ry, double rotation, bool longAngle, bool sweep, double x, double y) { - m_elements.push_back(new libcdr::CDRArcToElement(rx, ry, rotation, longAngle, sweep, x, y)); + m_elements.push_back(make_unique<libcdr::CDRArcToElement>(rx, ry, rotation, longAngle, sweep, x, y)); } -void libcdr::CDRPath::appendSplineTo(std::vector<std::pair<double, double> > &points) +void libcdr::CDRPath::appendSplineTo(const std::vector<std::pair<double, double> > &points) { - m_elements.push_back(new libcdr::CDRSplineToElement(points)); + m_elements.push_back(libcdr::make_unique<libcdr::CDRSplineToElement>(points)); } void libcdr::CDRPath::appendClosePath() { - m_elements.push_back(new libcdr::CDRClosePathElement()); + m_elements.push_back(make_unique<libcdr::CDRClosePathElement>()); m_isClosed = true; } @@ -691,21 +692,20 @@ libcdr::CDRPath &libcdr::CDRPath::operator=(const libcdr::CDRPath &path) libcdr::CDRPath::~CDRPath() { - clear(); } void libcdr::CDRPath::appendPath(const CDRPath &path) { - for (auto element : path.m_elements) + for (const auto &element : path.m_elements) m_elements.push_back(element->clone()); } void libcdr::CDRPath::writeOut(librevenge::RVNGPropertyListVector &vec) const { bool wasZ = true; - for (auto element : m_elements) + for (const auto &element : m_elements) { - if (dynamic_cast<CDRClosePathElement *>(element)) + if (dynamic_cast<CDRClosePathElement *>(element.get())) { if (!wasZ) { @@ -860,16 +860,13 @@ void libcdr::CDRPath::transform(const CDRTransform &trafo) element->transform(trafo); } -libcdr::CDRPathElement *libcdr::CDRPath::clone() +std::unique_ptr<libcdr::CDRPathElement> libcdr::CDRPath::clone() { - return new CDRPath(*this); + return make_unique<CDRPath>(*this); } void libcdr::CDRPath::clear() { - for (auto &element : m_elements) - if (element) - delete element; m_elements.clear(); m_isClosed = false; } diff --git a/src/lib/CDRPath.h b/src/lib/CDRPath.h index 90fe0de..f336803 100644 --- a/src/lib/CDRPath.h +++ b/src/lib/CDRPath.h @@ -10,6 +10,7 @@ #ifndef __CDRPATH_H__ #define __CDRPATH_H__ +#include <memory> #include <utility> #include <vector> #include <librevenge/librevenge.h> @@ -28,7 +29,7 @@ public: virtual void writeOut(librevenge::RVNGPropertyListVector &vec) const = 0; virtual void transform(const CDRTransforms &trafos) = 0; virtual void transform(const CDRTransform &trafo) = 0; - virtual CDRPathElement *clone() = 0; + virtual std::unique_ptr<CDRPathElement> clone() = 0; }; @@ -45,7 +46,7 @@ public: void appendLineTo(double x, double y); void appendCubicBezierTo(double x1, double y1, double x2, double y2, double x, double y); void appendQuadraticBezierTo(double x1, double y1, double x, double y); - void appendSplineTo(std::vector<std::pair<double, double> > &points); + void appendSplineTo(const std::vector<std::pair<double, double> > &points); void appendArcTo(double rx, double ry, double rotation, bool longAngle, bool sweep, double x, double y); void appendClosePath(); void appendPath(const CDRPath &path); @@ -54,14 +55,14 @@ public: void writeOut(librevenge::RVNGString &path, librevenge::RVNGString &viewBox, double &width) const; void transform(const CDRTransforms &trafos) override; void transform(const CDRTransform &trafo) override; - CDRPathElement *clone() override; + std::unique_ptr<CDRPathElement> clone() override; void clear(); bool empty() const; bool isClosed() const; private: - std::vector<CDRPathElement *> m_elements; + std::vector<std::unique_ptr<CDRPathElement>> m_elements; bool m_isClosed; }; diff --git a/src/lib/libcdr_utils.h b/src/lib/libcdr_utils.h index a475112..a4472fc 100644 --- a/src/lib/libcdr_utils.h +++ b/src/lib/libcdr_utils.h @@ -15,6 +15,7 @@ #endif #include <math.h> +#include <memory> #include <vector> #include <boost/cstdint.hpp> @@ -64,6 +65,12 @@ struct CDRDummyDeleter void operator()(void *) const {} }; +template<typename T, typename... Args> +std::unique_ptr<T> make_unique(Args &&... args) +{ + return std::unique_ptr<T>(new T(std::forward<Args>(args)...)); +} + uint8_t readU8(librevenge::RVNGInputStream *input, bool bigEndian=false); uint16_t readU16(librevenge::RVNGInputStream *input, bool bigEndian=false); uint32_t readU32(librevenge::RVNGInputStream *input, bool bigEndian=false); commit f2de6ec61fac666f2093fd25533df26cd610bde7 Author: David Tardon <dtar...@redhat.com> Date: Sat Mar 24 16:49:47 2018 +0100 reduce the amount of copypasta Change-Id: I03f35156e7aa006d515e866009b03ce825c19dab diff --git a/src/lib/CDRPath.cpp b/src/lib/CDRPath.cpp index e31581e..1028b1f 100644 --- a/src/lib/CDRPath.cpp +++ b/src/lib/CDRPath.cpp @@ -673,8 +673,7 @@ void libcdr::CDRPath::appendClosePath() libcdr::CDRPath::CDRPath(const libcdr::CDRPath &path) : m_elements(), m_isClosed(false) { - for (auto element : path.m_elements) - m_elements.push_back(element->clone()); + appendPath(path); m_isClosed = path.isClosed(); } @@ -684,8 +683,7 @@ libcdr::CDRPath &libcdr::CDRPath::operator=(const libcdr::CDRPath &path) if (this == &path) return *this; clear(); - for (auto element : path.m_elements) - m_elements.push_back(element->clone()); + appendPath(path); m_isClosed = path.isClosed(); return *this; } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits