comparison Framework/Messages/Promise.h @ 302:4a79193ffb58 am-callable-and-promise

support for custom messages + no leaks in unit-tests
author am@osimis.io
date Tue, 18 Sep 2018 18:04:53 +0200
parents 3897f9f28cfa
children 99e31898910e
comparison
equal deleted inserted replaced
301:547e1cf7aa7b 302:4a79193ffb58
24 #include "MessageBroker.h" 24 #include "MessageBroker.h"
25 #include "ICallable.h" 25 #include "ICallable.h"
26 #include "IMessage.h" 26 #include "IMessage.h"
27 27
28 #include <boost/noncopyable.hpp> 28 #include <boost/noncopyable.hpp>
29 #include <memory>
29 30
30 namespace OrthancStone { 31 namespace OrthancStone {
31 32
32 class Promise : public boost::noncopyable 33 class Promise : public boost::noncopyable
33 { 34 {
34 protected: 35 protected:
35 MessageBroker& broker_; 36 MessageBroker& broker_;
36 37
37 ICallable* successCallable_; 38 std::auto_ptr<ICallable> successCallable_;
38 ICallable* failureCallable_; 39 std::auto_ptr<ICallable> failureCallable_;
39 40
40 public: 41 public:
41 Promise(MessageBroker& broker) 42 Promise(MessageBroker& broker)
42 : broker_(broker), 43 : broker_(broker)
43 successCallable_(NULL),
44 failureCallable_(NULL)
45 { 44 {
46 } 45 }
47 46
48 void Success(const IMessage& message) 47 void Success(const IMessage& message)
49 { 48 {
63 } 62 }
64 } 63 }
65 64
66 Promise& Then(ICallable* successCallable) 65 Promise& Then(ICallable* successCallable)
67 { 66 {
68 if (successCallable_ != NULL) 67 if (successCallable_.get() != NULL)
69 { 68 {
70 // TODO: throw throw new "Promise may only have a single success target" 69 // TODO: throw throw new "Promise may only have a single success target"
71 } 70 }
72 successCallable_ = successCallable; 71 successCallable_.reset(successCallable);
73 return *this; 72 return *this;
74 } 73 }
75 74
76 Promise& Else(ICallable* failureCallable) 75 Promise& Else(ICallable* failureCallable)
77 { 76 {
78 if (failureCallable_ != NULL) 77 if (failureCallable_.get() != NULL)
79 { 78 {
80 // TODO: throw throw new "Promise may only have a single failure target" 79 // TODO: throw throw new "Promise may only have a single failure target"
81 } 80 }
82 failureCallable_ = failureCallable; 81 failureCallable_.reset(failureCallable);
83 return *this; 82 return *this;
84 } 83 }
85 84
86 }; 85 };
87 86