Fawkes API  Fawkes Development Version
ownership.cpp
1 
2 /***************************************************************************
3  * ownership.cpp - BlackBoard with traced ownership
4  *
5  * Created: Thu Jan 22 15:19:03 2015
6  * Copyright 2015 Tim Niemueller [www.niemueller.de]
7  ****************************************************************************/
8 
9 /* This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version. A runtime exception applies to
13  * this software (see LICENSE.GPL_WRE file mentioned below for details).
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Library General Public License for more details.
19  *
20  * Read the full text in the LICENSE.GPL_WRE file in the doc directory.
21  */
22 
23 #include <blackboard/ownership.h>
24 
25 #include <cstring>
26 #include <string>
27 
28 namespace fawkes {
29 
30 /** @class BlackBoardWithOwnership <blackboard/ownership.h>
31  * BlackBoard that traces interface ownership.
32  *
33  * @see Interface
34  * @see Message
35  *
36  * @author Tim Niemueller
37  */
38 
39 /** Constructor.
40  * @param parent parent blackboard to use as actual blackboard
41  * @param owner owner name to record in newly created interfaces
42  */
44 : BlackBoard(/* create notifier */ false), blackboard_(parent), owner_(owner)
45 {
46  BlackBoardWithOwnership *bbo = dynamic_cast<BlackBoardWithOwnership *>(blackboard_);
47  if (bbo) {
48  // we are wrapping another ownership, remove indirection and make sure
49  // we do use the outer wrapper's ownership info
50  blackboard_ = bbo->blackboard_;
51  }
52 }
53 
54 /** Destructor. */
56 {
57 }
58 
59 Interface *
61  const char *identifier,
62  const char *owner)
63 {
64  return blackboard_->open_for_reading(type, identifier, owner ? owner : owner_.c_str());
65 }
66 
67 Interface *
69  const char *identifier,
70  const char *owner)
71 {
72  return blackboard_->open_for_writing(type, identifier, owner ? owner : owner_.c_str());
73 }
74 
75 std::list<Interface *>
77  const char *id_pattern,
78  const char *owner)
79 {
80  return blackboard_->open_multiple_for_reading(type_pattern,
81  id_pattern,
82  owner ? owner : owner_.c_str());
83 }
84 
85 void
87 {
88  blackboard_->close(interface);
89 }
90 
93 {
94  return blackboard_->list_all();
95 }
96 
98 BlackBoardWithOwnership::list(const char *type_pattern, const char *id_pattern)
99 {
100  return blackboard_->list(type_pattern, id_pattern);
101 }
102 
103 bool
104 BlackBoardWithOwnership::is_alive() const throw()
105 {
106  return blackboard_->is_alive();
107 }
108 
109 bool
111 {
112  return blackboard_->try_aliveness_restore();
113 }
114 
115 void
118 {
119  blackboard_->register_listener(listener, flag);
120 }
121 
122 void
125 {
126  if (!listener)
127  return;
128  blackboard_->update_listener(listener, flag);
129 }
130 
131 void
133 {
134  if (!listener)
135  return;
136  blackboard_->unregister_listener(listener);
137 }
138 
139 void
141 {
142  if (!observer)
143  return;
144  blackboard_->register_observer(observer);
145 }
146 
147 void
149 {
150  if (!observer)
151  return;
152  blackboard_->unregister_observer(observer);
153 }
154 
155 } // end namespace fawkes
fawkes::BlackBoardWithOwnership::list_all
virtual InterfaceInfoList * list_all()
Definition: ownership.cpp:97
fawkes::BlackBoardWithOwnership::try_aliveness_restore
virtual bool try_aliveness_restore()
Definition: ownership.cpp:115
fawkes::BlackBoard::list_all
virtual InterfaceInfoList * list_all()=0
fawkes::BlackBoard::register_listener
virtual void register_listener(BlackBoardInterfaceListener *listener, ListenerRegisterFlag flag=BBIL_FLAG_ALL)
Register BB event listener.
Definition: blackboard.cpp:190
fawkes::BlackBoard::try_aliveness_restore
virtual bool try_aliveness_restore()=0
fawkes::BlackBoardWithOwnership::BlackBoardWithOwnership
BlackBoardWithOwnership(BlackBoard *parent, const char *owner)
Constructor.
Definition: ownership.cpp:48
fawkes::BlackBoardWithOwnership::open_for_reading
virtual Interface * open_for_reading(const char *interface_type, const char *identifier, const char *owner=NULL)
Definition: ownership.cpp:65
fawkes::BlackBoardWithOwnership::unregister_listener
virtual void unregister_listener(BlackBoardInterfaceListener *listener)
Unregister BB interface listener.
Definition: ownership.cpp:137
fawkes::BlackBoard::unregister_listener
virtual void unregister_listener(BlackBoardInterfaceListener *listener)
Unregister BB interface listener.
Definition: blackboard.cpp:217
fawkes::BlackBoardInterfaceListener
Definition: interface_listener.h:47
fawkes::BlackBoard
Definition: blackboard.h:50
fawkes::BlackBoardWithOwnership::list
virtual InterfaceInfoList * list(const char *type_pattern, const char *id_pattern)
Definition: ownership.cpp:103
fawkes::BlackBoard::list
virtual InterfaceInfoList * list(const char *type_pattern, const char *id_pattern)=0
fawkes::BlackBoardWithOwnership::open_multiple_for_reading
virtual std::list< Interface * > open_multiple_for_reading(const char *type_pattern, const char *id_pattern="*", const char *owner=NULL)
Definition: ownership.cpp:81
fawkes::BlackBoardWithOwnership::register_observer
virtual void register_observer(BlackBoardInterfaceObserver *observer)
Register BB interface observer.
Definition: ownership.cpp:145
fawkes::BlackBoard::close
virtual void close(Interface *interface)=0
fawkes
fawkes::BlackBoardWithOwnership::close
virtual void close(Interface *interface)
Definition: ownership.cpp:91
fawkes::BlackBoard::ListenerRegisterFlag
ListenerRegisterFlag
Flags to constrain listener registration/updates.
Definition: blackboard.h:92
fawkes::BlackBoardWithOwnership::register_listener
virtual void register_listener(BlackBoardInterfaceListener *listener, ListenerRegisterFlag flag=BBIL_FLAG_ALL)
Register BB event listener.
Definition: ownership.cpp:121
fawkes::BlackBoardWithOwnership::~BlackBoardWithOwnership
virtual ~BlackBoardWithOwnership()
Destructor.
Definition: ownership.cpp:60
fawkes::InterfaceInfoList
Definition: interface_info.h:81
fawkes::BlackBoard::register_observer
virtual void register_observer(BlackBoardInterfaceObserver *observer)
Register BB interface observer.
Definition: blackboard.cpp:230
fawkes::BlackBoardInterfaceObserver
Definition: interface_observer.h:42
fawkes::Interface
Definition: interface.h:78
fawkes::BlackBoard::is_alive
virtual bool is_alive() const =0
fawkes::BlackBoard::unregister_observer
virtual void unregister_observer(BlackBoardInterfaceObserver *observer)
Unregister BB interface observer.
Definition: blackboard.cpp:245
fawkes::BlackBoard::open_for_reading
virtual Interface * open_for_reading(const char *interface_type, const char *identifier, const char *owner=NULL)=0
fawkes::BlackBoardWithOwnership::is_alive
virtual bool is_alive() const
Definition: ownership.cpp:109
fawkes::BlackBoard::open_multiple_for_reading
virtual std::list< Interface * > open_multiple_for_reading(const char *type_pattern, const char *id_pattern="*", const char *owner=NULL)=0
fawkes::BlackBoard::open_for_writing
virtual Interface * open_for_writing(const char *interface_type, const char *identifier, const char *owner=NULL)=0
fawkes::BlackBoardWithOwnership::unregister_observer
virtual void unregister_observer(BlackBoardInterfaceObserver *observer)
Unregister BB interface observer.
Definition: ownership.cpp:153
fawkes::BlackBoard::update_listener
virtual void update_listener(BlackBoardInterfaceListener *listener, ListenerRegisterFlag flag=BBIL_FLAG_ALL)
Update BB event listener.
Definition: blackboard.cpp:202
fawkes::BlackBoardWithOwnership::update_listener
virtual void update_listener(BlackBoardInterfaceListener *listener, ListenerRegisterFlag flag=BBIL_FLAG_ALL)
Update BB event listener.
Definition: ownership.cpp:128
fawkes::BlackBoardWithOwnership::open_for_writing
virtual Interface * open_for_writing(const char *interface_type, const char *identifier, const char *owner=NULL)
Definition: ownership.cpp:73