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

accessors.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_ACCESSORS_HPP
20CPREALM_ACCESSORS_HPP を定義する
21
22#include <cpprealm/ internal/bridge/lnklst.hpp>
23#include <cpprealm/ internal/bridge/obj.hpp>
24#include <cpprealm/ internal/bridge/realm.hpp>
25#include <cpprealm/ internal/bridge/table.hpp>
26#include <cpprealm/types.hpp>
27
28名前空間邦土 {
29 テンプレート< typename >
30 構造体プライマリ_キー。
31
32 テンプレート< typename T, typename = string >
33 構造体 accessor {
34 静的 インライン 無効セット( internal::bridge::obj &obj、
35 制約 internal::bridge::col_keyとキー、
36 制約 internal::bridge::realm &、
37 コンフィギュレーションT & 値)。
38 };
39
40 テンプレート<>
41 構造体 accessor<int64_t> {
42 静的 インライン 無効セット( internal::bridge::obj &obj、
43 制約 internal::bridge::col_keyとキー、
44 制約 internal::bridge::realm &、
45 const int 64 _t & 値){{
46 obj.set(キー, 値)
47 }
48 };
49 テンプレート<>
50 構造体 accessor <std::optional=int 64 _t==========================
51 静的 インライン 無効セット( internal::bridge::obj &obj、
52 制約 internal::bridge::col_keyとキー、
53 制約 internal::bridge::realm &、
54 const std::optional{int 64 _t>+ 値){{
55){
56 obj.set(key, *value)
57 } else {
58 obj.set_null(key);
59 }
60 }
61 };
62 テンプレート<>
63 構造体 accessor<double> {
64 静的 インライン 無効セット( internal::bridge::obj &obj、
65 制約 internal::bridge::col_keyとキー、
66 制約 internal::bridge::realm &、
67 制約 doubleと 値){
68 obj.set(キー, 値)
69 }
70 };
71 テンプレート<>
72 構造体 accessor <std::optional"double"<double> {
73 静的 インライン 無効セット( internal::bridge::obj &obj、
74 制約 internal::bridge::col_keyとキー、
75 制約 internal::bridge::realm &、
76 const std::optional[double]+<double> 値){{
77){
78 obj.set(key, *value)
79 } else {
80 obj.set_null(key);
81 }
82 }
83 };
84 テンプレート<>
85 構造体 accessor<bool> {
86 静的 インライン 無効セット( internal::bridge::obj &obj、
87 制約 internal::bridge::col_keyとキー、
88 制約 internal::bridge::realm &、
89 制約 ブール値と値){
90 obj.set(キー, 値)
91 }
92 };
93 テンプレート<>
94 構造体 accessor <std::optional=bool=======================================<bool>
95 静的 インライン 無効セット( internal::bridge::obj &obj、
96 制約 internal::bridge::col_keyとキー、
97 制約 internal::bridge::realm &、
98 const std::optional[] および<bool> 値){{
99){
100 obj.set(key, *value)
101 } else {
102 obj.set_null(key);
103 }
104 }
105 };
106
107
108 テンプレート< typename T>
110 静的 インライン 無効セット( internal::bridge::obj &obj、
111 制約 internal::bridge::col_keyとキー、
112 制約 internal::bridge::realm &、
113 整合T & 値){
114 obj.set(key, static_ Cast < int 64 _t > (値))
115 }
116 };
117 テンプレート< typename T>
118 構造体 accessor <T, std::enable_if_t=std::conjection_v=期間::type_info::is_optional=====================================================================<T><typename T::value_type>
119 静的 インライン 無効セット( internal::bridge::obj &obj、
120 制約 internal::bridge::col_keyとキー、
121 制約 internal::bridge::realm &、
122 整合T & 値){
123){
124 obj.set(key, static_ Cast < int 64 _t > (*値))
125 } else {
126 obj.set_null(key);
127 }
128 }
129 };
130
131 テンプレート< typename T>
133 静的 インライン 無効セット( internal::bridge::obj &obj、
134 制約 internal::bridge::col_keyとキー、
135 制約 internal::bridge::realm &、
136 整合T & 値){
137 obj.set(キー, シリアル化(値))
138 }
139 };
140
141
142 テンプレート<>
143 構造体 accessor<uuid> {
144 静的 インライン 無効セット( internal::bridge::obj &obj、
145 制約 internal::bridge::col_keyとキー、
146 制約 internal::bridge::realm &、
147 制約 uuid& value) {
148 obj.set(キー, 値)
149 }
150 };
151 テンプレート<>
152 構造体 accessor <std::optional=uuid============================<uuid>
153 静的 インライン 無効セット( internal::bridge::obj &obj、
154 制約 internal::bridge::col_keyとキー、
155 制約 internal::bridge::realm &、
156 const std::optional[]<uuid> 値){{
157){
158 obj.set(key, *value)
159 } else {
160 obj.set_null(key);
161 }
162 }
163 };
164 テンプレート<>
165 構造体 accessor < object_id > {
166 静的 インライン 無効セット( internal::bridge::obj &obj、
167 制約 internal::bridge::col_keyとキー、
168 制約 internal::bridge::realm &、
169 制約 object_id & 値) {
170 obj.set(キー, 値)
171 }
172 };
173 テンプレート<>
174 構造体 accessor <std::optional=object_id====================<object_id>
175 静的 インライン 無効セット( internal::bridge::obj &obj、
176 制約 internal::bridge::col_keyとキー、
177 制約 internal::bridge::realm &、
178 const std::optional[object_id]>+<object_id> 値){{
179){
180 obj.set(key, *value)
181 } else {
182 obj.set_null(key);
183 }
184 }
185 };
186
187 テンプレート<>
188 構造体 accessor < decimal 128 > {
189 静的 インライン 無効セット( internal::bridge::obj &obj、
190 制約 internal::bridge::col_keyとキー、
191 制約 internal::bridge::realm &、
192 制約 小数128 & 値){
193 obj.set(キー, 値)
194 }
195 };
196 テンプレート<>
197 構造体 accessor <std::optional{decimal 128 > {
198 静的 インライン 無効セット( internal::bridge::obj &obj、
199 制約 internal::bridge::col_keyとキー、
200 制約 internal::bridge::realm &、
201 const std::optional 128 >+ 値){
202){
203 obj.set(key, *value)
204 } else {
205 obj.set_null(key);
206 }
207 }
208 };
209
210 テンプレート<>
211 構造体 accessor <std::chrono::time_point=std::chronno::system_クロック==========================================<std::chrono::system_clock>
212 静的 インライン 無効セット( internal::bridge::obj &obj、
213 制約 internal::bridge::col_keyとキー、
214 制約 internal::bridge::realm &、
215 const std::chrono::time_point<std::chrono::system_clock> + 値){{
216 obj.set(キー, 値)
217 }
218 };
219 テンプレート<>
220 構造体 accessor <std::optional=std::chrono::time_point=std::chrono::system_lock=======================================================<std::chrono::system_clock>
221 静的 インライン 無効セット( internal::bridge::obj &obj、
222 制約 internal::bridge::col_keyとキー、
223 制約 internal::bridge::realm &、
224 const std::optional未満<std::chrono::system_clock>
225){
226 obj.set(key, *value)
227 } else {
228 obj.set_null(key);
229 }
230 }
231 };
232
233 テンプレート<>
234 構造体 accessor<std::string> {
235 静的 インライン 無効セット( internal::bridge::obj &obj、
236 制約 internal::bridge::col_keyとキー、
237 制約 internal::bridge::realm &、
238 const std::string & 値){{
239 obj.set(キー, 値)
240 }
241 };
242 テンプレート<>
243 構造体 accessor <std::string><std::optional=std::string> {
244 静的 インライン 無効セット( internal::bridge::obj &obj、
245 制約 internal::bridge::col_keyとキー、
246 制約 internal::bridge::realm &、
247 const std::optional{std::string>+<std::string> 値){
248){
249 obj.set(key, *value)
250 } else {
251 obj.set_null(key);
252 }
253 }
254 };
255
256 テンプレート<>
257 構造体 accessor <std:: 8 ======================================================================
258 静的 インライン 無効セット( internal::bridge::obj &obj、
259 制約 internal::bridge::col_keyとキー、
260 制約 internal::bridge::realm &、
261 const std::vector 8 _t>+ 値){{
262 obj.set(キー, 値)
263 }
264 };
265 テンプレート<>
266 構造体 accessor <std::optional 8 std::vector==========================================================================
267 静的 インライン 無効セット( internal::bridge::obj &obj、
268 制約 internal::bridge::col_keyとキー、
269 制約 internal::bridge::realm &、
270 const std::optional 8 std::vector======================================================================================
271){
272 obj.set(key, *value)
273 } else {
274 obj.set_null(key);
275 }
276 }
277 };
278 テンプレート< typename T>
279 構造体 accessor <std::vector=T================================<T>
280 静的 インライン 無効セット( internal::bridge::obj &obj、
281 制約 internal::bridge::col_keyとキー、
282 制約 internal::bridge::realm &、
283 const std::vector以前と値){{<T>
284 obj.set_list_values(key, value);
285 }
286 };
287 テンプレート< typename T>
288 構造体 accessor <std::vector=========================================
289 静的 インライン 無効セット( internal::bridge::obj &obj、
290 制約 internal::bridge::col_keyとキー、
291 制約 internal::bridge::realmと Realm、
292 const std::vector<T*> & 値){{
293 自動リスト =obj.get_linklist(key)
294 の場合size_t i = 0 、i < value.size()、 i++) {
295 auto& lnk = value[i];
296 場合(!link){
297 を継続する、
298 }
299 auto table = obj.get_target_table(key);
301 場合 Constexprマネージド<T, 無効>::schema .HasPrimaryKeyProperty) {
302 オートpk = (*lk).*( managed<T, double>::schema .primary_key().ptr)
303 m_obj =table.create_object_with_primary_key( realm:: internal::bridge::混合(serialize(pk.value)))
マネージド <T, 無効>::schema304 .is_ embedded()) 場合 は、 }{
305 m_obj = list.create_and_insert_linked_object(i)
306 } else {
307 m_obj =table.create_object()
308 }
309 std::apply([&m_obj, &lnk, &realm]( auto && ...p) {
310accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
311 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
312 (*link).*(std::decimal_t{ Decimaltype (p)>::ptr)), ...)、
314 場合管理対象 ::schema .is_ embedded() {
315 list.add(m_obj.get_key())
316 }
317 }
318 }
319 };
320 テンプレート< typename T>
321 構造体 accessor <std::set{T}<T> {
322 静的 インライン 無効セット( internal::bridge::obj &obj、
323 制約 internal::bridge::col_keyとキー、
324 制約 internal::bridge::realmと Realm、
325 const std::set<T>+ 値){
326 オートセット = Realm:: internal::bridge::set (realm、obj、キー)。
327 const auto & v : 値){
328 set.insert(serialize(v))
329 }
330 }
331 };
332 テンプレート< typename T>
333 構造体 accessor <std::set=T*==========================
334 静的 インライン 無効セット( internal::bridge::obj &obj、
335 制約 internal::bridge::col_keyとキー、
336 制約 internal::bridge::realmと Realm、
337 const std::set< T*>+ 値){{
338 オートセット = Realm:: internal::bridge::set (realm、obj、キー)。
339 const auto & Link : 値){
340 場合(!link){
341 を継続する、
342 }
343 auto table = obj.get_target_table(key);
345 場合 Constexprマネージド<T, 無効>::schema .HasPrimaryKeyProperty) {
346 オートpk = (*lk).*( managed<T, double>::schema .primary_key().ptr)
347 m_obj =table.create_object_with_primary_key( realm:: internal::bridge::混合(serialize(pk.value)))
348 } else {
349 m_obj =table.create_object()
350 }
351 std::apply([&m_obj, &lnk, &realm]( auto && ...p) {
352accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
353 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
354 (*link).*(std::decimal_t{ Decimaltype (p)>::ptr)), ...)、
356 場合管理対象 ::schema .is_ embedded() {
357 set.insert(m_obj.get_key())
358 }
359 }
360 }
361 };
362 テンプレート< typename T>
363 構造体 accessor <std::map=std::string, T> {
364 静的 無効セット( internal::bridge::obj &obj、
365 制約 internal::bridge::col_keyとキー、
366 制約 internal::bridge::realm &、
367 const std::map{std::string, T>+ 値){
368 auto d =obj.get_Dictionary(key)
369 の場合自動& [k, v] : 値){
370 場合 constexpr (内部::type_info::MixedPersistableConcern<T>::value) {
371 d.insert(k, std::visit([](自動および arg) {
372 M = typename internal::type_info::type_info < std::decay_t { Decimaltype (arg)>:: internal_type
373 return internal::bridge::混合(M(arg))
374 }, v));
375 } else {
377 場合 constexpr (std::is_enum_v<typename T::value_type>) {
378v ){
379d.insert(k, static_host (typename) std::current_type[typename<typename T::value_type> T::value_type]::type > (*v):
380 } else {
381 d.insert(k, internal::bridge::混合())
382 }
383 } else {
385 d.insert(k, U(v));
386 }
387 } else {
389 d.insert(k, U(v));
390 }
391 }
392 }
393 }
394 };
395 テンプレート< typename T>
396 構造体 accessor <std::map=std::string, T*> {
397 静的 無効セット( internal::bridge::obj &obj、
398 制約 internal::bridge::col_keyとキー、
399 制約 internal::bridge::realmと Realm、
400 const std::map=std::string, T*>= 値){{
401 auto d =obj.get_Dictionary(key)
402 の場合自動& [k, v] : 値){
403v ){
405 場合 Constexprマネージド<T, 無効>::schema .HasPrimaryKeyProperty) {
406 自動pk = (*v).*( managed<T, double>::schema .primary_key().ptr)
407 m_obj = d.create_and_insert_linked_object(k, pk.value)、
408 } else {
409 m_obj = d.create_and_insert_linked_object(k)
410 }
411 std::apply([+m_obj, &realm, op = *v]( auto & & ...p) {
412accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
413 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
414 op.*(std::decay_t{ Decltype (p)>::ptr), ...):
416 d.insert(k, m_obj.get_key());
417 } else {
418 d.insert(k, internal::bridge::混合())
419 }
420 }
421 }
422 };
423 // MARK: - accessor link
424
425 テンプレート< typename T>
426 構造体 accessor<T*> {
427 静的 インライン 無効セット( internal::bridge::obj &obj、
428 制約 internal::bridge::col_keyとキー、
429 制約 internal::bridge::realmと Realm、
430 整合T* 値){
431 場合(値){
432 return;
433 }
434 auto table = obj.get_target_table(key);
436 場合 Constexprマネージド<T, 無効>::schema .HasPrimaryKeyProperty) {
437 自動pk = (*値).*( managed<T, 無効>::schema .primary_key().ptr)
438 m_obj =table.create_object_with_primary_key( realm:: internal::bridge::混合(serialize(pk.value)))
439 obj.set(key, m_obj.get_key());
マネージド <T, 無効>::schema440 .is_ embedded()) 場合 は、 }{
441 m_obj =obj.create_and_set_linked_object(key)
442 } else {
443 m_obj =table.create_object()
444 obj.set(key, m_obj.get_key());
445 }
446 std::apply([+m_obj, &realm, &values]( auto & & ...p) {
447accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
448 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
449 (*値).*(std::decimal_t< Decltype (p)>::ptr)), ...)、
451 }
452 };
453
454 template <auto T>
455 構造体 accessor < link_objects <T> {
456 静的 インライン empty set( const internal::bridge::obj &、
458 制約 internal::bridge::realm &、
459 制約 linking_objects<T>&) {
460 }
461 };
462 // マーク: - アクセス プライマリ キー
463 テンプレート< typename T>
464 構造体 accessor <プライマリ_キー <T> {
465 静的 インライン 無効セット( internal::bridge::obj &obj、
466 制約 internal::bridge::col_keyとキー、
467 制約 internal::bridge::realm &、
468 制約 プライマリ_key<T> & 値){
469 場合 constexpr (std::is_enum_v<T>) {
470 obj.set(key, static_ Cast < int 64 _t > (value.value))
471 } else {
472 obj.set(key, value.value);
473 }
474 }
475 };
476} // realm
477#endif//CPREALM_ACCESSORS_HPP
478
定義: accessors.hpp:33
定義: types.happ: 75
定義: coll_key.happ: 28
定義: compound.hpp:69
Definition: obj.hpp:123
Definition: realm.hpp:67
定義: set.happ: 48
定義: Result.happ: 419
Definition: obj.hpp:62
定義: types.hpp:56
定義: Managed_primary_key.happ:30
定義: types.hpp:35