src/lib/VDXParser.cpp           |   39 ++++++++++++++++++++-------------------
 src/lib/VSD5Parser.cpp          |    7 ++++---
 src/lib/VSD6Parser.cpp          |    5 +++--
 src/lib/VSDCharacterList.cpp    |    3 ++-
 src/lib/VSDContentCollector.cpp |    3 ++-
 src/lib/VSDFieldList.cpp        |    3 ++-
 src/lib/VSDGeometryList.cpp     |    3 ++-
 src/lib/VSDInternalStream.cpp   |    2 +-
 src/lib/VSDMetaData.cpp         |    1 +
 src/lib/VSDPages.cpp            |    1 +
 src/lib/VSDParagraphList.cpp    |   33 ++++++++++-----------------------
 src/lib/VSDParagraphList.h      |    3 ++-
 src/lib/VSDParser.cpp           |   23 +++++++++++------------
 src/lib/VSDShapeList.cpp        |    2 +-
 src/lib/VSDStencils.cpp         |   25 +++++++------------------
 src/lib/VSDStencils.h           |    7 ++++---
 src/lib/VSDStyles.cpp           |    3 ++-
 src/lib/VSDStylesCollector.cpp  |    3 ++-
 src/lib/VSDXMLHelper.cpp        |    5 +----
 src/lib/VSDXMLParserBase.cpp    |    9 +++++----
 src/lib/VSDXMLTokenMap.cpp      |    1 +
 src/lib/VSDXMetaData.cpp        |    1 +
 src/lib/VSDXParser.cpp          |   39 ++++++++++++++++++++-------------------
 src/lib/VisioDocument.cpp       |    3 ++-
 src/lib/libvisio_utils.cpp      |    6 ++----
 src/lib/libvisio_xml.cpp        |    3 +++
 26 files changed, 112 insertions(+), 121 deletions(-)

New commits:
commit c1bb49486e73e9e19944be6a995e3bbd96210f8f
Author: David Tardon <dtar...@redhat.com>
Date:   Sun Mar 25 16:49:53 2018 +0200

    move define where it should be
    
    Change-Id: Ie8080354158b01bd29c14105dce3919eb19a01e6

diff --git a/src/lib/VSDXMLHelper.cpp b/src/lib/VSDXMLHelper.cpp
index c0e1cf5..6f483b8 100644
--- a/src/lib/VSDXMLHelper.cpp
+++ b/src/lib/VSDXMLHelper.cpp
@@ -7,10 +7,6 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
-#define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE 1
-#endif
-
 #include "VSDXMLHelper.h"
 
 #include <memory>
diff --git a/src/lib/libvisio_xml.cpp b/src/lib/libvisio_xml.cpp
index fb18627..df0c5f9 100644
--- a/src/lib/libvisio_xml.cpp
+++ b/src/lib/libvisio_xml.cpp
@@ -9,6 +9,9 @@
 
 #include "libvisio_xml.h"
 
+#ifndef BOOST_LEXICAL_CAST_ASSUME_C_LOCALE
+#define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE 1
+#endif
 #include <boost/lexical_cast.hpp>
 
 #include "VSDTypes.h"
commit 5fa2b1a754a026f7c36f339b396574c1c43700c8
Author: David Tardon <dtar...@redhat.com>
Date:   Sun Mar 25 16:48:12 2018 +0200

    make sure headers are self-contained
    
    Change-Id: I77beb4ce00ec070f2599362f6462d967613abd2b

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index 0e5cc1b..c305ab8 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -7,12 +7,13 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VDXParser.h"
+
 #include <memory>
 #include <string.h>
 #include <libxml/xmlIO.h>
 #include <libxml/xmlstring.h>
 #include <librevenge-stream/librevenge-stream.h>
-#include "VDXParser.h"
 #include "libvisio_utils.h"
 #include "libvisio_xml.h"
 #include "VSDContentCollector.h"
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index fe841cc..cfc0d94 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -7,13 +7,14 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSD5Parser.h"
+
 #include <librevenge-stream/librevenge-stream.h>
 #include <locale.h>
 #include <sstream>
 #include <string>
 #include <stack>
 #include "libvisio_utils.h"
-#include "VSD5Parser.h"
 #include "VSDInternalStream.h"
 #include "VSDDocumentStructure.h"
 #include "VSDContentCollector.h"
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index ea3be55..a41016b 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -7,12 +7,13 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSD6Parser.h"
+
 #include <librevenge-stream/librevenge-stream.h>
 #include <locale.h>
 #include <sstream>
 #include <string>
 #include "libvisio_utils.h"
-#include "VSD6Parser.h"
 #include "VSDInternalStream.h"
 #include "VSDDocumentStructure.h"
 #include "VSDContentCollector.h"
diff --git a/src/lib/VSDCharacterList.cpp b/src/lib/VSDCharacterList.cpp
index 6f9fe8e..17935fc 100644
--- a/src/lib/VSDCharacterList.cpp
+++ b/src/lib/VSDCharacterList.cpp
@@ -7,9 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include "VSDCollector.h"
 #include "VSDCharacterList.h"
 
+#include "VSDCollector.h"
+
 namespace libvisio
 {
 
diff --git a/src/lib/VSDContentCollector.cpp b/src/lib/VSDContentCollector.cpp
index cde0ad0..8b297da 100644
--- a/src/lib/VSDContentCollector.cpp
+++ b/src/lib/VSDContentCollector.cpp
@@ -7,6 +7,8 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSDContentCollector.h"
+
 #include <algorithm>
 #include <cassert>
 #include <string.h> // for memcpy
@@ -17,7 +19,6 @@
 #include <unicode/ucnv.h>
 #include <unicode/utf8.h>
 
-#include "VSDContentCollector.h"
 #include "VSDParser.h"
 #include "VSDInternalStream.h"
 
diff --git a/src/lib/VSDFieldList.cpp b/src/lib/VSDFieldList.cpp
index 363d20e..c4c16ef 100644
--- a/src/lib/VSDFieldList.cpp
+++ b/src/lib/VSDFieldList.cpp
@@ -7,9 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSDFieldList.h"
+
 #include <time.h>
 #include "VSDCollector.h"
-#include "VSDFieldList.h"
 #include "libvisio_utils.h"
 
 void libvisio::VSDTextField::handle(VSDCollector *collector) const
diff --git a/src/lib/VSDGeometryList.cpp b/src/lib/VSDGeometryList.cpp
index 92746d8..a195136 100644
--- a/src/lib/VSDGeometryList.cpp
+++ b/src/lib/VSDGeometryList.cpp
@@ -7,8 +7,9 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include "VSDCollector.h"
 #include "VSDGeometryList.h"
+
+#include "VSDCollector.h"
 #include "libvisio_utils.h"
 
 namespace libvisio
diff --git a/src/lib/VSDInternalStream.cpp b/src/lib/VSDInternalStream.cpp
index 9d66015..bc3548a 100644
--- a/src/lib/VSDInternalStream.cpp
+++ b/src/lib/VSDInternalStream.cpp
@@ -7,9 +7,9 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include <string.h>
 #include "VSDInternalStream.h"
 
+#include <string.h>
 
 VSDInternalStream::VSDInternalStream(librevenge::RVNGInputStream *input, 
unsigned long size, bool compressed) :
   librevenge::RVNGInputStream(),
diff --git a/src/lib/VSDMetaData.cpp b/src/lib/VSDMetaData.cpp
index c200b5f..09e8f97 100644
--- a/src/lib/VSDMetaData.cpp
+++ b/src/lib/VSDMetaData.cpp
@@ -8,6 +8,7 @@
  */
 
 #include "VSDMetaData.h"
+
 #include <cassert>
 #include <cmath>
 #include <cstdio>
diff --git a/src/lib/VSDPages.cpp b/src/lib/VSDPages.cpp
index 335dd69..1236435 100644
--- a/src/lib/VSDPages.cpp
+++ b/src/lib/VSDPages.cpp
@@ -8,6 +8,7 @@
  */
 
 #include "VSDPages.h"
+
 #include "libvisio_utils.h"
 
 libvisio::VSDPage::VSDPage()
diff --git a/src/lib/VSDParagraphList.cpp b/src/lib/VSDParagraphList.cpp
index f77b500..33f75fa 100644
--- a/src/lib/VSDParagraphList.cpp
+++ b/src/lib/VSDParagraphList.cpp
@@ -7,9 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include "VSDCollector.h"
 #include "VSDParagraphList.h"
 
+#include "VSDCollector.h"
+
 namespace libvisio
 {
 
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 673cc93..c967165 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -7,6 +7,8 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSDParser.h"
+
 #include <librevenge-stream/librevenge-stream.h>
 #include <locale.h>
 #include <cassert>
@@ -15,7 +17,6 @@
 #include <cmath>
 #include <set>
 #include "libvisio_utils.h"
-#include "VSDParser.h"
 #include "VSDInternalStream.h"
 #include "VSDDocumentStructure.h"
 #include "VSDContentCollector.h"
diff --git a/src/lib/VSDShapeList.cpp b/src/lib/VSDShapeList.cpp
index de15718..bfa29d1 100644
--- a/src/lib/VSDShapeList.cpp
+++ b/src/lib/VSDShapeList.cpp
@@ -7,9 +7,9 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include "VSDCollector.h"
 #include "VSDShapeList.h"
 
+#include "VSDCollector.h"
 
 libvisio::VSDShapeList::VSDShapeList() :
   m_elements(),
diff --git a/src/lib/VSDStencils.cpp b/src/lib/VSDStencils.cpp
index 192114c..7037f2f 100644
--- a/src/lib/VSDStencils.cpp
+++ b/src/lib/VSDStencils.cpp
@@ -8,6 +8,7 @@
  */
 
 #include "VSDStencils.h"
+
 #include "libvisio_utils.h"
 
 libvisio::VSDShape::VSDShape()
diff --git a/src/lib/VSDStyles.cpp b/src/lib/VSDStyles.cpp
index cc87a68..9a3d400 100644
--- a/src/lib/VSDStyles.cpp
+++ b/src/lib/VSDStyles.cpp
@@ -7,9 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSDStyles.h"
+
 #include <set>
 #include <stack>
-#include "VSDStyles.h"
 #include "VSDTypes.h"
 
 namespace libvisio
diff --git a/src/lib/VSDStylesCollector.cpp b/src/lib/VSDStylesCollector.cpp
index 527bc33..cc8021f 100644
--- a/src/lib/VSDStylesCollector.cpp
+++ b/src/lib/VSDStylesCollector.cpp
@@ -7,9 +7,10 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSDStylesCollector.h"
+
 #include <vector>
 #include <map>
-#include "VSDStylesCollector.h"
 
 libvisio::VSDStylesCollector::VSDStylesCollector(
   std::vector<std::map<unsigned, XForm> > &groupXFormsSequence,
diff --git a/src/lib/VSDXMLHelper.cpp b/src/lib/VSDXMLHelper.cpp
index 80f62a5..c0e1cf5 100644
--- a/src/lib/VSDXMLHelper.cpp
+++ b/src/lib/VSDXMLHelper.cpp
@@ -11,13 +11,14 @@
 #define BOOST_LEXICAL_CAST_ASSUME_C_LOCALE 1
 #endif
 
+#include "VSDXMLHelper.h"
+
 #include <memory>
 #include <sstream>
 #include <istream>
 #include <vector>
 #include <boost/algorithm/string.hpp>
 #include <librevenge-stream/librevenge-stream.h>
-#include "VSDXMLHelper.h"
 #include "libvisio_utils.h"
 #include "libvisio_xml.h"
 
diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index c78b872..edbaac4 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -7,6 +7,8 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSDXMLParserBase.h"
+
 #include <string.h>
 #include <libxml/xmlIO.h>
 #include <libxml/xmlstring.h>
@@ -15,7 +17,6 @@
 #include <boost/phoenix.hpp>
 #include <boost/spirit/include/qi.hpp>
 
-#include "VSDXMLParserBase.h"
 #include "libvisio_utils.h"
 #include "libvisio_xml.h"
 #include "VSDContentCollector.h"
diff --git a/src/lib/VSDXMLTokenMap.cpp b/src/lib/VSDXMLTokenMap.cpp
index b9a5829..97b01f2 100644
--- a/src/lib/VSDXMLTokenMap.cpp
+++ b/src/lib/VSDXMLTokenMap.cpp
@@ -8,6 +8,7 @@
  */
 
 #include "VSDXMLTokenMap.h"
+
 #include <string.h>
 
 namespace
diff --git a/src/lib/VSDXMetaData.cpp b/src/lib/VSDXMetaData.cpp
index c0e5708..9b3d3cf 100644
--- a/src/lib/VSDXMetaData.cpp
+++ b/src/lib/VSDXMetaData.cpp
@@ -8,6 +8,7 @@
  */
 
 #include "VSDXMetaData.h"
+
 #include "VSDXMLTokenMap.h"
 #include "libvisio_utils.h"
 #include "libvisio_xml.h"
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index 153e464..1bb46cf 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -7,12 +7,13 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "VSDXParser.h"
+
 #include <memory>
 #include <string.h>
 #include <libxml/xmlIO.h>
 #include <libxml/xmlstring.h>
 #include <librevenge-stream/librevenge-stream.h>
-#include "VSDXParser.h"
 #include "libvisio_utils.h"
 #include "libvisio_xml.h"
 #include "VSDContentCollector.h"
diff --git a/src/lib/VisioDocument.cpp b/src/lib/VisioDocument.cpp
index bc2b477..accb5d1 100644
--- a/src/lib/VisioDocument.cpp
+++ b/src/lib/VisioDocument.cpp
@@ -7,12 +7,13 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include <libvisio/libvisio.h>
+
 #include <algorithm>
 #include <memory>
 #include <string>
 
 #include <librevenge/librevenge.h>
-#include <libvisio/libvisio.h>
 #include "libvisio_utils.h"
 #include "libvisio_xml.h"
 #include "VDXParser.h"
diff --git a/src/lib/libvisio_utils.cpp b/src/lib/libvisio_utils.cpp
index 8ab2aab..457b06d 100644
--- a/src/lib/libvisio_utils.cpp
+++ b/src/lib/libvisio_utils.cpp
@@ -7,10 +7,11 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
+#include "libvisio_utils.h"
+
 #include <cstdarg>
 #include <cstdio>
 #include "VSDInternalStream.h"
-#include "libvisio_utils.h"
 
 uint8_t libvisio::readU8(librevenge::RVNGInputStream *input)
 {
commit b52f763a0026d8c3eb2aa4b2ec3fa8a5abedbe9d
Author: David Tardon <dtar...@redhat.com>
Date:   Sun Mar 25 16:44:55 2018 +0200

    drop unused headers
    
    Change-Id: I697c5ee7e9ed2c694452e00ca2ed77c92c7650a3

diff --git a/src/lib/libvisio_utils.cpp b/src/lib/libvisio_utils.cpp
index 63ab796..8ab2aab 100644
--- a/src/lib/libvisio_utils.cpp
+++ b/src/lib/libvisio_utils.cpp
@@ -7,9 +7,6 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  */
 
-#include <vector>
-#include <string>
-#include <algorithm> // std::count
 #include <cstdarg>
 #include <cstdio>
 #include "VSDInternalStream.h"
commit 26ea6f33a413861a4764bbfae6f244ec38f7bad8
Author: David Tardon <dtar...@redhat.com>
Date:   Sun Mar 25 16:42:46 2018 +0200

    use unique_ptr for text xform
    
    Change-Id: I2dacd0bfe4024055e9233730ff6485c8631f6a48

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index a81e5bc..0e5cc1b 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -613,7 +613,7 @@ void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->pinX, reader);
       }
       break;
@@ -621,7 +621,7 @@ void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->pinY, reader);
       }
       break;
@@ -629,7 +629,7 @@ void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->width, reader);
       }
       break;
@@ -637,7 +637,7 @@ void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->height, reader);
       }
       break;
@@ -645,7 +645,7 @@ void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->pinLocX, reader);
       }
       break;
@@ -653,7 +653,7 @@ void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->pinLocY, reader);
       }
       break;
@@ -661,7 +661,7 @@ void libvisio::VDXParser::readTxtXForm(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->angle, reader);
       }
       break;
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index fabb9a3..673cc93 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -1167,9 +1167,7 @@ void 
libvisio::VSDParser::readXForm1D(librevenge::RVNGInputStream *input)
 
 void libvisio::VSDParser::readTxtXForm(librevenge::RVNGInputStream *input)
 {
-  if (m_shape.m_txtxform)
-    delete m_shape.m_txtxform;
-  m_shape.m_txtxform = new XForm();
+  m_shape.m_txtxform = make_unique<XForm>();
   input->seek(1, librevenge::RVNG_SEEK_CUR);
   m_shape.m_txtxform->pinX = readDouble(input);
   input->seek(1, librevenge::RVNG_SEEK_CUR);
@@ -1317,7 +1315,7 @@ void 
libvisio::VSDParser::readShape(librevenge::RVNGInputStream *input)
       m_shape.m_foreign = make_unique<ForeignData>(*(tmpShape->m_foreign));
     m_shape.m_xform = tmpShape->m_xform;
     if (tmpShape->m_txtxform)
-      m_shape.m_txtxform = new XForm(*(tmpShape->m_txtxform));
+      m_shape.m_txtxform = make_unique<XForm>(*(tmpShape->m_txtxform));
     m_shape.m_tabSets = tmpShape->m_tabSets;
     m_shape.m_text = tmpShape->m_text;
     m_shape.m_textFormat = tmpShape->m_textFormat;
diff --git a/src/lib/VSDStencils.cpp b/src/lib/VSDStencils.cpp
index ba7f9be..192114c 100644
--- a/src/lib/VSDStencils.cpp
+++ b/src/lib/VSDStencils.cpp
@@ -15,7 +15,7 @@ libvisio::VSDShape::VSDShape()
     m_masterShape(MINUS_ONE), m_shapeId(MINUS_ONE), m_lineStyleId(MINUS_ONE), 
m_fillStyleId(MINUS_ONE),
     m_textStyleId(MINUS_ONE), m_lineStyle(), m_fillStyle(), 
m_textBlockStyle(), m_charStyle(),
     m_charList(), m_paraStyle(), m_paraList(), m_tabSets(), m_text(), 
m_names(),
-    m_textFormat(libvisio::VSD_TEXT_UTF16), m_nurbsData(), m_polylineData(), 
m_xform(), m_txtxform(nullptr),
+    m_textFormat(libvisio::VSD_TEXT_UTF16), m_nurbsData(), m_polylineData(), 
m_xform(), m_txtxform(),
     m_xform1d(), m_misc(), m_layerMem()
 {
 }
@@ -69,9 +69,7 @@ libvisio::VSDShape &libvisio::VSDShape::operator=(const 
libvisio::VSDShape &shap
     m_nurbsData = shape.m_nurbsData;
     m_polylineData = shape.m_polylineData;
     m_xform = shape.m_xform;
-    if (m_txtxform)
-      delete m_txtxform;
-    m_txtxform = shape.m_txtxform ? new XForm(*(shape.m_txtxform)) : nullptr;
+    m_txtxform.reset(shape.m_txtxform ? new XForm(*(shape.m_txtxform)) : 
nullptr);
     m_xform1d.reset(shape.m_xform1d ? new XForm1D(*shape.m_xform1d) : nullptr);
     m_misc = shape.m_misc;
     m_layerMem = shape.m_layerMem;
@@ -82,8 +80,6 @@ libvisio::VSDShape &libvisio::VSDShape::operator=(const 
libvisio::VSDShape &shap
 void libvisio::VSDShape::clear()
 {
   m_foreign = nullptr;
-  if (m_txtxform)
-    delete m_txtxform;
   m_txtxform = nullptr;
   m_xform1d = nullptr;
 
diff --git a/src/lib/VSDStencils.h b/src/lib/VSDStencils.h
index 7be7063..01d2f4f 100644
--- a/src/lib/VSDStencils.h
+++ b/src/lib/VSDStencils.h
@@ -53,7 +53,7 @@ public:
   std::map<unsigned, NURBSData> m_nurbsData;
   std::map<unsigned, PolylineData> m_polylineData;
   XForm m_xform;
-  XForm *m_txtxform;
+  std::unique_ptr<XForm> m_txtxform;
   std::unique_ptr<XForm1D> m_xform1d;
   VSDMisc m_misc;
   VSDName m_layerMem;
diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index 48d2741..c78b872 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -969,7 +969,7 @@ void libvisio::VSDXMLParserBase::readShape(xmlTextReaderPtr 
reader)
         m_shape.m_foreign = make_unique<ForeignData>(*(tmpShape->m_foreign));
       m_shape.m_xform = tmpShape->m_xform;
       if (tmpShape->m_txtxform)
-        m_shape.m_txtxform = new XForm(*(tmpShape->m_txtxform));
+        m_shape.m_txtxform = make_unique<XForm>(*(tmpShape->m_txtxform));
       m_shape.m_geometries = tmpShape->m_geometries;
       m_shape.m_charList = tmpShape->m_charList;
       m_shape.m_paraList = tmpShape->m_paraList;
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index e2c8087..153e464 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -994,7 +994,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->pinX, reader);
       }
       break;
@@ -1002,7 +1002,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->pinY, reader);
       }
       break;
@@ -1010,7 +1010,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->width, reader);
       }
       break;
@@ -1018,7 +1018,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->height, reader);
       }
       break;
@@ -1026,7 +1026,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->pinLocX, reader);
       }
       break;
@@ -1034,7 +1034,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->pinLocY, reader);
       }
       break;
@@ -1042,7 +1042,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_txtxform)
-          m_shape.m_txtxform = new XForm();
+          m_shape.m_txtxform = make_unique<XForm>();
         ret = readDoubleData(m_shape.m_txtxform->angle, reader);
       }
       break;
commit 8a3b290280fe07a990d7a84b21a0cdc5f28d1c2f
Author: David Tardon <dtar...@redhat.com>
Date:   Sun Mar 25 16:39:03 2018 +0200

    use unique_ptr to hold foreign data
    
    Change-Id: I605e3fc76a7f909566450ccff33649745f16f200

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index 72f78b9..a81e5bc 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -940,7 +940,7 @@ void libvisio::VDXParser::getBinaryData(xmlTextReaderPtr 
reader)
     if (data)
     {
       if (!m_shape.m_foreign)
-        m_shape.m_foreign = new ForeignData();
+        m_shape.m_foreign = make_unique<ForeignData>();
       m_shape.m_foreign->data.clear();
       m_shape.m_foreign->data.appendBase64Data(librevenge::RVNGString((const 
char *)data));
     }
@@ -967,7 +967,7 @@ void libvisio::VDXParser::readForeignInfo(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_foreign)
-          m_shape.m_foreign = new ForeignData();
+          m_shape.m_foreign = make_unique<ForeignData>();
         ret = readDoubleData(m_shape.m_foreign->offsetX, reader);
       }
       break;
@@ -975,7 +975,7 @@ void libvisio::VDXParser::readForeignInfo(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_foreign)
-          m_shape.m_foreign = new ForeignData();
+          m_shape.m_foreign = make_unique<ForeignData>();
         ret = readDoubleData(m_shape.m_foreign->offsetY, reader);
       }
       break;
@@ -983,7 +983,7 @@ void libvisio::VDXParser::readForeignInfo(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_foreign)
-          m_shape.m_foreign = new ForeignData();
+          m_shape.m_foreign = make_unique<ForeignData>();
         ret = readDoubleData(m_shape.m_foreign->width, reader);
       }
       break;
@@ -991,7 +991,7 @@ void libvisio::VDXParser::readForeignInfo(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_foreign)
-          m_shape.m_foreign = new ForeignData();
+          m_shape.m_foreign = make_unique<ForeignData>();
         ret = readDoubleData(m_shape.m_foreign->height, reader);
       }
       break;
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 50b3324..fe841cc 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -406,7 +406,7 @@ void 
libvisio::VSD5Parser::readShape(librevenge::RVNGInputStream *input)
   if (tmpShape)
   {
     if (tmpShape->m_foreign)
-      m_shape.m_foreign = new ForeignData(*(tmpShape->m_foreign));
+      m_shape.m_foreign = make_unique<ForeignData>(*(tmpShape->m_foreign));
     m_shape.m_text = tmpShape->m_text;
     m_shape.m_textFormat = tmpShape->m_textFormat;
   }
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 61e5f38..fabb9a3 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -343,7 +343,7 @@ void libvisio::VSDParser::handleStream(const Pointer &ptr, 
unsigned idx, unsigne
     break;
   case VSD_OLE_LIST:
     if (!m_shape.m_foreign)
-      m_shape.m_foreign = new ForeignData();
+      m_shape.m_foreign = make_unique<ForeignData>();
     m_shape.m_foreign->dataId = idx;
     break;
   default:
@@ -770,7 +770,7 @@ void 
libvisio::VSDParser::readForeignData(librevenge::RVNGInputStream *input)
   librevenge::RVNGBinaryData binaryData(buffer, tmpBytesRead);
 
   if (!m_shape.m_foreign)
-    m_shape.m_foreign = new ForeignData();
+    m_shape.m_foreign = make_unique<ForeignData>();
   m_shape.m_foreign->dataId = m_header.id;
   m_shape.m_foreign->data = binaryData;
 }
@@ -788,7 +788,7 @@ void 
libvisio::VSDParser::readOLEData(librevenge::RVNGInputStream *input)
   librevenge::RVNGBinaryData oleData(buffer, tmpBytesRead);
 
   if (!m_shape.m_foreign)
-    m_shape.m_foreign = new ForeignData();
+    m_shape.m_foreign = make_unique<ForeignData>();
   // Append data instead of setting it - allows multi-stream OLE objects
   m_shape.m_foreign->data.append(oleData);
 
@@ -1236,7 +1236,7 @@ void 
libvisio::VSDParser::readForeignDataType(librevenge::RVNGInputStream *input
   unsigned foreignFormat = readU32(input);
 
   if (!m_shape.m_foreign)
-    m_shape.m_foreign = new ForeignData();
+    m_shape.m_foreign = make_unique<ForeignData>();
   m_shape.m_foreign->typeId = m_header.id;
   m_shape.m_foreign->type = foreignType;
   m_shape.m_foreign->format = foreignFormat;
@@ -1314,7 +1314,7 @@ void 
libvisio::VSDParser::readShape(librevenge::RVNGInputStream *input)
   if (tmpShape)
   {
     if (tmpShape->m_foreign)
-      m_shape.m_foreign = new ForeignData(*(tmpShape->m_foreign));
+      m_shape.m_foreign = make_unique<ForeignData>(*(tmpShape->m_foreign));
     m_shape.m_xform = tmpShape->m_xform;
     if (tmpShape->m_txtxform)
       m_shape.m_txtxform = new XForm(*(tmpShape->m_txtxform));
diff --git a/src/lib/VSDStencils.cpp b/src/lib/VSDStencils.cpp
index 2243c53..ba7f9be 100644
--- a/src/lib/VSDStencils.cpp
+++ b/src/lib/VSDStencils.cpp
@@ -11,7 +11,7 @@
 #include "libvisio_utils.h"
 
 libvisio::VSDShape::VSDShape()
-  : m_geometries(), m_shapeList(), m_fields(), m_foreign(nullptr), 
m_parent(0), m_masterPage(MINUS_ONE),
+  : m_geometries(), m_shapeList(), m_fields(), m_foreign(), m_parent(0), 
m_masterPage(MINUS_ONE),
     m_masterShape(MINUS_ONE), m_shapeId(MINUS_ONE), m_lineStyleId(MINUS_ONE), 
m_fillStyleId(MINUS_ONE),
     m_textStyleId(MINUS_ONE), m_lineStyle(), m_fillStyle(), 
m_textBlockStyle(), m_charStyle(),
     m_charList(), m_paraStyle(), m_paraList(), m_tabSets(), m_text(), 
m_names(),
@@ -47,9 +47,7 @@ libvisio::VSDShape &libvisio::VSDShape::operator=(const 
libvisio::VSDShape &shap
     m_geometries = shape.m_geometries;
     m_shapeList = shape.m_shapeList;
     m_fields = shape.m_fields;
-    if (m_foreign)
-      delete m_foreign;
-    m_foreign = shape.m_foreign ? new ForeignData(*(shape.m_foreign)) : 
nullptr;
+    m_foreign.reset(shape.m_foreign ? new ForeignData(*(shape.m_foreign)) : 
nullptr);
     m_parent = shape.m_parent;
     m_masterPage = shape.m_masterPage;
     m_masterShape = shape.m_masterShape;
@@ -83,8 +81,6 @@ libvisio::VSDShape &libvisio::VSDShape::operator=(const 
libvisio::VSDShape &shap
 
 void libvisio::VSDShape::clear()
 {
-  if (m_foreign)
-    delete m_foreign;
   m_foreign = nullptr;
   if (m_txtxform)
     delete m_txtxform;
diff --git a/src/lib/VSDStencils.h b/src/lib/VSDStencils.h
index 5beedf9..7be7063 100644
--- a/src/lib/VSDStencils.h
+++ b/src/lib/VSDStencils.h
@@ -36,7 +36,7 @@ public:
   std::map<unsigned, VSDGeometryList> m_geometries;
   VSDShapeList m_shapeList;
   VSDFieldList m_fields;
-  ForeignData *m_foreign;
+  std::unique_ptr<ForeignData> m_foreign;
   unsigned m_parent, m_masterPage, m_masterShape, m_shapeId;
   unsigned m_lineStyleId, m_fillStyleId, m_textStyleId;
   VSDOptionalLineStyle m_lineStyle;
diff --git a/src/lib/VSDXMLParserBase.cpp b/src/lib/VSDXMLParserBase.cpp
index e1d9d0d..48d2741 100644
--- a/src/lib/VSDXMLParserBase.cpp
+++ b/src/lib/VSDXMLParserBase.cpp
@@ -966,7 +966,7 @@ void libvisio::VSDXMLParserBase::readShape(xmlTextReaderPtr 
reader)
     if (tmpShape)
     {
       if (tmpShape->m_foreign)
-        m_shape.m_foreign = new ForeignData(*(tmpShape->m_foreign));
+        m_shape.m_foreign = make_unique<ForeignData>(*(tmpShape->m_foreign));
       m_shape.m_xform = tmpShape->m_xform;
       if (tmpShape->m_txtxform)
         m_shape.m_txtxform = new XForm(*(tmpShape->m_txtxform));
@@ -1707,7 +1707,7 @@ void 
libvisio::VSDXMLParserBase::readForeignData(xmlTextReaderPtr reader)
 {
   VSD_DEBUG_MSG(("VSDXMLParser::readForeignData\n"));
   if (!m_shape.m_foreign)
-    m_shape.m_foreign = new ForeignData();
+    m_shape.m_foreign = make_unique<ForeignData>();
 
   const shared_ptr<xmlChar> 
foreignTypeString(xmlTextReaderGetAttribute(reader, BAD_CAST("ForeignType")), 
xmlFree);
   if (foreignTypeString)
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index e6385d8..e2c8087 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -1098,7 +1098,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_foreign)
-          m_shape.m_foreign = new ForeignData();
+          m_shape.m_foreign = make_unique<ForeignData>();
         ret = readDoubleData(m_shape.m_foreign->offsetX, reader);
       }
       break;
@@ -1106,7 +1106,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_foreign)
-          m_shape.m_foreign = new ForeignData();
+          m_shape.m_foreign = make_unique<ForeignData>();
         ret = readDoubleData(m_shape.m_foreign->offsetY, reader);
       }
       break;
@@ -1114,7 +1114,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_foreign)
-          m_shape.m_foreign = new ForeignData();
+          m_shape.m_foreign = make_unique<ForeignData>();
         ret = readDoubleData(m_shape.m_foreign->width, reader);
       }
       break;
@@ -1122,7 +1122,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_foreign)
-          m_shape.m_foreign = new ForeignData();
+          m_shape.m_foreign = make_unique<ForeignData>();
         ret = readDoubleData(m_shape.m_foreign->height, reader);
       }
       break;
@@ -1469,7 +1469,7 @@ void libvisio::VSDXParser::getBinaryData(xmlTextReaderPtr 
reader)
     }
   }
   if (!m_shape.m_foreign)
-    m_shape.m_foreign = new ForeignData();
+    m_shape.m_foreign = make_unique<ForeignData>();
   m_shape.m_foreign->data = m_currentBinaryData;
 }
 
commit 160825ec6e25b3de6086479f856d14a6dcaaa60a
Author: David Tardon <dtar...@redhat.com>
Date:   Sun Mar 25 16:30:08 2018 +0200

    use unique_ptr
    
    Change-Id: I2677dfde71b049c287df2ea68d656b0ad63dc8df

diff --git a/src/lib/VDXParser.cpp b/src/lib/VDXParser.cpp
index bb7b9d3..72f78b9 100644
--- a/src/lib/VDXParser.cpp
+++ b/src/lib/VDXParser.cpp
@@ -488,7 +488,7 @@ void libvisio::VDXParser::readMisc(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         readTriggerId(m_shape.m_xform1d->beginId, reader);
       }
       break;
@@ -496,7 +496,7 @@ void libvisio::VDXParser::readMisc(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         readTriggerId(m_shape.m_xform1d->endId, reader);
       }
       break;
@@ -692,7 +692,7 @@ void libvisio::VDXParser::readXForm1D(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         ret = readDoubleData(m_shape.m_xform1d->beginX, reader);
       }
       break;
@@ -700,7 +700,7 @@ void libvisio::VDXParser::readXForm1D(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         ret = readDoubleData(m_shape.m_xform1d->beginY, reader);
       }
       break;
@@ -708,7 +708,7 @@ void libvisio::VDXParser::readXForm1D(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         ret = readDoubleData(m_shape.m_xform1d->endX, reader);
       }
       break;
@@ -716,7 +716,7 @@ void libvisio::VDXParser::readXForm1D(xmlTextReaderPtr 
reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         ret = readDoubleData(m_shape.m_xform1d->endY, reader);
       }
       break;
diff --git a/src/lib/VSD5Parser.cpp b/src/lib/VSD5Parser.cpp
index 4caa901..50b3324 100644
--- a/src/lib/VSD5Parser.cpp
+++ b/src/lib/VSD5Parser.cpp
@@ -497,7 +497,7 @@ void 
libvisio::VSD5Parser::readMisc(librevenge::RVNGInputStream *input)
 void libvisio::VSD5Parser::readXForm1D(librevenge::RVNGInputStream *input)
 {
   if (!m_shape.m_xform1d)
-    m_shape.m_xform1d = new XForm1D();
+    m_shape.m_xform1d = make_unique<XForm1D>();
   input->seek(1, librevenge::RVNG_SEEK_CUR);
   m_shape.m_xform1d->beginX = readDouble(input);
   input->seek(1, librevenge::RVNG_SEEK_CUR);
diff --git a/src/lib/VSD6Parser.cpp b/src/lib/VSD6Parser.cpp
index 745de2f..ea3be55 100644
--- a/src/lib/VSD6Parser.cpp
+++ b/src/lib/VSD6Parser.cpp
@@ -430,7 +430,7 @@ void 
libvisio::VSD6Parser::readMisc(librevenge::RVNGInputStream *input)
             if (0x40000073 == readU32(input))
             {
               if (!m_shape.m_xform1d)
-                m_shape.m_xform1d = new XForm1D();
+                m_shape.m_xform1d = make_unique<XForm1D>();
               if (m_shape.m_xform1d->beginId == MINUS_ONE)
                 m_shape.m_xform1d->beginId = shapeId;
               else if (m_shape.m_xform1d->endId == MINUS_ONE)
diff --git a/src/lib/VSDParser.cpp b/src/lib/VSDParser.cpp
index 6bf380a..61e5f38 100644
--- a/src/lib/VSDParser.cpp
+++ b/src/lib/VSDParser.cpp
@@ -1154,7 +1154,7 @@ void 
libvisio::VSDParser::readXFormData(librevenge::RVNGInputStream *input)
 void libvisio::VSDParser::readXForm1D(librevenge::RVNGInputStream *input)
 {
   if (!m_shape.m_xform1d)
-    m_shape.m_xform1d = new XForm1D();
+    m_shape.m_xform1d = make_unique<XForm1D>();
   input->seek(1, librevenge::RVNG_SEEK_CUR);
   m_shape.m_xform1d->beginX = readDouble(input);
   input->seek(1, librevenge::RVNG_SEEK_CUR);
@@ -2268,7 +2268,7 @@ void 
libvisio::VSDParser::readMisc(librevenge::RVNGInputStream *input)
             if (0x40000073 == readU32(input))
             {
               if (!m_shape.m_xform1d)
-                m_shape.m_xform1d = new XForm1D();
+                m_shape.m_xform1d = make_unique<XForm1D>();
               if (m_shape.m_xform1d->beginId == MINUS_ONE)
                 m_shape.m_xform1d->beginId = shapeId;
               else if (m_shape.m_xform1d->endId == MINUS_ONE)
diff --git a/src/lib/VSDStencils.cpp b/src/lib/VSDStencils.cpp
index 91865bd..2243c53 100644
--- a/src/lib/VSDStencils.cpp
+++ b/src/lib/VSDStencils.cpp
@@ -16,7 +16,7 @@ libvisio::VSDShape::VSDShape()
     m_textStyleId(MINUS_ONE), m_lineStyle(), m_fillStyle(), 
m_textBlockStyle(), m_charStyle(),
     m_charList(), m_paraStyle(), m_paraList(), m_tabSets(), m_text(), 
m_names(),
     m_textFormat(libvisio::VSD_TEXT_UTF16), m_nurbsData(), m_polylineData(), 
m_xform(), m_txtxform(nullptr),
-    m_xform1d(nullptr), m_misc(), m_layerMem()
+    m_xform1d(), m_misc(), m_layerMem()
 {
 }
 
@@ -74,9 +74,7 @@ libvisio::VSDShape &libvisio::VSDShape::operator=(const 
libvisio::VSDShape &shap
     if (m_txtxform)
       delete m_txtxform;
     m_txtxform = shape.m_txtxform ? new XForm(*(shape.m_txtxform)) : nullptr;
-    if (m_xform1d)
-      delete m_xform1d;
-    m_xform1d = shape.m_xform1d ? new XForm1D(*(shape.m_xform1d)) : nullptr;
+    m_xform1d.reset(shape.m_xform1d ? new XForm1D(*shape.m_xform1d) : nullptr);
     m_misc = shape.m_misc;
     m_layerMem = shape.m_layerMem;
   }
@@ -91,8 +89,6 @@ void libvisio::VSDShape::clear()
   if (m_txtxform)
     delete m_txtxform;
   m_txtxform = nullptr;
-  if (m_xform1d)
-    delete m_xform1d;
   m_xform1d = nullptr;
 
   m_geometries.clear();
diff --git a/src/lib/VSDStencils.h b/src/lib/VSDStencils.h
index 1b0a464..5beedf9 100644
--- a/src/lib/VSDStencils.h
+++ b/src/lib/VSDStencils.h
@@ -11,6 +11,7 @@
 #define __VSDSTENCILS_H__
 
 #include <map>
+#include <memory>
 #include <vector>
 #include "VSDStyles.h"
 #include "VSDGeometryList.h"
@@ -53,7 +54,7 @@ public:
   std::map<unsigned, PolylineData> m_polylineData;
   XForm m_xform;
   XForm *m_txtxform;
-  XForm1D *m_xform1d;
+  std::unique_ptr<XForm1D> m_xform1d;
   VSDMisc m_misc;
   VSDName m_layerMem;
 };
diff --git a/src/lib/VSDXParser.cpp b/src/lib/VSDXParser.cpp
index 10a6081..e6385d8 100644
--- a/src/lib/VSDXParser.cpp
+++ b/src/lib/VSDXParser.cpp
@@ -1050,7 +1050,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         ret = readDoubleData(m_shape.m_xform1d->beginX, reader);
       }
       break;
@@ -1058,7 +1058,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         ret = readDoubleData(m_shape.m_xform1d->beginY, reader);
       }
       break;
@@ -1066,7 +1066,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         readTriggerId(m_shape.m_xform1d->beginId, reader);
       }
       break;
@@ -1074,7 +1074,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         readTriggerId(m_shape.m_xform1d->endId, reader);
       }
       break;
@@ -1082,7 +1082,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         ret = readDoubleData(m_shape.m_xform1d->endX, reader);
       }
       break;
@@ -1090,7 +1090,7 @@ void 
libvisio::VSDXParser::readShapeProperties(xmlTextReaderPtr reader)
       if (XML_READER_TYPE_ELEMENT == tokenType)
       {
         if (!m_shape.m_xform1d)
-          m_shape.m_xform1d = new XForm1D();
+          m_shape.m_xform1d = make_unique<XForm1D>();
         ret = readDoubleData(m_shape.m_xform1d->endY, reader);
       }
       break;
commit e3f0216ba318fddbfab2b92159c363dced48082e
Author: David Tardon <dtar...@redhat.com>
Date:   Sun Mar 25 16:18:13 2018 +0200

    avoid manual memory mgmt
    
    Change-Id: If7229a08104410cd2df3b84202c75e68cbcfc114

diff --git a/src/lib/VSDParagraphList.cpp b/src/lib/VSDParagraphList.cpp
index c1863a1..f77b500 100644
--- a/src/lib/VSDParagraphList.cpp
+++ b/src/lib/VSDParagraphList.cpp
@@ -84,7 +84,7 @@ libvisio::VSDParagraphList::VSDParagraphList(const 
libvisio::VSDParagraphList &p
   m_elementsOrder(paraList.m_elementsOrder)
 {
   for (auto iter = paraList.m_elements.begin(); iter != 
paraList.m_elements.end(); ++iter)
-    m_elements[iter->first] = iter->second->clone();
+    m_elements[iter->first] = clone(iter->second);
 }
 
 libvisio::VSDParagraphList &libvisio::VSDParagraphList::operator=(const 
libvisio::VSDParagraphList &paraList)
@@ -93,7 +93,7 @@ libvisio::VSDParagraphList 
&libvisio::VSDParagraphList::operator=(const libvisio
   {
     clear();
     for (auto iter = paraList.m_elements.begin(); iter != 
paraList.m_elements.end(); ++iter)
-      m_elements[iter->first] = iter->second->clone();
+      m_elements[iter->first] = clone(iter->second);
     m_elementsOrder = paraList.m_elementsOrder;
   }
   return *this;
@@ -101,7 +101,6 @@ libvisio::VSDParagraphList 
&libvisio::VSDParagraphList::operator=(const libvisio
 
 libvisio::VSDParagraphList::~VSDParagraphList()
 {
-  clear();
 }
 
 void libvisio::VSDParagraphList::addParaIX(unsigned id, unsigned level, 
unsigned charCount, const boost::optional<double> &indFirst,
@@ -112,21 +111,11 @@ void libvisio::VSDParagraphList::addParaIX(unsigned id, 
unsigned level, unsigned
                                            const boost::optional<VSDName> 
&bulletFont, const boost::optional<double> &bulletFontSize,
                                            const boost::optional<double> 
&textPosAfterBullet, const boost::optional<unsigned> &flags)
 {
-  auto *tmpElement = dynamic_cast<VSDParaIX *>(m_elements[id]);
+  auto *tmpElement = dynamic_cast<VSDParaIX *>(m_elements[id].get());
   if (!tmpElement)
-  {
-    auto iter = m_elements.find(id);
-    if (m_elements.end() != iter)
-    {
-      if (iter->second)
-        delete iter->second;
-      m_elements.erase(iter);
-    }
-
-    m_elements[id] = new VSDParaIX(id, level, charCount, indFirst, indLeft, 
indRight, spLine, spBefore,
-                                   spAfter, align, bullet, bulletStr, 
bulletFont, bulletFontSize,
-                                   textPosAfterBullet, flags);
-  }
+    m_elements[id] = make_unique<VSDParaIX>(id, level, charCount, indFirst, 
indLeft, indRight, spLine, spBefore,
+                                            spAfter, align, bullet, bulletStr, 
bulletFont, bulletFontSize,
+                                            textPosAfterBullet, flags);
   else
     tmpElement->m_style.override(VSDOptionalParaStyle(charCount, indFirst, 
indLeft, indRight, spLine, spBefore,
                                                       spAfter, align, bullet, 
bulletStr, bulletFont, bulletFontSize,
@@ -181,19 +170,18 @@ void libvisio::VSDParagraphList::handle(VSDCollector 
*collector) const
 {
   if (empty())
     return;
-  std::map<unsigned, VSDParagraphListElement *>::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);
   }
@@ -201,8 +189,6 @@ void libvisio::VSDParagraphList::handle(VSDCollector 
*collector) const
 
 void libvisio::VSDParagraphList::clear()
 {
-  for (auto &element : m_elements)
-    delete element.second;
   m_elements.clear();
   m_elementsOrder.clear();
 }
diff --git a/src/lib/VSDParagraphList.h b/src/lib/VSDParagraphList.h
index 090ce91..9a7cbe0 100644
--- a/src/lib/VSDParagraphList.h
+++ b/src/lib/VSDParagraphList.h
@@ -10,6 +10,7 @@
 #ifndef __VSDPARAGRAPHLIST_H__
 #define __VSDPARAGRAPHLIST_H__
 
+#include <memory>
 #include <vector>
 #include <map>
 #include "VSDStyles.h"
@@ -47,7 +48,7 @@ public:
     return (m_elements.empty());
   }
 private:
-  std::map<unsigned, VSDParagraphListElement *> m_elements;
+  std::map<unsigned, std::unique_ptr<VSDParagraphListElement>> m_elements;
   std::vector<unsigned> m_elementsOrder;
 };
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to