22 #include "hazelcast/client/exception/protocol_exceptions.h"
23 #include "hazelcast/util/Util.h"
24 #include "hazelcast/util/Comparator.h"
25 #include "hazelcast/client/query/predicates.h"
26 #include "hazelcast/client/query/entry_comparator.h"
28 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
30 #pragma warning(disable : 4251)
38 struct paging_predicate_holder;
51 enum struct HAZELCAST_API iteration_type
67 static const std::string IterationNames[] = {
"KEY",
"VALUE",
"ENTRY" };
71 std::vector<int32_t> page_list;
72 std::vector<std::pair<serialization::pimpl::data,
73 boost::optional<serialization::pimpl::data>>>
115 template<
typename K,
typename V>
121 friend protocol::codec::holder::paging_predicate_holder;
132 iteration_type_ = iteration_type::VALUE;
133 anchor_data_list_.page_list.clear();
134 anchor_data_list_.data_list.clear();
153 iteration_type get_iteration_type()
const {
return iteration_type_; }
155 void set_iteration_type(iteration_type type) { iteration_type_ = type; }
157 size_t get_page()
const {
return page_; }
159 void set_page(
size_t page_number) { page_ = page_number; }
161 size_t get_page_size()
const {
return page_size_; }
163 const query::entry_comparator<K, V>* get_comparator()
const
165 return comparator_.get();
168 void set_anchor_data_list(anchor_data_list anchor_data_list)
170 anchor_data_list_ = std::move(anchor_data_list);
174 anchor_data_list anchor_data_list_;
175 std::shared_ptr<query::entry_comparator<K, V>> comparator_;
176 serialization::object_data_output out_stream_;
179 iteration_type iteration_type_;
180 boost::optional<serialization::pimpl::data> comparator_data_;
181 boost::optional<serialization::pimpl::data> predicate_data_;
193 serialization::pimpl::SerializationService& serialization_service,
194 size_t predicate_page_size)
195 : out_stream_(serialization_service.new_output_stream())
196 , page_size_(predicate_page_size)
198 , iteration_type_(iteration_type::VALUE)
200 out_stream_.write_object<
bool>(
nullptr);
201 out_stream_.write_object<
bool>(
nullptr);
216 template<
typename INNER_PREDICATE>
218 serialization::pimpl::SerializationService& serialization_service,
219 size_t predicate_page_size,
220 const INNER_PREDICATE& predicate)
221 : out_stream_(serialization_service.new_output_stream())
222 , page_size_(predicate_page_size)
224 , iteration_type_(iteration_type::VALUE)
226 out_stream_.write_object(predicate);
227 out_stream_.write_object<
bool>(
nullptr);
229 serialization_service.to_data<INNER_PREDICATE>(predicate);
242 template<
typename COMPARATOR>
244 serialization::pimpl::SerializationService& serialization_service,
246 size_t predicate_page_size)
247 : out_stream_(serialization_service.new_output_stream())
248 , page_size_(predicate_page_size)
250 , iteration_type_(iteration_type::VALUE)
252 out_stream_.write_object<
bool>(
nullptr);
253 out_stream_.write_object(comp);
254 comparator_data_ = serialization_service.to_data<COMPARATOR>(comp);
256 std::make_shared<COMPARATOR>(std::forward<COMPARATOR>(comp));
272 template<
typename INNER_PREDICATE,
typename COMPARATOR>
274 serialization::pimpl::SerializationService& serialization_service,
275 const INNER_PREDICATE& predicate,
277 size_t predicate_page_size)
278 : out_stream_(serialization_service.new_output_stream())
279 , page_size_(predicate_page_size)
281 , iteration_type_(iteration_type::VALUE)
283 out_stream_.write_object(predicate);
284 out_stream_.write_object(comp);
286 serialization_service.to_data<INNER_PREDICATE>(predicate);
287 comparator_data_ = serialization_service.to_data<COMPARATOR>(comp);
289 std::make_shared<COMPARATOR>(std::forward<COMPARATOR>(comp));
294 namespace serialization {
295 template<
typename K,
typename V>
304 return static_cast<int32_t
>(
305 query::predicate_data_serializer_hook::F_ID);
313 return static_cast<int32_t
>(
314 query::predicate_data_serializer_hook::PAGING_PREDICATE);
324 out.write_bytes(obj.outStream.toByteArray());
325 out.write<int32_t>((int32_t)obj.page);
326 out.write<int32_t>((int32_t)obj.pageSize);
327 out.write<std::string>(
328 obj.IterationNames[
static_cast<int32_t
>(obj.iterationType)]);
329 out.write<int32_t>((int32_t)obj.anchor_data_list_.data_list.size());
330 const auto& data_list = obj.anchor_data_list_.data_list;
331 const auto& page_list = obj.anchor_data_list_.page_list;
332 for (
size_t i = 0; i < obj.anchor_data_list_.data_list.size(); ++i) {
333 out.write<int32_t>(page_list[i]);
334 out.write_object<K>(data_list[i].first);
335 out.write_object<V>(data_list[i].second);
345 BOOST_THROW_EXCEPTION(exception::hazelcast_serialization(
346 "readData",
"Client should not need to use readdata method!!!"));
354 #if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
Concurrent, distributed, observable and queryable map client.
NOTE: paging_predicate can only be used with values(), keySet() and entries() methods!...
void next_page()
sets the page value to next page
void reset()
resets for reuse
void previous_page()
sets the page value to previous page
This is a marker class for Predicate classes.
static query::paging_predicate< K, V > read_data(object_data_input &in)
Should not be called at the client side!
static constexpr int32_t get_factory_id() noexcept
static void write_data(const query::paging_predicate< K, V > &obj, object_data_output &out)
Defines how this class will be written.
static constexpr int32_t get_class_id() noexcept
Classes derived from this class should implement the following static methods: static int32_t get_cla...