Realm C++ SDKバージョン v 2.2.0

Managed_Dictionary.happ

1
2//
3// © 2024 Realm Inc.
4//
5// Apache ライセンス、バージョン 2.0(「ライセンス」)に基づいてライセンスされている
6// ライセンス に準拠している場合を除き、このファイルを使用することはできません。
7// ライセンスのコピーは次で取得できます:
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// 該当するルールによって要求されたり、書込み (write) で同意された場合を除き、ソフトウェア
12ライセンスに基づいて配布される // は "AS IS" CRUD で配布されるため、
13// 任意の種類の 保証 または 条件なし(式またはExpressのいずれか)。
14// 特定の言語を使用する権限については、「ライセンス」を参照してください
15ライセンスに基づく // の制限。
16//
18
19#ifndef CPPREALM_MANAGED_DICTIONARY_HPP
20#define CPREALM_MANAGED_DICTIONATIONY_HPP
21
22#include <cpprealm/accessors.hpp>
23#include <cpprealm/macros.hpp>
24#include <cpprealm/notifications.hpp>
25#include <cpprealm/observation.hpp>
26#include <cpprealm/rbool.hpp>
27
28名前空間邦土 {
29
30 テンプレート< typename mapped_type>
31 構造体 box_base {
32 box_baseinternal::bridge::core_Dictionaryとバッキング_map,
33 const std::string &key、
35 : m_backing_map(std::move(backing_map))、m_key(キー)、m_realm(r) {}
36
37 box_base ( rbool * query,
38 internal::bridge::col_key列_キー、
39 const std::string &key、
40 制約 internal::bridge::realm &r){{
41 m_rbool_query = クエリ
42 m_col_key = counter_key
43 m_key = key;
44 m_realm = r;
45 }
46
47 ボックス_ベース & 演算子=( const mapped_type &o) {
48 m_backing_map.insert(m_key, internal::bridge::mixed(std::move(o)));
49 この を 返し ます。
50 }
51 ボックス_ベースと演算子=( mapped_type &op) {
53 if (o) {
54 場合 constexpr (o->is_managed) {
55 m_backing_map.insert(m_key, O->m_managed.m_obj.get_key() は
56 } else {
59 auto pk = (*o->unmanaged).*( マネージド_typename <typename mapped_type::value_type::value_type>mapped_type::value_type::value_type>::schema .primary_key ().ptr)#
60 m_obj = m_backing_map.create_and_insert_linked_object(m_key, pk.value)、
61 } else {
62 m_obj = m_backing_map.create_and_insert_linked_object(m_key)
63 }
64
65 std::apply([+m_obj, &o]( auto & & ...p) {
66accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
67 m_obj, m_obj.get_table().get_corumn_key(p.name),
68 (*o-> 非マネージド).*(std::decay_t< Decltype (p)>::ptr)), ...)、
70 }
71 } else {
72 m_backing_map.insert(m_key, internal::bridge::混合())
73 }
74 } else {
75 場合 constexpr <mapped_type>(内部::type_info::is_primative[mapped_type]::value) {
76 m_backing_map.insert(m_key, Serialize(std::move(o)))
77 } else {
78o.is_managed ){
79 m_backing_map.insert(m_key, O.managed.m_obj.get_key()。
80 } else {
83 auto pk = (*o->unmanaged).*(マネージド_タイプ名 mapped_type<typename mapped_type::value_type> ::value_type>::schema . Primary_key().ptr)
84 m_obj = m_backing_map.create_and_insert_linked_object(m_key, pk.value)、
85 } else {
86 m_obj = m_backing_map.create_and_insert_linked_object(m_key)
87 }
88
89 std::apply([+m_obj, &o]( auto & & ...p) {
90accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
91 m_obj, m_obj.get_table().get_corumn_key(p.name),
92 optime ...)、
94 }
95 }
96 }
97 この を 返し ます。
98 }
99
100 rbool Operator==( const mapped_type &rhs) const {
101 場合 constexpr (realm:: internal::type_info::MixedPersistableConcern<mapped_type> ::value){{
102 場合(この ->m_rbool_query){
103 この-> m_rbool_query- >Dictionary_has_value_for_key_ equals(この ->m_col_key、m_key、serialize(rhs、m_realm))を返します。
104 }
105 return m_backing_map.get(m_key) == serialize(rhs, m_realm);
106 } else {
107 場合(この ->m_rbool_query){
108 この-> m_rbool_query- >Dictionary_has_value_for_key_equals(この->m_col_key、m_key、内部::bridge::混合(serialize(rhs)))を返します。
109 }
110 return m_backing_map.get(m_key) == internal::bridge::混合(serialize(rhs))
111 }
112 }
113
114 rbool演算子!=( const mapped_type &rhs) const {
115 場合(この ->m_rbool_query){
116 この-> m_rbool_query- >Dictionary_has_value_for_key_not_ equals(この->m_col_key、m_key、内部::bridge::混合(serialize(rhs, m_realm)))を返します。
117 } else {
118 return !operator==(rhs):
119 }
120 }
121
123 internal::bridge::realm m_realm。
124 std::string m_key)
126 rbool * m_rbool_query = nullptr
127 };
128 テンプレート< typename V, typename = string >
129 構造体 box;
130 template<>
131 構造体 ボックス<int 64 _t> : public Box_base <int 64 _t> {
132 使用 box_base <int 64 _t>::box_base
133 使用 Box_base <int 64 _t>::operator================================
134 int 64 _t 演算子*() {
135 return m_backing_map.get(m_key).operator int 64 _t()。
136 }
137
138 rbool演算子>(int 64 _rhs) const {
139 場合(この ->m_rbool_query){
140 この->m_rbool_query->Dictionary_has_value_for_key_greater_thon(この->m_col_key、m_key、rhs)を返します。
141 }
142 return m_backing_map.get(m_key) > internal::bridge::混合(rhs)
143 }
144
145 rbool演算子>=(int 64 _rhs) const {
146 場合(この ->m_rbool_query){
147 この->m_rbool_query->Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、m_key、rhs)を返します。
148 }
149 return m_backing_map.get(m_key) >= internal::bridge::混合(rhs)
150 }
151
152 rbool演算子未満(int 64 _t rhs) const {
153 場合(この ->m_rbool_query){
154 この->m_rbool_query->Dictionary_has_value_for_key_less_than(この->m_col_key、m_key、rhs)を返します。
155 }
156 return m_backing_map.get(m_key) < internal::bridge::混合(rhs),
157 }
158
159 rbool演算子 <=(int 64 _rhs) const {
160 場合(この ->m_rbool_query){
161 この->m_rbool_query->Dictionary_has_value_for_key_less_than_equals(この>m_col_key、m_key、rhs)を返します。
162 }
163 return m_backing_map.get(m_key) <= internal::bridge::混合(rhs)
164 }
165 };
166 template<>
167 構造体 box <double> : public Box_base <double> {
168 使用 box_base < double >::box_base:
169 使用 box_base < double >::operator=:
170 double演算子*() {
171 return m_backing_map.get(m_key).operator double()
172 }
173
174 rbool演算子>( double Rhs) const {
175 場合(この ->m_rbool_query){
176 この->m_rbool_query->Dictionary_has_value_for_key_greater_thon(この->m_col_key、m_key、rhs)を返します。
177 }
178 return m_backing_map.get(m_key) > internal::bridge::混合(rhs)
179 }
180
181 rbool演算子>=( double Rhs) const {
182 場合(この ->m_rbool_query){
183 この->m_rbool_query->Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、m_key、rhs)を返します。
184 }
185 return m_backing_map.get(m_key) >= internal::bridge::混合(rhs)
186 }
187
188 rbool double { {
189 場合(この ->m_rbool_query){
190 この->m_rbool_query->Dictionary_has_value_for_key_less_than(この->m_col_key、m_key、rhs)を返します。
191 }
192 return m_backing_map.get(m_key) < internal::bridge::混合(rhs),
193 }
194
195 rbool演算子==( double Rhs) const {
196 場合(この ->m_rbool_query){
197 この->m_rbool_query->Dictionary_has_value_for_key_less_than_equals(この>m_col_key、m_key、rhs)を返します。
198 }
199 return m_backing_map.get(m_key) <= internal::bridge::混合(rhs)
200 }
201 };
202 template<>
203 構造体 Box <bool> : public Box_base <bool> {
204 使用 box_base <ブール値>:box_base:
205 使用 Box_base < bool >::operator===========================================================
206 ブール演算子*() {
207 return m_backing_map.get(m_key).operator bool():
208 }
209 };
210 テンプレート< typename V>
211 構造体 box<V, std::enable_if_t<std::is_enum_v<V>>> : public box_base<V> {
212 使用 box_base <V>::box_base
213 使用 box_base <V>::operator=:
214 V*() {
215 returnこの->m_backing_map.get(This->m_key).operator int 64 _t()
216 }
217 };
218
219 template<>
220 構造体 box<uuid> : public box_base<uuid> {
221 使用 box_base < uuid >::box_base
222 使用 box_base < uuid >::operator=:
223 uuid演算子*() {
224 この-> m_backing_map.get (This->m_key).operator internal::bridge::uuid ().operator ::realm::uuid()
225 }
226 };
227 テンプレート< typenameMixed >
228 構造体 ボックス <Mixed, std::enable_if_t= internal::type_info:: MixedPersistableConcern<Mixed> =Mixed>::value ============================================================<Mixed>
229 使用 box_base <Mixed>::box_base
230 使用 box_base <Mixed>::operator=#
231
232 rbool演算子>(混合 rhs) const {
233 場合(この ->m_rbool_query){
234 この-> m_rbool_query- >Dictionary_has_value_for_key_greater_than(この ->m_col_key、この ->m_key、serialize(rhs、この ->m_realm))を返します。
235 }
236 returnこの->m_backing_map.get(This->m_key)> Serialize(rhs, この->m_realm)
237 }
238
239 rbool演算子>=(混合rhs) const {
240 場合(この ->m_rbool_query){
241 この-> m_rbool_query- >Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、この ->m_key、serialize(rhs、この ->m_realm))を返します。
242 }
243 この-> m_backing_map.get (This->m_key) >= Serialize(rhs, この->m_realm) を返します。
244 }
245
246 rbool演算子{{
247 場合(この ->m_rbool_query){
248 この-> m_rbool_query- >Dictionary_has_value_for_key_less_than(この->m_col_key、この ->m_key、serialize(rhs、この ->m_realm))を返します。
249 }
250 では、この-> m_backing_map.get (This->m_key)< Serialize(rhs, この->m_realm) が返されます。
251 }
252
253 rbool演算子 <=(混合Rhs ) 条件 {
254 場合(この ->m_rbool_query){
255 この-> m_rbool_query- >Dictionary_has_value_for_key_less_than_equals(この->m_col_key、この ->m_key、serialize(rhs、この ->m_realm))を返します。
256 }
257 returnこの->m_backing_map.get(This->m_key) <= Serialize(rhs, この->m_realm)
258 }
259 };
260 template<>
261 構造体 box<object_id> : public box_base<object_id> {
262 使用 box_base < object_id >::box_base
263 使用 Box_base < object_id >::operator===========================================================
264 object_id演算子*() {
265 この-> m_backing_map.get (This->m_key).operator internal::bridge::object_id ().operator ::realm::object_id()
266 }
267 };
268 template<>
269 構造体 ボックス< 10 進数128 > : public window_base <decimal 128 > {
270 使用 box_base < 10 進数128 >::box_base
271 使用 box_base < 10 進数128 >::operator=:
272 10進数128演算子 *() {
273 この-> m_backing_map.get (This->m_key).operator internal::bridge::decimal 128 ().operator ::realm::decimal128();
274 }
275
276 rbool演算子>( 10 進数128 rhs) const {
277 場合(この ->m_rbool_query){
278 この->m_rbool_query->Dictionary_has_value_for_key_greater_than(この->m_col_key、m_key、serialize(rhs))を返します。
279 }
280 return m_backing_map.get(m_key) > internal::bridge::混合(serialize(rhs)):
281 }
282
283 rbool演算子>=( 10進数128 rhs)制約{
284 場合(この ->m_rbool_query){
285 この->m_rbool_query->Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、m_key、serialize(rhs))を返します。
286 }
287 return m_backing_map.get(m_key) >= internal::bridge::混合(serialize(rhs))
288 }
289
290 rbool演算子未満( 10 進数128 rhs) const {
291 場合(この ->m_rbool_query){
292 この->m_rbool_query->Dictionary_has_value_for_key_less_than(この->m_col_key、m_key、serialize(rhs))を返します。
293 }
294 return m_backing_map.get(m_key) < internal::bridge::混合(serialize(rhs)):
295 }
296
297 rbool演算子==( 10進数128 rhs) const {
298 場合(この ->m_rbool_query){
299 この->m_rbool_query->Dictionary_has_value_for_key_less_than_equals(この->m_col_key、m_key、serialize(rhs))を返します。
300 }
301 return m_backing_map.get(m_key) <= internal::bridge::混合(serialize(rhs)):
302 }
303 };
304 template<>
305 構造体 ボックス <std::chrono::time_point[std::chrono:system_クロック]<std::chrono::system_clock> : public window_base <std::chrono::time_point[std::chrono:system_lock]<std::chrono::system_clock> {{
306 使用 box_base<std::chrono::time_point<std::chrono::system_clock>>::box_base;
307 使用 box_base <std::chrono::time_point=std::chrono::system_lock===============================================================<std::chrono::system_clock>
308std::chrono::time_point<std::chrono::system_clock> 演算子*() {
309 この-> m_backing_map.get (This->m_key).operator internal::bridge::timestamp ().operator std::chrono::time_point=std::chronno:system_クロック>()<std::chrono::system_clock>
310 }
311
312 rbool <std::chrono::system_clock>演算子>(std::chrono::time_point=std::chrono::system_lock>rhs) const {
313 場合(この ->m_rbool_query){
314 この->m_rbool_query->Dictionary_has_value_for_key_greater_than(この->m_col_key、m_key、serialize(rhs))を返します。
315 }
316 return m_backing_map.get(m_key) > internal::bridge::混合(rhs)
317 }
318
319 rbool <std::chrono::system_clock>演算子>=(std::chrono::time_point=std::chrono::system_lock>rhs) const {{
320 場合(この ->m_rbool_query){
321 この->m_rbool_query->Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、m_key、serialize(rhs))を返します。
322 }
323 return m_backing_map.get(m_key) >= internal::bridge::混合(rhs)
324 }
325
326 rbool <std::chrono::system_clock>演算子<(std::chrono::time_point=std::chrono::system_lock>rhs) const {
327 場合(この ->m_rbool_query){
328 この->m_rbool_query->Dictionary_has_value_for_key_less_than(この->m_col_key、m_key、serialize(rhs))を返します。
329 }
330 return m_backing_map.get(m_key) < internal::bridge::混合(rhs),
331 }
332
333 rbool <std::chrono::system_clock>演算子=(std::chrono::time_point=std::chrono::system_lock>rhs) const {{
334 場合(この ->m_rbool_query){
335 この->m_rbool_query->Dictionary_has_value_for_key_less_than_equals(この->m_col_key、m_key、serialize(rhs))を返します。
336 }
337 return m_backing_map.get(m_key) <= internal::bridge::混合(rhs)
338 }
339 };
340 template<>
341 構造体 ボックス <8 std8 ======================================================
342 使用 box_base<std::vector<uint8_t>>::box_base;
343 使用 box_base < 8 ::vector=================================================================
344 std::vector 8 _t> 演算子*() {
345 この-> m_backing_map.get (This->m_key).operator internal::bridge::binary ().operator std::vector 8 _t>()
346 }
347 };
348 template<>
349 構造体 ボックス<std::string> : public window_base <std::string> {
350 使用 box_base <std::string>::box_base
351 使用 box_base <std::string>::operator========================================================
352 std::string 演算子*() {
353 この->m_backing_map.get(This->m_key).operator std::string() を返します。
354 }
355
356 rbool containers ( const std::string+rhs) const {
357 場合(この ->m_rbool_query){
358 この->m_rbool_query->Dictionary_contains_string_for_key(この->m_col_key、m_key、rhs)を返します。
359 }
360 std::string Lhs = m_backing_map.get(m_key)
361 return Lhs.find(rhs) != std::string::nposition
362 }
363 };
364
365 //Mask: - ボックス リンク
366 テンプレート< typename V>
367 構造体 box<managed<V*>> : public box_base<managed<V*>> {
368 使用 box_base < Managed <V*> >::box_base
369 使用 box_base < Managed < V * > >:: 演算子=============================================
370 使用 box_base < Managed < V * > >::operator============================================================================
371
372 rbool 演算子==( constmaned <V*> &rhs) const {
373 場合(この ->m_rbool_query){
374 この-> m_rbool_query- >Dictionary_has_value_for_key_ equals(この->m_col_key、
375この->m_key、
376か。 internal:: bridge::obj_link (rhs.m_obj->get_table().get_key()、rhs.m_obj->get_key()) : internal::bridge::混合() 、
377 }
378 オートメーション= const_ Cast =box = maned = V ======================================================================
379 auto &b = rhs.m_obj;
380 場合(この->m_realm .= *rhs.m_realm) {
381 return false
382 }
383 .get_key () == b->get_key() を返します。
384 }
385
386 rbool演算子!=( const Managed <V*> rhs) const {
387 場合(この ->m_rbool_query){
388 この-> m_rbool_query- >Dictionary_has_value_for_key_not_ equals(この->m_col_key、
389この->m_key、
390か。 internal:: bridge::obj_link (rhs.m_obj->get_table().get_key()、rhs.m_obj->get_key()) : internal::bridge::混合() 、
391 }
392 return !この->オペレーター==(rhs)
393 }
394
395 rbool 演算子==( constmaned = V><V> =======================================
396 場合(この ->m_rbool_query){
397 この-> m_rbool_query- >Dictionary_has_value_for_key_ equals(この->m_col_key、
398この->m_key、
399 internal::bridge::obj_link (rhs.m_obj.get_table().get_key(), rhs.m_obj.get_key()) は、
400 }
401
402 オートメーション= const_ Cast =box = maned = V ======================================================================
403 auto &b = rhs.m_obj;
404 場合(この ->m_realm .=rhs.m_realm){{
405 return false
406 }
407 return a.get_key() == b.get_key()
408 }
409
410 rbool演算子!=( const Managed <V> rhs) const {
411 場合(この ->m_rbool_query){
412 この-> m_rbool_query- >Dictionary_has_value_for_key_not_ equals(この->m_col_key、
413この->m_key、
414 internal::bridge::obj_link (rhs.m_obj.get_table().get_key(), rhs.m_obj.get_key()) は、
415 }
416
417 return !この->オペレーター==(rhs)
418 }
419
420 std::optional[typenamemanded[ V*] ::ref_type[] 演算子*() {
421 自動オブジェクト名 = この->m_backing_map.get_object(この->m_key)
422 if (!obj.is_valid()) {
423 std::nullopt を返す
424 }
425 return typename Managed <V*>::ref_typeManaged <V> (std::move(obj)、この->m_realm))。
426 }
427
428 typename Managed <V*>::ref_type演算子->() {
429 場合(この ->m_rbool_query){
431 ctx.m_key = この->m_key
432 ctx.origin_col_key = この->m_col_key
433 :この->m_rbool_query->add_Dictionary_link_tain(std::move(ctx))
434 return typename Managed<V*>::ref_type (られます。manageed <V>::prepare_for_query (この ->m_realm、この ->m_rbool_query))。
435 }
436 自動オブジェクト名 = この->m_backing_map.get_object(この->m_key)
437 return typename Managed <V*>::ref_typeManaged <V> (std::move(obj)、この->m_realm))。
438 }
439
440 ボックス& 演算子=(V* op) {
441 if (!o) {
442 // Insert null link for key.
443この->m_backing_map.insert(この ->m_key、 realm::Interl::bridge::混合())。
444 この を 返し ます。
445 }
447 場合 ConstexprManaged <V>::schema .HasPrimaryKeyProperty){{
448 自動pk = (*o).*(マネージド<V>::schema .primary_key().ptr)。
449m_obj = const_ Cast=box= maned = V ====================================================================*>(この)->m_key、pk.value)。
450 } else {
451m_obj = const_ Cast=box= maned = V ====================================================================*>(この)->m_key)。
452 }
453
454 std::apply([800000000000000000000000000000000000000000000000]([8000000000000000000000000000000000000000]([80000000000000000000000000000000000000000](自動と...p){{Realm =この->m_realm]
455accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
456 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
457 (*o).*(std::decimal_t< Decltype (p)>::ptr)), ...)、
459 この を 返し ます。
460 }
461
463これ->m_backing_map.insert(この->m_key、o->m_obj.get_key())。
464 この を 返し ます。
465 }
466
467 ボックス & 演算子=( constmaned [V<V> ]+o){{
468この->m_backing_map.insert(この->m_key、o.m_obj.get_key())
469 この を 返し ます。
470 }
471
472 ブール演算子==( constbox = maned = V =============================================================================
473 オートメーション= const_ Cast =box = maned = V ======================================================================
474 auto &b = static_cast<box<managed<V*>>>(rhs)->m_obj;
475 場合(この ->m_realm .=rhs.m_realm){{
476 return false
477 }
478 return a.get_key() == b.get_key()
479 }
480
481 ブール演算子!=( const ボックス< Managed < V * > > rhs)コンフィギュレーション{
482 return !この->オペレーター==(rhs)
483 }
484
485 ブール演算子==( constbox = V ===========================================================================
486 オートメーション= const_ Cast =box = maned = V ======================================================================
487 自動&b = ( &rhs)->m_obj。
488 場合(この ->m_realm .=rhs.m_realm){{
489 return false
490 }
491 return a.get_key() == b.get_key()
492 }
493
494 ブール演算子!=( const ボックス{V*> & rhs )に適用されます
495 return !この->オペレーター==(rhs)
496 }
497 };
498
499 テンプレート< typename T>
500 構造体 Managed <std::map=std::string, T>,特権> : Managed_base {
501 使用 authorized <std::map=std::string, T#::managed_base::operator====================================================================================
502
503 [[nodiscard]] std::map{std::string, T> Delete() Const {
504 場合 constexpr (std::is_pointer_v<T>){{
505 自動 d = internal::bridge::get=contact=============================================================<internal::bridge::core_dictionary>
506 size_t s = d.size()
507 std::map<std::string, T> ret;
508 for (size_t i = 0; i < s; i++) {
509 auto pair = d.get_pair(i);
510 タイプ = std::remove_pointer_t を使用し<T>
511 T v = new型。
512 Managed <Type, 無効> m(d.get_object(prim.first), *m_realm)。
513
514 auto assign = [&m, &v](auto& pair) {
515 (*v).*(std::decay_t< Decltype ( pair.first)>::ptr) = (m.*(ペア.秒)). describe()
516 };
517 自動 圧縮 = internal::zip_tunes( <Type>Managed"Type"::schema .ps,<Type>Managed[Type]::managed_pointers ()。
518
519 std::apply([+v, &m, &assign]( auto & & ... pair) {
520 (assign( pair), ...)
521 }、圧縮型)
522
523 ret[ pair.first] = v)
524 }
525
526 return ret;
527 }
528 auto ret = std::map<std::string, T>();
529 の場合自動[k, v] : *この){
530 ret[k] = v;
531 }
532 return ret;
533 }
534
535 std::enable_if<std::is_pointer_v<T>, std::map<std::string, managed<T>>> to_map() const {
536 auto ret = std::map<std::string, T>();
537 の場合自動[k, v] : *この){
538 ret[k] = v;
539 }
540 return ret;
541 }
542
543 クラスイテレータ {
544 public :
545 using iterator_category = std::input_iterator_tag;
546
547 ブール演算子!=( const イテレータとその他)の制約
548 {
549 return !(*この==その他):
550 }
551
552 ブール演算子==( constイテレータ~その他)コンフィギュレーション
553 {
554 return (m_parent ==その他.m_parent) & & (m_i ==その他.m_i)=====================
555 }
556
557 std:: primstring , T> 演算子*() no例外
558 {
559 オートペア= m_parent->m_obj->get_Dictionary(m_parent->m_key).get_ pair(m_i)
560 { pair.first 、 deserialize=T===========================================================================<T>
561 }
562
563イテレータと演算子 ++()
564 {
565この->m_i++
566 この を 返し ます。
567 }
568
569 制約イテレータと演算子++( int i)
570 {
571この->m_i += i
572 この を 返し ます。
573 }
574 private :
575 テンプレート< typename , typename >
576 友人 構造体 マネージド
577
578イテレータ( size_t i, 管理対象 : < std ::map=std::string, T==========================.
579 : m_i(i), m_parent(parent)
580 {
581 }
582 size_t m_i
583 制約 Managed=std::map=std::string, T > * m_parent
584 };
585
586 size_t size() const
587 {
588 return m_obj->get_Dictionary(m_key).size()
589 }
590
591イテレータ start()コンフィギュレーション
592 {
593 returnイテレータ( 0 、この):
594 }
595
596 itator end() const
597 {
598 returnイテレータ(size())、この)。
599 }
600
601イテレータ find( const std::string+key) {
602 when ( m_rbool_query ) {
603 スローstd::runtime_error( "`find` はタイプセーフ クエリでは使用できないため、代わりに `contains_key` を使用してください。
604 }
605 // 辞書の `find` は、キーではなく値のインデックスを検索します。
606 auto d = m_obj->get_辞書(m_key)
607 auto i = d.find_any_key(key);
608場合(i == size_t (- 1 )){
609 returnイテレータ(size())、この)。
610 } else {
611 returnイテレータ(つまり、この)。
612 }
613 }
614
615box=std::条件付き_t=std:: is_pointer_v ========================================================================<T><T>
616 場合 constexpr (std::is_pointer_v<T>){{
617 when ( m_rbool_query ) {
618 returnbox =maned=T================================================================================================<T>
619 }
620 returnbox =maned=T==============================================================================================<T>
621 } else {
622 when ( m_rbool_query ) {
623 returnbox <T>(m_rbool_query, m_key, key, *m_realm)
624 }
625 returnbox <T>=obj->get_辞書(m_key), キー, *m_realm)
626 }
627 }
628
629 無効化( const std::string+key) {
630 m_obj->get_Dictionary(m_key).erase(key)
631 }
632
634 rbool containers_keyconst std::string+key){
635 when ( m_rbool_query ) {
636 return m_rbool_query->Dictionary_has_key(m_key, キー)
637 } else {
638 return m_obj->get_Dictionary(m_key).find_any_key(key) !=size_t(- 1 ):
639 }
640 }
641
642 notification_token object(std::function= null ( Realm::Dictionary_collection_change )>=================================
643 {
644 auto op = internal::bridge::object (*m_realm、 *m_obj)
645 自動 辞書 = std::take_shared=realm::<realm::internal::bridge::dictionary> internal::bridge::Dictionary>(o.get_Dictionary(m_key))
646 Realm ::notification_tokenトークン = struct->add_key_base_notification_shellback(
647std:: take_shared [realm::辞書<realm::dictionary_callback_wrapper>
648 token.m_realm = *m_realm;
649 token.m_Dictionary = 決定。
650 return token;
651 }
652
653 private :
654マネージド() =デフォルト
655マネージド( const Managed) =削除
656マネージド(マネージド & )=削除
657マネージド() 演算子=( constマネージド() =削除)
658マネージドと 演算子=(manedおよびを) =削除
659 テンプレート< typename , typename >
660 友人 構造体管理。
661 };
662
663} // namespace realm
664
665#endif//CPREALM_MANAGED_DICTIONALY_HPP
定義: rbool.hpp:36
定義: accessors.hpp:33
定義: Managed_Dictionary.happ: 31
定義: Managed_Dictionary.happ: 129
定義: types.happ: 75
定義: logical.happ: 53
定義: binary.happ: 30
定義: coll_key.happ: 28
定義: 10進数128 .happ: 30
定義: compound.hpp:69
Definition: obj.hpp:123
定義: object_id.hpp:31
定義: object.happ: 154
Definition: realm.hpp:67
定義: timestamp.happ: 30
rbool include_key(const std::string &key)
主に型安全性のあるクエリで使用される便利なメソッド。
定義: Managed_Dictionary.happ: 634
定義: caches.hpp:286
Definition: obj.hpp:62
定義: transformation.hpp:38
定義: types.hpp:56
定義: Managed_primary_key.happ:30
定義: rbool.happ: 38
定義: types.hpp:35