include/comphelper/stl_types.hxx | 23 +++++++++++++++++++++++ sc/source/core/tool/dbdata.cxx | 24 ++++-------------------- 2 files changed, 27 insertions(+), 20 deletions(-)
New commits: commit eaf640d282dd2bd8f647a510e401323da506a810 Author: Michael Stahl <[email protected]> Date: Fri Nov 6 11:48:35 2015 +0100 comphelper: add a generic implementation of std container operator== ... that contain std::unique_ptr. With C++11 variadic templates this apparently works for both std::vector and std::set; associative containers like std::map have different iterators so need a different implementation. Change-Id: I6872445b007875c310d08fa7a8d7311075880b1d Reviewed-on: https://gerrit.libreoffice.org/19818 Tested-by: Jenkins <[email protected]> Reviewed-by: Michael Stahl <[email protected]> diff --git a/include/comphelper/stl_types.hxx b/include/comphelper/stl_types.hxx index 84ea999..f154937 100644 --- a/include/comphelper/stl_types.hxx +++ b/include/comphelper/stl_types.hxx @@ -100,6 +100,29 @@ template<class T> struct UniquePtrValueLess } }; +/// by-value implementation of std::foo<std::unique_ptr<T>>::operator== +template<template<typename, typename...> class C, typename T, typename... Etc> +bool ContainerUniquePtrEquals( + C<std::unique_ptr<T>, Etc...> const& lhs, + C<std::unique_ptr<T>, Etc...> const& rhs) +{ + if (lhs.size() != rhs.size()) + { + return false; + } + for (auto iter1 = lhs.begin(), iter2 = rhs.begin(); + iter1 != lhs.end(); + ++iter1, ++iter2) + { + if (!(**iter1 == **iter2)) + { + return false; + } + } + return true; +}; + + /** STL-compliant structure for comparing Reference< <iface> > instances */ template < class IAFCE > diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx index cdf0ff0..5f145fa 100644 --- a/sc/source/core/tool/dbdata.cxx +++ b/sc/source/core/tool/dbdata.cxx @@ -34,6 +34,8 @@ #include "dociter.hxx" #include "brdcst.hxx" +#include <comphelper/stl_types.hxx> + #include <memory> #include <utility> @@ -1169,18 +1171,7 @@ size_t ScDBCollection::NamedDBs::size() const bool ScDBCollection::NamedDBs::operator== (const NamedDBs& r) const { - if (m_DBs.size() != r.m_DBs.size()) - { - return false; - } - for (auto iter1 = m_DBs.begin(), iter2 = r.m_DBs.begin(); iter1 != m_DBs.end(); ++iter1, ++iter2) - { - if (**iter1 != **iter2) - { - return false; - } - } - return true; + return ::comphelper::ContainerUniquePtrEquals(m_DBs, r.m_DBs); } ScDBCollection::AnonDBs::iterator ScDBCollection::AnonDBs::begin() @@ -1257,14 +1248,7 @@ bool ScDBCollection::AnonDBs::has( const ScDBData* p ) const bool ScDBCollection::AnonDBs::operator== (const AnonDBs& r) const { - if (m_DBs.size() != r.m_DBs.size()) - return false; - for (auto iter1 = begin(), iter2 = r.begin(); iter1 != end(); ++iter1, ++iter2) - { - if (**iter1 != **iter2) - return false; - } - return true; + return ::comphelper::ContainerUniquePtrEquals(m_DBs, r.m_DBs); } ScDBCollection::AnonDBs::AnonDBs() _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
