I would like the attached patch to be merged to the 3-6 branch in order to update the internal mdds to 0.6.1. This version fixes one important bug in the iterator implementation of flat_segment_tree, so having 0.6.1 available will make it easier to backport any future fixes I might backport to 3.6.

I've also attached relevant changes (changes that affect libreoffice) between 0.6.0 and 0.6.1.

Thanks,

Kohei

--
Kohei Yoshida, LibreOffice hacker, Calc
>From 9d289c7b6f106a31afc7184c3e21896aaf998819 Mon Sep 17 00:00:00 2001
From: Kohei Yoshida <[email protected]>
Date: Tue, 18 Sep 2012 10:14:45 -0400
Subject: [PATCH] Update mdds to 0.6.1.

Change-Id: Ic400620f1bab54cf9b535193b62840243cdede77
---
 mdds/0001-Workaround-for-gcc-bug.patch            |   27 +++++++++
 mdds/0001-fix-linking-error-with-boost-1.50.patch |   27 ---------
 mdds/makefile.mk                                  |   10 ++--
 mdds/mdds_0.5.3.patch                             |   62 ---------------------
 mdds/mdds_0.6.0.patch                             |   54 ++++++++++++++++++
 ooo.lst.in                                        |    2 +-
 6 files changed, 87 insertions(+), 95 deletions(-)
 create mode 100644 mdds/0001-Workaround-for-gcc-bug.patch
 delete mode 100644 mdds/0001-fix-linking-error-with-boost-1.50.patch
 delete mode 100644 mdds/mdds_0.5.3.patch
 create mode 100644 mdds/mdds_0.6.0.patch

diff --git a/mdds/0001-Workaround-for-gcc-bug.patch b/mdds/0001-Workaround-for-gcc-bug.patch
new file mode 100644
index 0000000..4205ea5
--- /dev/null
+++ b/mdds/0001-Workaround-for-gcc-bug.patch
@@ -0,0 +1,27 @@
+From e1c795c8734119985ea09bf4d9f860d11e440b2a Mon Sep 17 00:00:00 2001
+From: Kohei Yoshida <[email protected]>
+Date: Mon, 30 Jul 2012 14:36:24 -0400
+Subject: [PATCH] Workaround for gcc bug.
+
+c.f. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44963
+---
+ include/mdds/multi_type_vector_types.hpp |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/include/mdds/multi_type_vector_types.hpp b/include/mdds/multi_type_vector_types.hpp
+index 78f18cb..6189139 100644
+--- a/include/mdds/multi_type_vector_types.hpp
++++ misc/build/mdds_0.6.1/include/mdds/multi_type_vector_types.hpp
+@@ -218,7 +218,8 @@ public:
+         typename store_type::const_iterator it_end = it;
+         std::advance(it_end, len);
+         d.reserve(d.size() + len);
+-        std::copy(it, it_end, std::back_inserter(d));
++        for (; it != it_end; ++it)
++            d.push_back(*it);
+     }
+
+     static void assign_values_from_block(
+--
+1.7.7
+
diff --git a/mdds/0001-fix-linking-error-with-boost-1.50.patch b/mdds/0001-fix-linking-error-with-boost-1.50.patch
deleted file mode 100644
index c5a4afc..0000000
--- a/mdds/0001-fix-linking-error-with-boost-1.50.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 09937e5d6b4b82efbff40da2aa50fb02f2250bb2 Mon Sep 17 00:00:00 2001
-From: David Tardon <[email protected]>
-Date: Sat, 28 Jul 2012 14:32:47 +0200
-Subject: [PATCH] fix linking error with boost 1.50
-
----
- include/mdds/mixed_type_matrix_storage.hpp | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/include/mdds/mixed_type_matrix_storage.hpp b/include/mdds/mixed_type_matrix_storage.hpp
-index fa0bf25..bb4e354 100644
---- a/include/mdds/mixed_type_matrix_storage.hpp
-+++ misc/build/mdds_0.5.3/include/mdds/mixed_type_matrix_storage.hpp
-@@ -32,6 +32,10 @@
- 
- #include <boost/ptr_container/ptr_vector.hpp>
- #include <boost/ptr_container/ptr_map.hpp>
-+// Boost.Pool indirectly pulls in Boost.System, causing linking error
-+// with Boost 1.50, because some (deprecated) symbols from System are
-+// not found.
-+#define BOOST_SYSTEM_NO_DEPRECATED
- #include <boost/pool/object_pool.hpp>
- 
- namespace mdds {
--- 
-1.7.11.2
-
diff --git a/mdds/makefile.mk b/mdds/makefile.mk
index 0063870..7338e0a 100644
--- a/mdds/makefile.mk
+++ b/mdds/makefile.mk
@@ -36,11 +36,11 @@ TARGET=mdds
 
 # --- Files --------------------------------------------------------
 
-TARFILE_NAME=mdds_0.5.3
-TARFILE_MD5=0ff7d225d087793c8c2c680d77aac3e7
-PATCH_FILES=mdds_0.5.3.patch
-PATCH_FILES=\
-	    0001-fix-linking-error-with-boost-1.50.patch \
+TARFILE_NAME=mdds_0.6.1
+TARFILE_MD5=9f9e15966b5624834157fe3d748312bc
+
+PATCH_FILES=mdds_0.6.0.patch \
+	    0001-Workaround-for-gcc-bug.patch
 
 CONFIGURE_DIR=
 CONFIGURE_ACTION=
diff --git a/mdds/mdds_0.5.3.patch b/mdds/mdds_0.5.3.patch
deleted file mode 100644
index 40aedb1..0000000
--- a/mdds/mdds_0.5.3.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- misc/mdds_0.5.3/include/mdds/mixed_type_matrix_def.inl	2011-07-13 13:26:27.000000000 -0600
-+++ misc/build/mdds_0.5.3/include/mdds/mixed_type_matrix_def.inl	2011-07-20 02:02:21.164198900 -0600
-@@ -44,7 +44,6 @@
-         default:
-             throw matrix_error("unknown density type");
-     }
--    return NULL;
- }
- 
- template<typename _String, typename _Flag>
-@@ -216,8 +216,8 @@
-         // assignment to self.
-         return;
- 
--    size_t row_count = ::std::min(mp_storage->rows(), r.mp_storage->rows());
--    size_t col_count = ::std::min(mp_storage->cols(), r.mp_storage->cols());
-+    size_t row_count = (::std::min)(mp_storage->rows(), r.mp_storage->rows());
-+    size_t col_count = (::std::min)(mp_storage->cols(), r.mp_storage->cols());
-     for (size_t i = 0; i < row_count; ++i)
-         for (size_t j = 0; j < col_count; ++j)
-             mp_storage->get_element(i, j) = r.mp_storage->get_element(i, j);
---- misc/mdds_0.5.3/include/mdds/mixed_type_matrix_storage_filled_linear.inl	2011-07-13 13:26:27.000000000 -0600
-+++ misc/build/mdds_0.5.3/include/mdds/mixed_type_matrix_storage_filled_linear.inl	2011-07-20 02:02:21.179798900 -0600
-@@ -354,8 +354,8 @@
-         }
- 
-         array_type new_array(new_size, &m_init_elem);
--        size_t min_rows = ::std::min(row, m_rows);
--        size_t min_cols = ::std::min(col, m_cols);
-+        size_t min_rows = (::std::min)(row, m_rows);
-+        size_t min_cols = (::std::min)(col, m_cols);
-         for (size_t i = 0; i < min_rows; ++i)
-         {
-             for (size_t j = 0; j < min_cols; ++j)
-@@ -612,8 +612,8 @@
-         }
- 
-         array_type new_array(new_size, element(0.0));
--        size_t min_rows = ::std::min(row, m_rows);
--        size_t min_cols = ::std::min(col, m_cols);
-+        size_t min_rows = (::std::min)(row, m_rows);
-+        size_t min_cols = (::std::min)(col, m_cols);
-         for (size_t i = 0; i < min_rows; ++i)
-         {
-             for (size_t j = 0; j < min_cols; ++j)
---- misc/mdds_0.5.3/include/mdds/point_quad_tree.hpp	2011-07-13 13:26:27.000000000 -0600
-+++ misc/build/mdds_0.5.3/include/mdds/point_quad_tree.hpp	2011-07-20 02:04:36.088835900 -0600
-@@ -623,10 +623,10 @@
- template<typename _Key, typename _Data>
- void point_quad_tree<_Key,_Data>::insert(key_type x, key_type y, data_type data)
- {
--    m_xrange.first  = ::std::min(m_xrange.first,  x);
--    m_xrange.second = ::std::max(m_xrange.second, x);
--    m_yrange.first  = ::std::min(m_yrange.first,  y);
--    m_yrange.second = ::std::max(m_yrange.second, y);
-+    m_xrange.first  = (::std::min)(m_xrange.first,  x);
-+    m_xrange.second = (::std::max)(m_xrange.second, x);
-+    m_yrange.first  = (::std::min)(m_yrange.first,  y);
-+    m_yrange.second = (::std::max)(m_yrange.second, y);
- 
-     if (!m_root)
-     {
diff --git a/mdds/mdds_0.6.0.patch b/mdds/mdds_0.6.0.patch
new file mode 100644
index 0000000..d1d997c
--- /dev/null
+++ b/mdds/mdds_0.6.0.patch
@@ -0,0 +1,54 @@
+--- misc/mdds_0.6.1/include/mdds/mixed_type_matrix_def.inl	2011-07-13 13:26:27.000000000 -0600
++++ misc/build/mdds_0.6.1/include/mdds/mixed_type_matrix_def.inl	2011-07-20 02:02:21.164198900 -0600
+@@ -216,8 +216,8 @@
+         // assignment to self.
+         return;
+ 
+-    size_t row_count = ::std::min(mp_storage->rows(), r.mp_storage->rows());
+-    size_t col_count = ::std::min(mp_storage->cols(), r.mp_storage->cols());
++    size_t row_count = (::std::min)(mp_storage->rows(), r.mp_storage->rows());
++    size_t col_count = (::std::min)(mp_storage->cols(), r.mp_storage->cols());
+     for (size_t i = 0; i < row_count; ++i)
+         for (size_t j = 0; j < col_count; ++j)
+             mp_storage->get_element(i, j) = r.mp_storage->get_element(i, j);
+--- misc/mdds_0.6.1/include/mdds/mixed_type_matrix_storage_filled_linear.inl	2011-07-13 13:26:27.000000000 -0600
++++ misc/build/mdds_0.6.1/include/mdds/mixed_type_matrix_storage_filled_linear.inl	2011-07-20 02:02:21.179798900 -0600
+@@ -354,8 +354,8 @@
+         }
+ 
+         array_type new_array(new_size, &m_init_elem);
+-        size_t min_rows = ::std::min(row, m_rows);
+-        size_t min_cols = ::std::min(col, m_cols);
++        size_t min_rows = (::std::min)(row, m_rows);
++        size_t min_cols = (::std::min)(col, m_cols);
+         for (size_t i = 0; i < min_rows; ++i)
+         {
+             for (size_t j = 0; j < min_cols; ++j)
+@@ -612,8 +612,8 @@
+         }
+ 
+         array_type new_array(new_size, element(0.0));
+-        size_t min_rows = ::std::min(row, m_rows);
+-        size_t min_cols = ::std::min(col, m_cols);
++        size_t min_rows = (::std::min)(row, m_rows);
++        size_t min_cols = (::std::min)(col, m_cols);
+         for (size_t i = 0; i < min_rows; ++i)
+         {
+             for (size_t j = 0; j < min_cols; ++j)
+--- misc/mdds_0.6.1/include/mdds/point_quad_tree.hpp	2011-07-13 13:26:27.000000000 -0600
++++ misc/build/mdds_0.6.1/include/mdds/point_quad_tree.hpp	2011-07-20 02:04:36.088835900 -0600
+@@ -623,10 +623,10 @@
+ template<typename _Key, typename _Data>
+ void point_quad_tree<_Key,_Data>::insert(key_type x, key_type y, data_type data)
+ {
+-    m_xrange.first  = ::std::min(m_xrange.first,  x);
+-    m_xrange.second = ::std::max(m_xrange.second, x);
+-    m_yrange.first  = ::std::min(m_yrange.first,  y);
+-    m_yrange.second = ::std::max(m_yrange.second, y);
++    m_xrange.first  = (::std::min)(m_xrange.first,  x);
++    m_xrange.second = (::std::max)(m_xrange.second, x);
++    m_yrange.first  = (::std::min)(m_yrange.first,  y);
++    m_yrange.second = (::std::max)(m_yrange.second, y);
+ 
+     if (!m_root)
+     {
diff --git a/ooo.lst.in b/ooo.lst.in
index 9a8bf74..f4d8db9 100644
--- a/ooo.lst.in
+++ b/ooo.lst.in
@@ -83,7 +83,7 @@ a0a861f539f0e7a91d05e6b9457e4db1-nss-3.13.5-with-nspr-4.9.1.tar.gz
 9d283e02441d8cebdcd1e5d9df227d67-libwpg-0.2.1.tar.bz2
 c01351d7db2b205de755d58769288224-libwpd-0.9.4.tar.bz2
 d197bd6211669a2fa4ca648faf04bcb1-libwps-0.2.7.tar.bz2
-0ff7d225d087793c8c2c680d77aac3e7-mdds_0.5.3.tar.bz2
+9f9e15966b5624834157fe3d748312bc-mdds_0.6.1.tar.bz2
 f02578f5218f217a9f20e9c30e119c6a-boost_1_44_0.tar.bz2
 3121aaf3e13e5d88dfff13fb4a5f1ab8-hunspell-1.3.2.tar.gz
 3bf481ca95109b14435125c0dd1f2217-graphite2-1.0.3.tgz
-- 
1.7.3.4

diff --git a/include/mdds/flat_segment_tree_itr.hpp b/include/mdds/flat_segment_tree_itr.hpp
index b307d69..cfb5f7c 100644
--- a/include/mdds/flat_segment_tree_itr.hpp
+++ b/include/mdds/flat_segment_tree_itr.hpp
@@ -1,6 +1,6 @@
 /*************************************************************************
  *
- * Copyright (c) 2010 Kohei Yoshida
+ * Copyright (c) 2010-2012 Kohei Yoshida
  * 
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
@@ -38,12 +38,12 @@ struct itr_forward_handler
 {
     typedef _FstType fst_type;
 
-    const typename fst_type::node* init_pos(const fst_type* _db, bool _end) const
+    static const typename fst_type::node* init_pos(const fst_type* _db, bool _end)
     {
         return _end ? _db->m_right_leaf.get() : _db->m_left_leaf.get();
     }
 
-    void inc(const fst_type* _db, const typename fst_type::node*& p, bool& end) const
+    static void inc(const fst_type* _db, const typename fst_type::node*& p, bool& end)
     {
         if (p == _db->m_right_leaf.get())
             end = true;
@@ -51,7 +51,7 @@ struct itr_forward_handler
             p = p->right.get();
     }
 
-    void dec(const typename fst_type::node*& p, bool& end) const
+    static void dec(const typename fst_type::node*& p, bool& end)
     {
         if (end)
             end = false;
@@ -68,12 +68,12 @@ struct itr_reverse_handler
 {
     typedef _FstType fst_type;
 
-    const typename fst_type::node* init_pos(const fst_type* _db, bool _end) const
+    static const typename fst_type::node* init_pos(const fst_type* _db, bool _end)
     {
         return _end ? _db->m_left_leaf.get() : _db->m_right_leaf.get();
     }
 
-    void inc(const fst_type* _db, const typename fst_type::node*& p, bool& end) const
+    static void inc(const fst_type* _db, const typename fst_type::node*& p, bool& end)
     {
         if (p == _db->m_left_leaf.get())
             end = true;
@@ -81,7 +81,7 @@ struct itr_reverse_handler
             p = p->left.get();
     }
 
-    void dec(const typename fst_type::node*& p, bool& end) const
+    static void dec(const typename fst_type::node*& p, bool& end)
     {
         if (end)
             end = false;
@@ -93,9 +93,9 @@ struct itr_reverse_handler
 template<typename _FstType, typename _Hdl>
 class const_iterator_base
 {
+    typedef _Hdl     handler_type;
 public:
     typedef _FstType fst_type;
-    typedef _Hdl     handler_type;
 
     // iterator traits
     typedef ::std::pair<typename fst_type::key_type, typename fst_type::value_type> value_type;
@@ -110,7 +110,7 @@ public:
         if (!_db)
             return;
 
-        m_pos = m_hdl.init_pos(_db, _end);
+        m_pos = handler_type::init_pos(_db, _end);
     }
 
     explicit const_iterator_base(const fst_type* _db, const typename fst_type::node* pos) :
@@ -123,20 +123,21 @@ public:
     {
         m_db = r.m_db;
         m_pos = r.m_pos;
+        m_end_pos = r.m_end_pos;
         return *this;
     }
 
     const value_type* operator++()
     {
         assert(m_pos);
-        m_hdl.inc(m_db, m_pos, m_end_pos);
+        handler_type::inc(m_db, m_pos, m_end_pos);
         return operator->();
     }
 
     const value_type* operator--()
     {
         assert(m_pos);
-        m_hdl.dec(m_pos, m_end_pos);
+        handler_type::dec(m_pos, m_end_pos);
         return operator->();
     }
 
@@ -145,10 +146,7 @@ public:
         if (m_db != r.m_db)
             return false;
 
-        if (m_end_pos == r.m_end_pos)
-            return true;
-
-        return (m_pos == r.m_pos);
+        return (m_pos == r.m_pos) && (m_end_pos == r.m_end_pos);
     }
 
     bool operator!=(const const_iterator_base& r) const
@@ -177,7 +175,6 @@ private:
         return m_current_pair;
     }
 
-    handler_type    m_hdl;
     const fst_type* m_db;
     const typename fst_type::node* m_pos;
     value_type      m_current_pair;
diff --git a/include/mdds/mixed_type_matrix_def.inl b/include/mdds/mixed_type_matrix_def.inl
index 7c129ec..2c33799 100644
--- a/include/mdds/mixed_type_matrix_def.inl
+++ b/include/mdds/mixed_type_matrix_def.inl
@@ -44,7 +44,6 @@ mixed_type_matrix<_String,_Flag>::create_storage(size_t rows, size_t cols, matri
         default:
             throw matrix_error("unknown density type");
     }
-    return NULL;
 }
 
 template<typename _String, typename _Flag>
diff --git a/include/mdds/mixed_type_matrix_storage.hpp b/include/mdds/mixed_type_matrix_storage.hpp
index fa0bf25..bb4e354 100644
--- a/include/mdds/mixed_type_matrix_storage.hpp
+++ b/include/mdds/mixed_type_matrix_storage.hpp
@@ -32,6 +32,10 @@
 
 #include <boost/ptr_container/ptr_vector.hpp>
 #include <boost/ptr_container/ptr_map.hpp>
+// Boost.Pool indirectly pulls in Boost.System, causing linking error
+// with Boost 1.50, because some (deprecated) symbols from System are
+// not found.
+#define BOOST_SYSTEM_NO_DEPRECATED
 #include <boost/pool/object_pool.hpp>
 
 namespace mdds {
diff --git a/include/mdds/multi_type_vector_def.inl b/include/mdds/multi_type_vector_def.inl
index 252a260..fb72070 100644
--- a/include/mdds/multi_type_vector_def.inl
+++ b/include/mdds/multi_type_vector_def.inl
@@ -1148,7 +1148,7 @@ void multi_type_vector<_CellBlockFunc>::insert_empty_impl(size_type row, size_ty
 
     // Insert two new block below the current; one for the empty block being
     // inserted, and one for the lower part of the current non-empty block.
-    m_blocks.insert(m_blocks.begin()+block_index+1, 2, NULL);
+    m_blocks.insert(m_blocks.begin()+block_index+1, 2u, NULL);
 
     m_blocks[block_index+1] = new block(length);
     m_blocks[block_index+2] = new block(size_blk_next);
@@ -1302,7 +1302,7 @@ void multi_type_vector<_CellBlockFunc>::insert_cells_to_middle(
     // Insert two new blocks.
     size_type n1 = row - start_row;
     size_type n2 = blk->m_size - n1;
-    m_blocks.insert(m_blocks.begin()+block_index+1, 2, NULL);
+    m_blocks.insert(m_blocks.begin()+block_index+1, 2u, NULL);
     blk->m_size = n1;
 
     m_blocks[block_index+1] = new block(length);
@@ -1467,7 +1467,7 @@ void multi_type_vector<_CellBlockFunc>::set_cells_to_single_block(
     assert(start_row_in_block < start_row && end_row < end_row_in_block);
 
     // Insert two new blocks below the current one.
-    m_blocks.insert(m_blocks.begin()+block_index+1, 2, NULL);
+    m_blocks.insert(m_blocks.begin()+block_index+1, 2u, NULL);
 
     // first new block is for the data array being inserted.
     size_type new_size = end_row - start_row + 1;
@@ -1985,7 +1985,7 @@ void multi_type_vector<_CellBlockFunc>::set_empty_in_single_block(
 
     // First, insert two new blocks at position past the current block.
     size_type lower_block_size = end_row_in_block - end_row;
-    m_blocks.insert(m_blocks.begin()+block_index+1, 2, NULL);
+    m_blocks.insert(m_blocks.begin()+block_index+1, 2u, NULL);
     m_blocks[block_index+1] = new block(empty_block_size); // empty block.
     m_blocks[block_index+2] = new block(lower_block_size);
 
diff --git a/include/mdds/multi_type_vector_trait.hpp b/include/mdds/multi_type_vector_trait.hpp
index 4c468d3..466ed8f 100644
--- a/include/mdds/multi_type_vector_trait.hpp
+++ b/include/mdds/multi_type_vector_trait.hpp
@@ -95,7 +95,6 @@ base_element_block* element_block_func_base::create_new_block(element_t type, si
         default:
             throw general_error("create_new_block: failed to create a new block of unknown type.");
     }
-    return NULL;
 }
 
 base_element_block* element_block_func_base::clone_block(const base_element_block& block)
@@ -123,7 +122,6 @@ base_element_block* element_block_func_base::clone_block(const base_element_bloc
         default:
             throw general_error("clone_block: failed to clone a block of unknown type.");
     }
-    return NULL;
 }
 
 void element_block_func_base::delete_block(base_element_block* p)
diff --git a/include/mdds/multi_type_vector_types.hpp b/include/mdds/multi_type_vector_types.hpp
index f27ac88..f72b641 100644
--- a/include/mdds/multi_type_vector_types.hpp
+++ b/include/mdds/multi_type_vector_types.hpp
@@ -302,7 +302,7 @@ protected:
     noncopyable_element_block(size_t n, const _Data& val) : base_type(n, val) {}
 
 public:
-    static _Self* clone_block(const base_element_block& blk)
+    static _Self* clone_block(const base_element_block&)
     {
         throw element_block_error("attempted to clone a noncopyable element block.");
     }
@@ -355,6 +355,7 @@ struct managed_element_block : public copyable_element_block<managed_element_blo
     typedef managed_element_block<_TypeId,_Data> self_type;
 
     using base_type::get;
+    using base_type::set_value;
     using base_type::m_array;
 
     managed_element_block() : base_type() {}
@@ -402,6 +403,7 @@ struct noncopyable_managed_element_block : public noncopyable_element_block<nonc
 
     using base_type::get;
     using base_type::m_array;
+    using base_type::set_value;
 
     noncopyable_managed_element_block() : base_type() {}
     noncopyable_managed_element_block(size_t n) : base_type(n) {}
_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to