Albert,

Thanks for the patch!

> It would be great if I could get some advice on how to move forward on
> removing more of the boost dependency.

I'm definitely not the most experienced person here, but I can try to
give you some pointers.

>     for( const auto& rFilterPtr : maFilters )
>         rFilterPtr->Apply();

Awesome! Much more readable.

> Should i modify it to return XclImpAutoFilterSharePtr instead?

I personally wouldn't. I would use std::shared_ptr::get()
(http://en.cppreference.com/w/cpp/memory/shared_ptr/get)

One more random comment. In general std::make_shared
(http://en.cppreference.com/w/cpp/memory/shared_ptr/make_shared)
is better than constructing using std::shared_ptr<T>::shared_ptr(T*)
and then copying. That will result in two heap allocs vs. make_shared
which should just perform one. The following stack-overflow question
sums up the pros and cons of make_shared quite nicely.
(http://stackoverflow.com/questions/20895648/difference-in-make-shared-and-normal-shared-ptr-in-c)

Again, I still have a lot to learn, so take everything I say with a
grain of salt, but I think you're definitely on the right track. I
attached a patch combining what you had and the above random points.

Best,

Daniel

On Sun, Sep 13, 2015 at 10:06:05AM +0200, Albert Thuswaldner wrote:
> Hi,
> It would be great if I could get some advice on how to move forward on
> removing more of the boost dependency.
> 
> Originally I was working on this:
> [bug 93243] replace boost::bind with C++11 lambdas
> 
> Line 18: sc/source/filter/excel/excimp8.cxx
>     std::for_each(maFilters.begin(),maFilters.end(),
>         boost::bind(&XclImpAutoFilterData::Apply,_1));
> 
> Searching the code I hav found examples where this type of for_each
> loop is replaced by a simple for loop:
> 
>     for( const auto& rFilterPtr : maFilters )
>         rFilterPtr->Apply();
> 
> This requires some additional modificatioins to the code which can be
> seen in the attached patch.
> 
> The question which is left is what to do with what the function below
> should return:
> 
> XclImpAutoFilterData* XclImpAutoFilterBuffer::GetByTab( SCTAB nTab )
> 
> Should i modify it to return XclImpAutoFilterSharePtr instead?
> Am I on the right track in general?
> 
> Thanks for the help!
> 
> /Albert

> _______________________________________________
> LibreOffice mailing list
> LibreOffice@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/libreoffice

From 5a167b44343e70fce8b194bcb9ee35ebc41b9a2c Mon Sep 17 00:00:00 2001
From: Daniel Robertson <danlrobertso...@gmail.com>
Date: Sun, 13 Sep 2015 17:29:28 -0400
Subject: [PATCH] tdf#93243 replace boost::bind with C++11 lambdas

Replace complex usages of boost::bind and std::for_each with range-based
for-loops and lambdas when appropriate.

Change-Id: I7299cb22ed844af0256a46ce93d9aae8e9104195
---
 sc/source/filter/excel/excimp8.cxx | 16 +++++++---------
 sc/source/filter/inc/excimp8.hxx   |  6 ++----
 2 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/sc/source/filter/excel/excimp8.cxx b/sc/source/filter/excel/excimp8.cxx
index eba2d5c..3a47f25 100644
--- a/sc/source/filter/excel/excimp8.cxx
+++ b/sc/source/filter/excel/excimp8.cxx
@@ -21,8 +21,6 @@
 
 #include "excimp8.hxx"
 
-#include <boost/bind.hpp>
-
 #include <scitems.hxx>
 #include <comphelper/processfactory.hxx>
 #include <unotools/fltrcfg.hxx>
@@ -846,7 +844,8 @@ void XclImpAutoFilterData::EnableRemoveFilter()
 void XclImpAutoFilterBuffer::Insert( RootData* pRoot, const ScRange& rRange)
 {
     if( !GetByTab( rRange.aStart.Tab() ) )
-        maFilters.push_back( new XclImpAutoFilterData( pRoot, rRange) );
+        maFilters.push_back( std::make_shared< XclImpAutoFilterData >(
+                XclImpAutoFilterData( pRoot, rRange) ) );
 }
 
 void XclImpAutoFilterBuffer::AddAdvancedRange( const ScRange& rRange )
@@ -865,17 +864,16 @@ void XclImpAutoFilterBuffer::AddExtractPos( const ScRange& rRange )
 
 void XclImpAutoFilterBuffer::Apply()
 {
-    std::for_each(maFilters.begin(),maFilters.end(),
-        boost::bind(&XclImpAutoFilterData::Apply,_1));
+    for( const auto& rFilterPtr : maFilters )
+        rFilterPtr->Apply();
 }
 
 XclImpAutoFilterData* XclImpAutoFilterBuffer::GetByTab( SCTAB nTab )
 {
-    boost::ptr_vector<XclImpAutoFilterData>::iterator it;
-    for( it = maFilters.begin(); it != maFilters.end(); ++it )
+    for( const auto& rFilterPtr : maFilters )
     {
-        if( it->Tab() == nTab )
-            return &(*it);
+        if( rFilterPtr->Tab() == nTab )
+            return rFilterPtr.get();
     }
     return NULL;
 }
diff --git a/sc/source/filter/inc/excimp8.hxx b/sc/source/filter/inc/excimp8.hxx
index e50cfd4..2ce1135 100644
--- a/sc/source/filter/inc/excimp8.hxx
+++ b/sc/source/filter/inc/excimp8.hxx
@@ -22,8 +22,6 @@
 
 #include <string.h>
 
-#include <boost/ptr_container/ptr_vector.hpp>
-
 #include "imp_op.hxx"
 #include "root.hxx"
 #include "excscen.hxx"
@@ -123,8 +121,8 @@ public:
     XclImpAutoFilterData*       GetByTab( SCTAB nTab );
 
 private:
-
-    boost::ptr_vector<XclImpAutoFilterData> maFilters;
+    typedef std::shared_ptr<XclImpAutoFilterData> XclImpAutoFilterSharePtr;
+    std::vector<XclImpAutoFilterSharePtr> maFilters;
 };
 
 #endif
-- 
2.5.1

Attachment: signature.asc
Description: Digital signature

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to