Hazelcast C++ Client
Hazelcast C++ Client Library
Loading...
Searching...
No Matches
entry_listener.h
1/*
2 * Copyright (c) 2008-2025, Hazelcast, Inc. All Rights Reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include <functional>
20#include <utility>
21
22#include "hazelcast/util/noop.h"
23#include "hazelcast/client/entry_event.h"
24#include "hazelcast/util/type_traits.h"
25
26namespace hazelcast {
27namespace client {
28class imap;
29class map_event;
30class replicated_map;
31namespace impl {
32template<typename>
33class EntryEventHandler;
34}
35
49class entry_listener final
50{
51public:
57 template<typename Handler,
58 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
59 entry_listener& on_added(Handler&& h) &
60 {
61 added_ = std::forward<Handler>(h);
62 add_flag(entry_event::type::ADDED);
63 return *this;
64 }
65
69 template<typename Handler,
70 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
71 entry_listener&& on_added(Handler&& h) &&
72 {
73 on_added(std::forward<Handler>(h));
74 return std::move(*this);
75 }
76
82 template<typename Handler,
83 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
84 entry_listener& on_removed(Handler&& h) &
85 {
86 removed_ = std::forward<Handler>(h);
87 add_flag(entry_event::type::REMOVED);
88 return *this;
89 }
90
94 template<typename Handler,
95 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
96 entry_listener&& on_removed(Handler&& h) &&
97 {
98 on_removed(std::forward<Handler>(h));
99 return std::move(*this);
100 }
101
107 template<typename Handler,
108 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
110 {
111 updated_ = std::forward<Handler>(h);
112 add_flag(entry_event::type::UPDATED);
113 return *this;
114 }
115
119 template<typename Handler,
120 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
121 entry_listener&& on_updated(Handler&& h) &&
122 {
123 on_updated(std::forward<Handler>(h));
124 return std::move(*this);
125 }
126
132 template<typename Handler,
133 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
135 {
136 evicted_ = std::forward<Handler>(h);
137 add_flag(entry_event::type::EVICTED);
138 return *this;
139 }
140
144 template<typename Handler,
145 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
146 entry_listener&& on_evicted(Handler&& h) &&
147 {
148 on_evicted(std::forward<Handler>(h));
149 return std::move(*this);
150 }
151
157 template<typename Handler,
158 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
160 {
161 expired_ = std::forward<Handler>(h);
162 add_flag(entry_event::type::EXPIRED);
163 return *this;
164 }
165
169 template<typename Handler,
170 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
171 entry_listener&& on_expired(Handler&& h) &&
172 {
173 on_expired(std::forward<Handler>(h));
174 return std::move(*this);
175 }
176
182 template<typename Handler,
183 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
184 entry_listener& on_merged(Handler&& h) &
185 {
186 merged_ = std::forward<Handler>(h);
187 add_flag(entry_event::type::MERGED);
188 return *this;
189 }
190
194 template<typename Handler,
195 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
196 entry_listener&& on_merged(Handler&& h) &&
197 {
198 on_merged(std::forward<Handler>(h));
199 return std::move(*this);
200 }
201
207 template<typename Handler,
208 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
210 {
211 map_evicted_ = std::forward<Handler>(h);
212 add_flag(entry_event::type::EVICT_ALL);
213 return *this;
214 }
215
219 template<typename Handler,
220 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
222 {
223 on_map_evicted(std::forward<Handler>(h));
224 return std::move(*this);
225 }
226
232 template<typename Handler,
233 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
235 {
236 map_cleared_ = std::forward<Handler>(h);
237 add_flag(entry_event::type::CLEAR_ALL);
238 return *this;
239 }
240
244 template<typename Handler,
245 typename = util::enable_if_rvalue_ref_trait<Handler&&>>
247 {
248 on_map_cleared(std::forward<Handler>(h));
249 return std::move(*this);
250 }
251
252private:
253 using EntryHandlerType = std::function<void(entry_event&&)>;
254 EntryHandlerType added_ = util::noop<entry_event&&>,
255 removed_ = util::noop<entry_event&&>,
256 updated_ = util::noop<entry_event&&>,
257 evicted_ = util::noop<entry_event&&>,
258 expired_ = util::noop<entry_event&&>,
259 merged_ = util::noop<entry_event&&>;
260
261 using MapHandlerType = std::function<void(map_event&&)>;
262 MapHandlerType map_evicted_ = util::noop<map_event&&>,
263 map_cleared_ = util::noop<map_event&&>;
264
265 int32_t flags_ = 0;
266
267 void add_flag(entry_event::type t) { flags_ |= static_cast<int32_t>(t); }
268
269 template<typename>
270 friend class impl::EntryEventHandler;
271 friend class replicated_map;
272 friend class imap;
273};
274} // namespace client
275} // namespace hazelcast
Map entry listener to get notified when a map entry is added, removed, updated, evicted,...
entry_listener & on_evicted(Handler &&h) &
Set an handler function to be invoked when an entry is evicted.
entry_listener & on_expired(Handler &&h) &
Set an handler function to be invoked when an entry is expired.
entry_listener && on_evicted(Handler &&h) &&
Set an handler function to be invoked when an entry is evicted.
entry_listener & on_removed(Handler &&h) &
Set an handler function to be invoked when an entry is removed.
entry_listener && on_map_evicted(Handler &&h) &&
Set an handler function to be invoked when all entries are evicted by imap::evict_all.
entry_listener && on_removed(Handler &&h) &&
Set an handler function to be invoked when an entry is removed.
entry_listener & on_added(Handler &&h) &
Set an handler function to be invoked when an entry is added.
entry_listener & on_merged(Handler &&h) &
Set an handler function to be invoked after a WAN replicated entry is merged.
entry_listener && on_expired(Handler &&h) &&
Set an handler function to be invoked when an entry is expired.
entry_listener && on_added(Handler &&h) &&
Set an handler function to be invoked when an entry is added.
entry_listener & on_map_cleared(Handler &&h) &
Set an handler function to be invoked when all entries are removed by imap::clear.
entry_listener && on_updated(Handler &&h) &&
Set an handler function to be invoked when an entry is updated.
entry_listener & on_map_evicted(Handler &&h) &
Set an handler function to be invoked when all entries are evicted by imap::evict_all.
entry_listener && on_map_cleared(Handler &&h) &&
Set an handler function to be invoked when all entries are removed by imap::clear.
entry_listener && on_merged(Handler &&h) &&
Set an handler function to be invoked after a WAN replicated entry is merged.
entry_listener & on_updated(Handler &&h) &
Set an handler function to be invoked when an entry is updated.
Concurrent, distributed, observable and queryable map client.
Definition imap.h:63
Map events common contract.
Definition map_event.h:36