Mercurial > hg > orthanc-stone
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 |