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

link.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_BRIDGE_LINK_HPP
20CPREALM_CRIDGE_Link_HPP を定義する
21
22#include <cpprealm/accessors.hpp>
23#include <cpprealm/macros.hpp>
24#include <cpprealm/rbool.hpp>
25
26#include <cpprealm/ internal/type_info.hpp>
27
28名前空間邦土 {
29 テンプレート< typename , typename >
30 構造体管理。
31
32 テンプレート< typename T>
33 構造体 Managed <T*> : Managed_base {
34 T* Delete() Const {
35 T* v = new T():
36 Managed <T> m(m_obj->is_null(m_key)? *m_obj : m_obj->get_linked_object(m_key), *m_realm)
37 auto assign = [&m, &v](auto& pair) {
38 (*v).*(std::decay_t< Decltype ( pair.first)>::ptr) = (m.*(ペア.秒)). describe()
39 };
40 自動圧縮 = 内部::zip_tunes( Managed <T>::schema .ps, <T>Managed[T]::managed_pointers ())。
41 std::apply([+v, &m, &assign]( auto & & ... pair) {
42 (assign( pair), ...)
43 }、圧縮型)
44 return v;
45 }
46
47 struct ref_type {
49 制約 Managed <T> * 演算子 ->() Const {
50 return &m_maned を返す
51 }
52 Managed <T> * 演算子 ->() {
53 return &m_maned を返す
54 }
55
56 制約 Managed <T> & 演算子 *() Const {
57 m_managed を返す
58 }
59 Managed <T> & 演算子 *() {
60 m_managed を返す
61 }
62
63 ブール演算子 ==( constmaned <T*> +rhs) const {
64 場合(この ->m_managed.m_realm の場合 != *rhs.m_realm) {
65 return false
66 }
67 returnこれを->m_managed.m_obj.get_key() ==rhs.m_obj->get_key()
68 }
69 ブール 演算子 ==( constmaned <T>&rhs) const {
70 次の場合(この->m_managed.m_realm !=rhs.m_realm){{
71 return false
72 }
73 returnこの->m_managed.m_obj.get_table() ==rhs.m_obj.get_table() & &
74 :この->m_managed.m_obj.get_key() ==rhs.m_obj.get_key()
75 }
76 ブール演算子 ==( const ref_type+rhs) const {
77 場合(この ->m_managed.m_realm の場合 .=rhs.m_managed.m_realm) {
78 return false
79 }
80 returnこの->m_managed.m_obj.get_table() ==rhs.m_managed.m_obj.get_table() & &
81 :この->m_managed.m_obj.get_key() == rhs.m_managed.m_obj.get_key()
82 }
83 ブール演算子 !=( constmaned <T*> &rhs) const {
84 return !この->オペレーター==(rhs)
85 }
86 ブール 演算子 !=( constmaned <T>+rhs) const {
87 return !この->オペレーター==(rhs)
88 }
89 ブール演算子 !=( const ref_type+rhs) const {
90 return !この->オペレーター==(rhs)
91 }
92 private :
93 Managed[T ]<T> m_managed
94 };
95 ref_type 演算子 ->() const {
96 場合(この ->m_rbool_query){
97この->m_rbool_query->add_link_tain(m_key)
98 return ref_type(manageed <T>::prepare_for_query (*m_realm、この ->m_rbool_query))
99 }
100 return ref_type( managed<T> (m_obj->get_linked_object(m_key), *m_realm))
101 }
102 演算子bool() const {
103 if (m_obj && m_key) {
104 return !m_obj->is_null(m_key);
105 }
106 return false
107 }
108マネージド & 演算子=( constmaned <T>[T>+obj)] {
109 m_obj->set(m_key, obj.m_obj.get_key());
110 この を 返し ます。
111 }
112マネージド & 演算子=( const Managed <T*> &obj) {
113 m_obj->set(m_key, obj.m_obj->get_key());
114 この を 返し ます。
115 }
116マネージド &operator=(std::nullptr_t){{
117 m_obj->set_null(m_key);
118 この を 返し ます。
119 }
120 managed &operator=(T*o){{
121 自動テーブル = m_realm->table_for_object_type(managed<T>::schema.name)
122 internal::bridge::obj オブジェクト
123 if (!o) {
124 m_obj->set_null(m_key);
125 この を 返し ます。
126} の 場合 ( managed<T> :: schema.HasPrimaryKeyProperty ){{
127 自動pk = (*o).*(managed<T>::schema.primary_key().ptr)
128 obj =table.create_object_with_primary_key( realm:: internal::bridge::混合(serialize(pk.value)))
129 m_obj->set(m_key, obj.get_key());
130} であれば ( managed<T> ::schema.is_ embedded()){{
131 obj = m_obj->create_and_set_linked_object(m_key)
132 } else {
133 obj =table.create_object()
134 m_obj->set(m_key, obj.get_key());
135 }
136
137 std::apply([+obj, &o, Realm = *m_realm]( auto & & ...p) {
138 (accessor= typename std::decay_t =decimaltype (p)>::Result>::set(
139 obj、obj.get_table().get_collection_key(p.name) 邦土、 (*o).*(std::decay_t { Decaltype (p)>::ptr)
140 ), ...);
141 }、managed<T>::schema.ps)
142 この を 返し ます。
143 }
144
145 rbool 演算子 ==(std::nullptr_t) const {
146 when ( m_rbool_query ) {
147 return m_rbool_query->link_equal(m_key, std::nullopt)
148 }
149 return !m_obj->get_linked_object(m_key).is_valid();
150 }
151rbool 演算子 ==( constmaned %==========================================<T>
152 when ( m_rbool_query ) {
153 return m_rbool_query->link_equal(m_key、rhs.m_obj)
154 }
155 場合(*この ->m_realm の 場合 、=rhs.m_realm)
156 return false
157 return m_obj->get_linked_object(m_key).get_key() ==rhs.m_obj.get_key()
158 }
159
160rbool 演算子 ==( constmaned %=================================================
161 when ( m_rbool_query ) {
162 return m_rbool_query->link_equal(m_key, *rhs.m_obj)
163 }
164 場合(*この->m_realm != *rhs.m_realm)
165 return false
166 return m_obj->get_linked_object(m_key).get_key() ==rhs.m_obj->get_key()
167 }
168
169 rbool 演算子 .=(std::nullptr_t) const {
170 when ( m_rbool_query ) {
171 return m_rbool_query->link_not_等価(m_key, std::nullopt)
172 }
173 return m_obj->get_linked_object(m_key).is_valid();
174 }
175 rbool演算子 バージョン .=( 管理対象 <T>= rhs ) 使用条件 {
176 when ( m_rbool_query ) {
177 return m_rbool_query->link_not_equal(m_key、rhs.m_obj)
178 }
179 return m_obj->get_linked_object(m_key).is_valid();
180 }
181
182rbool 演算子 バージョン .=( constmaned<T*>+rhs)const { {
183 when ( m_rbool_query ) {
184 return m_rbool_query->link_not_equal(m_key, *rhs.m_obj)
185 }
186 return m_obj->get_linked_object(m_key).is_valid();
187 }
188
189 private :
190マネージド<T*>()=デフォルト
191 テンプレート< typename , typename >
192 友人 構造体管理。
193 };
194} //namespace realm
195#endif //CPREALM_TRIDGE_Link_HPP
定義: compound.hpp:69
定義: link.happ: 33
定義: caches.hpp:286
Definition: obj.hpp:62