PDI 1.4.0-alpha.2021-08-04.09fd084

the PDI data interface

callbacks.h
1 /*******************************************************************************
2  * Copyright (C) 2020 Institute of Bioorganic Chemistry Polish Academy of Science (PSNC)
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of CEA nor the names of its contributors may be used to
13  * endorse or promote products derived from this software without specific
14  * prior written permission.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  ******************************************************************************/
24 
25 #ifndef PDI_CALLBACKS_H_
26 #define PDI_CALLBACKS_H_
27 
28 #include <functional>
29 #include <map>
30 #include <list>
31 #include <string>
32 
33 #include "pdi/pdi_fwd.h"
34 #include "pdi/ref_any.h"
35 
36 namespace PDI {
37 
38 class PDI_EXPORT Callbacks
39 {
40 
42  Context& m_context;
43 
49  std::list<std::function<void()>> m_init_callbacks;
50 
56  std::list<std::function<void(const std::string&, Ref)>> m_data_callbacks;
57 
63  std::multimap<std::string, std::function<void(const std::string&, Ref)>> m_named_data_callbacks;
64 
70  std::list<std::function<void(const std::string&, Ref)>> m_data_remove_callbacks;
71 
77  std::multimap<std::string, std::function<void(const std::string&, Ref)>> m_named_data_remove_callbacks;
78 
84  std::list<std::function<void(const std::string&)>> m_event_callbacks;
85 
91  std::multimap<std::string, std::function<void(const std::string&)>> m_named_event_callbacks;
92 
98  std::list<std::function<void(const std::string&)>> m_empty_desc_access_callbacks;
99 
105  std::multimap<std::string, std::function<void(const std::string&)>> m_named_empty_desc_access_callbacks;
106 
107 public:
108 
109  Callbacks(Context& ctx);
110 
117  std::function<void()> add_init_callback(const std::function<void()>& callback);
118 
126  std::function<void()> add_data_callback(const std::function<void(const std::string&, Ref)>& callback, const std::string& name = {});
127 
135  std::function<void()> add_data_remove_callback(const std::function<void(const std::string&, Ref)>& callback, const std::string& name = {});
136 
144  std::function<void()> add_event_callback(const std::function<void(const std::string&)>& callback, const std::string& name = {});
145 
153  std::function<void()> add_empty_desc_access_callback(const std::function<void(const std::string&)>& callback, const std::string& name = {});
154 
156  void call_init_callbacks() const;
157 
162  void call_data_callbacks(const std::string& name, Ref ref) const;
163 
168  void call_data_remove_callbacks(const std::string& name, Ref ref) const;
169 
173  void call_event_callbacks(const std::string& name) const;
174 
178  void call_empty_desc_access_callbacks(const std::string& name) const;
179 
180 };
181 
182 } // namespace PDI
183 
184 
185 #endif //PDI_CALLBACKS_H_
Definition: context.h:44
A dynamically typed reference to data with automatic memory management and read/write locking semanti...
Definition: pdi_fwd.h:85
Definition: callbacks.h:38
Definition: array_datatype.h:37