comparison 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
comparison
equal deleted inserted replaced
89:f244018a4e4b 90:64e60018943f
21 21
22 #include "SlicedVolumeBase.h" 22 #include "SlicedVolumeBase.h"
23 23
24 namespace OrthancStone 24 namespace OrthancStone
25 { 25 {
26 namespace
27 {
28 struct GeometryReadyFunctor
29 {
30 void operator() (ISlicedVolume::IObserver& observer,
31 const ISlicedVolume& source)
32 {
33 observer.NotifyGeometryReady(source);
34 }
35 };
36
37 struct GeometryErrorFunctor
38 {
39 void operator() (ISlicedVolume::IObserver& observer,
40 const ISlicedVolume& source)
41 {
42 observer.NotifyGeometryError(source);
43 }
44 };
45
46 struct ContentChangeFunctor
47 {
48 void operator() (ISlicedVolume::IObserver& observer,
49 const ISlicedVolume& source)
50 {
51 observer.NotifyContentChange(source);
52 }
53 };
54
55 struct SliceChangeFunctor
56 {
57 size_t sliceIndex_;
58 const Slice& slice_;
59
60 SliceChangeFunctor(size_t sliceIndex,
61 const Slice& slice) :
62 sliceIndex_(sliceIndex),
63 slice_(slice)
64 {
65 }
66
67 void operator() (ISlicedVolume::IObserver& observer,
68 const ISlicedVolume& source)
69 {
70 observer.NotifySliceChange(source, sliceIndex_, slice_);
71 }
72 };
73 }
74
75 void SlicedVolumeBase::NotifyGeometryReady() 26 void SlicedVolumeBase::NotifyGeometryReady()
76 { 27 {
77 GeometryReadyFunctor functor; 28 observers_.Apply(*this, &IObserver::NotifyGeometryReady);
78 observers_.Notify(this, functor);
79 } 29 }
80 30
81 void SlicedVolumeBase::NotifyGeometryError() 31 void SlicedVolumeBase::NotifyGeometryError()
82 { 32 {
83 GeometryErrorFunctor functor; 33 observers_.Apply(*this, &IObserver::NotifyGeometryError);
84 observers_.Notify(this, functor);
85 } 34 }
86 35
87 void SlicedVolumeBase::NotifyContentChange() 36 void SlicedVolumeBase::NotifyContentChange()
88 { 37 {
89 ContentChangeFunctor functor; 38 observers_.Apply(*this, &IObserver::NotifyContentChange);
90 observers_.Notify(this, functor);
91 } 39 }
92 40
93 void SlicedVolumeBase::NotifySliceChange(size_t sliceIndex, 41 void SlicedVolumeBase::NotifySliceChange(const size_t& sliceIndex,
94 const Slice& slice) 42 const Slice& slice)
95 { 43 {
96 SliceChangeFunctor functor(sliceIndex, slice); 44 observers_.Apply(*this, &IObserver::NotifySliceChange, sliceIndex, slice);
97 observers_.Notify(this, functor);
98 } 45 }
99 } 46 }