diff Framework/Volumes/SlicedVolumeBase.cpp @ 90:64e60018943f wasm

fix and observer refactoring
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 29 May 2017 11:04:18 +0200
parents 90bf4116a23c
children e2fe9352f240
line wrap: on
line diff
--- a/Framework/Volumes/SlicedVolumeBase.cpp	Fri May 26 18:27:59 2017 +0200
+++ b/Framework/Volumes/SlicedVolumeBase.cpp	Mon May 29 11:04:18 2017 +0200
@@ -23,77 +23,24 @@
 
 namespace OrthancStone
 {
-  namespace
-  {
-    struct GeometryReadyFunctor
-    {
-      void operator() (ISlicedVolume::IObserver& observer,
-                       const ISlicedVolume& source)
-      {
-        observer.NotifyGeometryReady(source);
-      }
-    };
-
-    struct GeometryErrorFunctor
-    {
-      void operator() (ISlicedVolume::IObserver& observer,
-                       const ISlicedVolume& source)
-      {
-        observer.NotifyGeometryError(source);
-      }
-    };
-
-    struct ContentChangeFunctor
-    {
-      void operator() (ISlicedVolume::IObserver& observer,
-                       const ISlicedVolume& source)
-      {
-        observer.NotifyContentChange(source);
-      }
-    };
-
-    struct SliceChangeFunctor
-    {
-      size_t sliceIndex_;
-      const Slice& slice_;
-
-      SliceChangeFunctor(size_t sliceIndex,
-                         const Slice& slice) :
-        sliceIndex_(sliceIndex),
-        slice_(slice)
-      {
-      }
-
-      void operator() (ISlicedVolume::IObserver& observer,
-                       const ISlicedVolume& source)
-      {
-        observer.NotifySliceChange(source, sliceIndex_, slice_);
-      }
-    };
-  }
-
   void SlicedVolumeBase::NotifyGeometryReady()
   {
-    GeometryReadyFunctor functor;
-    observers_.Notify(this, functor);
+    observers_.Apply(*this, &IObserver::NotifyGeometryReady);
   }
       
   void SlicedVolumeBase::NotifyGeometryError()
   {
-    GeometryErrorFunctor functor;
-    observers_.Notify(this, functor);
+    observers_.Apply(*this, &IObserver::NotifyGeometryError);
   }
     
   void SlicedVolumeBase::NotifyContentChange()
   {
-    ContentChangeFunctor functor;
-    observers_.Notify(this, functor);
+    observers_.Apply(*this, &IObserver::NotifyContentChange);
   }
 
-  void SlicedVolumeBase::NotifySliceChange(size_t sliceIndex,
+  void SlicedVolumeBase::NotifySliceChange(const size_t& sliceIndex,
                                            const Slice& slice)
   {
-    SliceChangeFunctor functor(sliceIndex, slice);
-    observers_.Notify(this, functor);
+    observers_.Apply(*this, &IObserver::NotifySliceChange, sliceIndex, slice);
   }
 }