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

Managed_set.hpp

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_SET_HPP
20#deify CPREALM_MANAGED_Set_HPP
21
22#include <cpprealm/macros.hpp>
23#include <cpprealm/notifications.hpp>
24#include <cpprealm/observation.hpp>
25#include <cpprealm/types.hpp>
26
27#include <set>
28
29名前空間邦土 {
30
31 テンプレート< typename T>
32 構造体 <T>ped:::enable_if_t[ internal:: type_info ::is_primative[T]<T> ::value ] : Managed_base {
33 使用 Managed <T><std::set[T]::managed_base::operator=========================================
34 value_type = Tを使用する
35
36 クラスイテレータ {
37 public :
38 value_type = Tを使用する
39
40 duration_type = std::ptdiff_tを使用します。
41 ポインター = T*を使用し
42 参照 = T &を使用する
43 イテレータ_カテゴリ = std::forward_itemもの_タグを使用する
44
45 ブール演算子!=( const イテレータとその他)の制約
46 {
47 return !(*この==その他):
48 }
49
50 ブール演算子==( constイテレータ~その他)コンフィギュレーション
51 {
52 return (m_parent ==その他.m_parent) & & (m_i ==その他.m_i)=====================
53 }
54
55 T*()演算子は例外をスローします
56 {
57 オートs = Realm :: internal::bridge::set (*m_parent->m_realm、*m_parent->m_obj、m_parent->m_key)
58 returndeserialize<T> =T==s.get_any(m_i))=================.
59 }
60
61イテレータと演算子 ++()
62 {
63この->m_i++
64 この を 返し ます。
65 }
66
67 制約イテレータと演算子++( int i)
68 {
69この->m_i += i
70 この を 返し ます。
71 }
72 private :
73 テンプレート< typename , typename >
74 友人 構造体 マネージド
75
76反復子( size_t i、 管理対象 : <std::set===========================================================<T>
77 : m_i(i), m_parent(parent)
78 {
79 }
80 size_t m_i
81 Managed=std::set=T<T> ==========================================================================
82 };
83イテレータ start()
84 {
85 returnイテレータ( 0 、この):
86 }
87
88イテレータ end()
89 {
90 returnイテレータ(size())、この)。
91 }
92 [[nodiscard]] std::set<T> Delete() Const {
93 オートセット = Realm :: internal::bridge::set (*m_realm, *m_obj, m_key)
94 auto ret = std::set<T>();
95 の場合size_t i = 0 、i < set.size()、i++) {{
96 ret.insert(deserialize<T>(set.get_any(i)));
97 }
98 return ret;
99 }
100
101 Realm::notification_token describe (std::function= null::collection_change )>============================================
102 オート セット = std::take_shared<realm::internal::bridge::set> (*m_realm, *m_obj, m_key)
103 Realm ::notification_tokenトークン = set->add_notification_colback(
104std::take_shared{realm::collection_customback_ wrapper>(<realm::collection_callback_wrapper>
105 std::move(fn),
106 false ))。
107 token.m_realm = *m_realm;
108 token.m_set = set;
109 return token;
110 }
111
112 無効化(制約イテレータとそれ)
113 {
114 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
115 set.remove(serialize(*it))
116 }
117
118 std::pear[literal,bool]> insert( const T & v)
119 {
120 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
121 場合 constexpr (内部::type_info::MixedPersistableConcern<T>::value) {
122std::p pair=size_t,bool>res = set.insert(serialize=T>(v))<T>
123 返される std::pear=itator,bool>(イテレータ(res.first, この)、 . 秒)。
124 } else {
125 std::p pair=size_t,bool>res = set.insert(v)
126 返される std::pear=itator,bool>(イテレータ(res.first, この)、 . 秒)。
127 }
128 }
129
130イテレータ挿入( constイテレータと、 const T= v)
131 {
132 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
133 std::p pair=size_t,bool>res = set.insert(v)
134 リターンイテレータ(res.first、 この)、
135 }
136
137 iterator find( const T & v)
138 {
139 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
140 size_t idx = set.find(serialize(v))
141 (idx ==realm:: not_in_collection
142 returnイテレータ(size())、この)。
143 returnイテレータ(idx,この)
144 }
145 id clear(){
146 internal::bridge::set(*m_realm, *m_obj, m_key).remove_all()
147 }
148
149 size_t size()
150 {
151 return internal::bridge::set(*m_realm, *m_obj, m_key).size()
152 }
153
154 private :
155マネージド() =デフォルト
156マネージド( const Managed) =削除
157マネージド(マネージド & )=削除
158マネージド() 演算子=( constマネージド() =削除)
159マネージドと 演算子=(manedおよびを) =削除
160 テンプレート< typename , typename >
161 友人 構造体管理。
162 };
163
164 テンプレート< typename T>
166 使用 authorized <std::set=T*========================================================================
167 使用 value_type = Managed<T>
168
169 クラスイテレータ {
170 public :
171 使用 value_type = Managed<T>
172
173 duration_type = std::ptdiff_tを使用します。
174 ポインター = T*を使用し
175 参照 = T &を使用する
176 イテレータ_カテゴリ = std::forward_itemもの_タグを使用する
177
178 ブール演算子!=( const イテレータとその他)の制約
179 {
180 return !(*この==その他):
181 }
182
183 ブール演算子==( constイテレータ~その他)コンフィギュレーション
184 {
185 return (m_parent ==その他.m_parent) & & (m_i ==その他.m_i)=====================
186 }
187
188 <T>マネージド 演算子*() は例外をスローします
189 {
190 オートs = Realm :: internal::bridge::set (*m_parent->m_realm、*m_parent->m_obj、m_parent->m_key)
191 Managed <T> m(s.get_obj(m_i), *m_parent->m_realm)
192 return {std::move(m)} を返す
193 }
194
195イテレータと演算子 ++()
196 {
197この->m_i++
198 この を 返し ます。
199 }
200
201 制約イテレータと演算子++( int i)
202 {
203この->m_i += i
204 この を 返し ます。
205 }
206 private :
207 テンプレート< typename , typename >
208 友人 構造体 マネージド
209
210イテレータ( size_t i、管理対象: <std::set=T================================================
211 : m_i(i), m_parent(parent)
212 {
213 }
214 size_t m_i
215 Managed=std::set=T ==================================================================================================
216 };
217イテレータ start()
218 {
219 returnイテレータ( 0 、この):
220 }
221
222イテレータ end()
223 {
224 returnイテレータ(size())、この)。
225 }
226 [[nodiscard]] std::set<T*> Delete() Const {
227 オートs = Realm :: internal::bridge::set (*m_realm、*m_obj、m_key)
228 size_t count = s.size()
229 (カウント == 0 )の場合
230 return std::set=T*================================================
231 auto ret = std::set<T*>();
232 for(size_t i = 0; i < count; i++) {
233 Managed<T> m(s.get_obj(i), *m_realm)
234 T* v = new T():
235 auto assign = [&m, &v](auto& pair) {
236 (*v).*(std::decay_t< Decltype ( pair.first)>::ptr) = (m.*(ペア.秒)). describe()
237 };
238 自動圧縮 = internal::zip_tunes(managed<T>::schema.ps、 <T>Managed[T]::managed_pointers():
239 std::apply([+v, &m, &assign]( auto & & ... pair) {
240 (assign( pair), ...)
241 }、圧縮型)
242
243 ret.insert(v);
244 }
245 return ret;
246 }
247
248 Realm::notification_token describe (std::function= null::collection_change )>============================================
249 オート セット = std::take_shared<realm::internal::bridge::set> (*m_realm, *m_obj, m_key)
250 Realm ::notification_tokenトークン = set->add_notification_colback(
251std::take_shared{realm::collection_customback_ wrapper>(<realm::collection_callback_wrapper>
252 std::move(fn),
253 false ))。
254 token.m_realm = *m_realm;
255 token.m_set = set;
256 return token;
257 }
258
259 無効化(制約イテレータとそれ)
260 {
261 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
262 set.remove(it.operator*().m_obj.get_key())
263 }
264
265 std::p pair[literal, ブール値] insert(T* 値)
266 {
267 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
268 auto table = m_obj->get_target_table(m_key);
269 internal::bridge::obj m_obj
270 場合 Constexpr (managed<T>::schema.HasPrimaryKeyProperty){{
271 自動pk = (*値).*(managed<T>::schema.primary_key().ptr)
272 m_obj =table.create_object_with_primary_key( realm:: internal::bridge::混合(serialize(pk.value)))
273 } else {
274 m_obj =table.create_object()
275 }
276 std::apply([800000000000000000000000000000000000000000000]([80000000000000000000000000000000000000000000000000000000000]( autoと ...p) {
277 (accessor= typename std::decay_t =decimaltype (p)>::Result>::set(
278 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
279 (*値).*(std::decimal_t< Decltype (p)>::ptr)), ...)、
280 }、managed< T, 無効>::schema.ps)
281 場合(!managed<T>::schema.is_ embedded()) {
282 set.insert(m_obj.get_key())
283 }
284 std::p pair=size_t,bool>res = set.insert(m_obj.get_key())
285 返される std::pear=itator,bool>(イテレータ(res.first, この)、 . 秒)。
286 }
287
288イテレータ挿入( constイテレータ &、T* 値)
289 {
290 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
291 auto table = m_obj->get_target_table(m_key);
292 internal::bridge::obj m_obj
293 場合 Constexpr (managed<T>::schema.HasPrimaryKeyProperty){{
294 自動pk = (*値).*(managed<T>::schema.primary_key().ptr)
295 m_obj =table.create_object_with_primary_key( realm:: internal::bridge::混合(serialize(pk.value)))
296 } else {
297 m_obj =table.create_object()
298 }
299 std::apply([800000000000000000000000000000000000000000000]([80000000000000000000000000000000000000000000000000000000000]( autoと ...p) {
300 (accessor= typename std::decay_t =decimaltype (p)>::Result>::set(
301 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
302 (*値).*(std::decimal_t< Decltype (p)>::ptr)), ...)、
303 }、managed< T, 無効>::schema.ps)
304 std::p pair=size_t,bool>res = set.insert(m_obj.get_key())
305 リターンイテレータ(res.first、 この)、
306 }
307
308std::pear=itator,bool=insert( constmaned <T>=T===================================================================================================================================================================================================================================
309 {
310 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
311 std::p pair=size_t,bool>res = set.insert(value.m_obj.get_key())
312 返される std::pear=itator,bool>(イテレータ(res.first, この)、 . 秒)。
313
314 }
315
316イテレータ挿入( const イテレータと、 const <T>Managed=T>= 値)
317 {
318 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
319 std::p pair=size_t,bool>res = set.insert(value.m_obj.get_key())
320 リターンイテレータ(res.first、 この)、
321 }
322
323 std::pear=itator,bool=insert( constmaned =T===============================================================================================================================================================================================================================================================================)
324 {
325 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
326 std::p pair=size_t,bool>res = set.insert(value.m_obj.get_key())
327 返される std::pear=itator,bool>(イテレータ(res.first, この)、 . 秒)。
328
329 }
330
331 iterator insert( constイテレータと、 const Managed <T*>= 値)
332 {
333 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
334 std::p pair=size_t,bool>res = set.insert(value.m_obj.get_key())
335 リターンイテレータ(res.first、 この)、
336 }
337
338iterator find( constmaned <T>[T>+v)]
339 {
340 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
341 size_t idx = set.find(v.m_obj.get_key())
342 (idx ==realm:: not_in_collection
343 returnイテレータ(size())、この)。
344 returnイテレータ(idx,この)
345 }
346
347 iterator find( constmaned <T*>+v)
348 {
349 オートセット = internal::bridge::set(*m_realm, *m_obj, m_key)
350 size_t idx = set.find(v.m_obj->get_key())
351 (idx ==realm:: not_in_collection
352 returnイテレータ(size())、この)。
353 returnイテレータ(idx,この)
354 }
355 id clear(){
356 internal::bridge::set(*m_realm, *m_obj, m_key).remove_all()
357 }
358
359 size_t size()
360 {
361 return internal::bridge::set(*m_realm, *m_obj, m_key).size()
362 }
363
364 private :
365マネージド() =デフォルト
366マネージド( const Managed) =削除
367マネージド(マネージド & )=削除
368マネージド() 演算子=( constマネージド() =削除)
369マネージドと 演算子=(manedおよびを) =削除
370 テンプレート< typename , typename >
371 友人 構造体管理。
372 };
373} // namespace realm
374
375#endif//CPREALM_MANAGED_Set_HPP
定義: observation.happ: 176
定義: compound.hpp:69
定義: set.happ: 48
定義: caches.hpp:286
Definition: obj.hpp:62
定義: transformation.hpp:38