annotate Framework/Messages/ObserverBase.h @ 1327:4f8db2d202c8 broker

OrthancSeriesProgressiveLoader now has two modes that can be selected at object creation : - progressive (will first load jpeg50, then jpeg90 then PAM) - non-progressive (will directly load PAM (uncompressed)) Please note that the slice loading order remains dynamic and depending upon the slice that the client code wishes to extract from the volume.
author Benjamin Golinvaux <bgo@osimis.io>
date Wed, 25 Mar 2020 14:34:27 +0100
parents 0ca50d275b9a
children 30deba7bc8e2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1064
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * Stone of Orthanc
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
4 * Department, University Hospital of Liege, Belgium
1271
0ca50d275b9a upgrade to year 2020
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1067
diff changeset
5 * Copyright (C) 2017-2020 Osimis S.A., Belgium
1064
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 *
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * This program is free software: you can redistribute it and/or
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * modify it under the terms of the GNU Affero General Public License
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 * as published by the Free Software Foundation, either version 3 of
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * the License, or (at your option) any later version.
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 *
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * This program is distributed in the hope that it will be useful, but
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * Affero General Public License for more details.
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 *
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * You should have received a copy of the GNU Affero General Public License
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 **/
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 #pragma once
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24 #include "ICallable.h"
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 #include "IObserver.h"
1065
9d42f89b8c3c improved readability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1064
diff changeset
26 #include "IObservable.h"
1064
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 #include <Core/OrthancException.h>
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 #include <boost/enable_shared_from_this.hpp>
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 namespace OrthancStone
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 {
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 template <typename TObserver>
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35 class ObserverBase :
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 public IObserver,
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 public boost::enable_shared_from_this<TObserver>
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 {
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 public:
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 boost::shared_ptr<TObserver> GetSharedObserver()
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 {
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42 try
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 {
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 return this->shared_from_this();
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 }
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 catch (boost::bad_weak_ptr&)
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 {
1067
05b2e71ed145 removed MessageForwarder, unit tests are ok
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1065
diff changeset
48 throw Orthanc::OrthancException(
05b2e71ed145 removed MessageForwarder, unit tests are ok
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1065
diff changeset
49 Orthanc::ErrorCode_InternalError,
05b2e71ed145 removed MessageForwarder, unit tests are ok
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1065
diff changeset
50 "Cannot get a shared pointer to an observer from its constructor, "
05b2e71ed145 removed MessageForwarder, unit tests are ok
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1065
diff changeset
51 "or the observer is not created as a shared pointer");
1064
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 }
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 }
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55 template <typename TMessage>
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56 ICallable* CreateCallable(void (TObserver::* MemberMethod) (const TMessage&))
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 {
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 return new Callable<TObserver, TMessage>(GetSharedObserver(), MemberMethod);
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 }
1065
9d42f89b8c3c improved readability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1064
diff changeset
60
9d42f89b8c3c improved readability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1064
diff changeset
61 template <typename TMessage>
9d42f89b8c3c improved readability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1064
diff changeset
62 void Register(IObservable& observable,
9d42f89b8c3c improved readability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1064
diff changeset
63 void (TObserver::* MemberMethod) (const TMessage&))
9d42f89b8c3c improved readability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1064
diff changeset
64 {
9d42f89b8c3c improved readability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1064
diff changeset
65 observable.RegisterCallable(CreateCallable(MemberMethod));
9d42f89b8c3c improved readability
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 1064
diff changeset
66 }
1064
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67 };
af4b9cba905f simplify how observers are regsitered, and how callables are created
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68 }