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

マネージド_混合.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_MIXED_HPP
20#dedefined CPREALM_MANAGED_IXED_HPP
21
22#include <cpprealm/macros.hpp>
23#include <cpprealm/rbool.hpp>
24#include <cpprealm/types.hpp>
25
26名前空間邦土 {
27 テンプレート< typename T>
28 構造体 Managed <T, std::enable_if_t=realm:: internal:: type_info :: MixedPersistableConcern =T================================================================<T>
29 使用 authorized <T>::managed_base::operator===============================================
30
31 enum stored_type {
32 Int = 0 、
33ブール = 1 、
34 string = 2 、
35バイナリ = 4 、
36混合 = 6 、
37タイムスタンプ = 8 、
38 Float = 9,
39 double = 10、
40 10進数 = 11 、
41リンク = 12 、
42 LinkList = 13 、
43 ObjectId = 15,
44 TypedLink = 16,
45 UUID = 17,
46 null = 18 、
47 };
48
49 Managed & 演算子 =( const T & v) {
50 m_obj->set(m_key, std::visit([](自動および 引数) {{
51 M = typename internal::type_info::type_info < std::decay_t { Decimaltype (arg)>:: internal_type
52 return internal::bridge::混合(M(arg))
53 }, v));
54 この を 返し ます。
55 }
56
57 テンプレート< typename U>
58 Managed & 演算子 =( const U+ v) {
59 m_obj->set(m_key, internal::bridge::混合(v))
60 この を 返し ます。
61 }
62
63 [[nodiscard]] stored_type get_stored_type() const {
64 auto val = m_obj->get< Realm :: internal::bridge::混合>(m_key)
65 if (val.is_null()) {
66 local_type::Null を返す
67 } else {
68 return 静的_投じ[ stored_type > (val.type()) ]
69 }
70 }
71
72 [[ nodiscard ]] T Delete() Const {
73 returndeserialize<T> =T>(m_obj->get= realm:: internal::bridge::混合 ====================================
74 }
75
76 [[ nodiscard ]] T 演算子 *() 制約 {
77 return detach();
78 }
79
80 //Mask: - 比較演算子
81 rbool演算子==( const T{rhs) は { の例外をスローします。
82 場合(この ->m_rbool_query){
83 これを返すには、->m_rbool_query->混合_等価(m_key、serialize(rhs))を参照してください。
84 }
85 return detach() == rhs;
86 }
87
88 rbool演算子!=( const T+ rhs ){
89 場合(この ->m_rbool_query){
90 これを返します ->m_rbool_query->混合_not_equal(m_key、serialize(rhs))
91 }
92 return detach() != rhs;
93 }
94
95 rbool演算子==( const std::nullopt_t=(const std::nullopt_t+) const noException {{
96 場合(この ->m_rbool_query){
97 これを返します ->m_rbool_query->混合_等価(m_key, internal::bridge::混合(std::mongostat()))
98 }
99 return Delete() == T(std::mongostat())
100 }
101
102 rbool演算子!=( const std:: nullopt_t &) は {以外の ではない:
103 場合(この ->m_rbool_query){
104 これを返すには、->m_rbool_query->混合_not_equal(m_key, internal::bridge::混合(std::mongostat()))を参照してください。
105 }
106 return Delete() != T(std::mongostat())
107 }
108
109 boolhas_link () const {
110 return (get_stored_type() == stored_type::TypedLink)
111 }
112
113 テンプレート< typename U>
114 typename <U>Managed{U>::ref_type get_stored_link() const {
115 m_realm->read_group()。
116 邦土::内部::bridge::混合M = m_obj->get< Realm :: internal::bridge::混合>(m_key)
117
118 自動オブジェクト名 = internal::bridge::object (*m_realm、m.operator internal::bridge::obj_link ():
119uint32 _t Linuxカンダリ_key = m_realm->table_for_object_type( Managed <std::remove_pointer_t<<U> U/:schema.name).get_key()
120 uint32_t stored_table = obj.get_obj().get_table().get_key();
121
122 場合(alternative_key .= stored_table){
123 スローstd::runtime_error( "混合タイプに保存されている異なるリンクタイプ。保存されたタイプ: " + object.get_object_schema().get_name())
124 }
125 return typename Managed<U> <U>は 、次を実行 する ために使用されます:
126 }
127
128 テンプレート< typename U>
129 void set_link(U &&v) {
130 静的_アサート( のサイズマネージド <U> )、 「T のスキーマを宣言する必要があります」 )。
131 静的_アサート(<U> マネージド_U>::object_type == ObjectType::TopLevel、 「混合プロパティはトップレベルのオブジェクトのみを保存できます。」 ):
132 自動テーブル = m_realm->table_for_object_type( managed<U>::schema .name)
134 場合 ConstexprManaged <U>::schema .HasPrimaryKeyProperty){{
135 自動 pk = v.*( <U>managed{U}::schema .primary_key().ptr):
136 op =table.create_object_with_primary_key( realm::Internel::bridge::混合(serialize(pk.value)))
137 } else {
138 op =table.create_object()
139 }
140
141 std::apply([+o, &v,この]( auto & & ...p) {
142accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
143 o、o.get_table().get_conum_key(p.name)、 *この->m_realm、v.*(std::decay_t< Decltype (p)>::ptr)
144 ), ...);
145} <U>は、maned [U]::schema .ps)を含む場合
146 m_obj->set(m_key, internal::bridge::混合(o.get_link()))
147 }
148
149 テンプレート< typename U>
150std::enable_if_t= maned = managed===========================================================================<U><U>
151set_link(maned [U ]+link)<U> {
152 m_obj->set(m_key, internal::bridge::混合( internal::bridge::obj_link (link.m_obj.get_table().get_key(), link.m_obj.get_key()) は、
153 }
154
155 private :
156 マネージド()=デフォルト
157 マネージドconst administrators =削除
158 マネージドマネージド& )= delete
159 Managed & 演算子=( constマネージド&) = delete
160 Managed & 演算子=(マネージド&と) = delete
161 テンプレート< typename , typename >
162 友人 構造体 マネージド
163 };
164
165 テンプレート< typename T、 typename Types>
166 ブール値 _alternative( const Realm ::maned[Types]><Types> & v) noException {
167 auto val = v.get_stored_type();
168 スイッチ(val){
170 場合 constexpr (std::is_same_v<T, int64_t>)
171 return true
172 break;
174 場合 constexpr (std::is_same_v<T, bool>)
175 return true
176 break;
178 場合 constexpr (std::is_same_v<T, std::string>)
179 return true
180 break;
182 場合 constexpr (std::is_same_v<T, std::vector<uint8_t>>)
183 return true
184 break;
186 場合 constexpr (std::is_same_v<T, Types>)
187 return true
188 break;
190 場合 constexpr (std::is_same_v<T, std::chrono::time_point<std::chrono::system_clock>>)
191 return true
192 break;
194 場合 constexpr (std::is_same_v<T, float>)
195 return true
196 break;
198 場合 constexpr (std::is_same_v<T, double>)
199 return true
200 break;
202 場合 constexpr (std::is_same_v<T, realm::decimal128>)
203 return true
204 break;
206 場合 constexpr (std::is_same_v<T, realm::object_id>)
207 return true
208 break;
209
211 場合 constexpr (std::is_same_v<T, realm::uuid>)
212 return true
213 break;
215 場合 constexpr (std::is_same_v<T, std::monostate>)
216 return true
217 break;
219 場合 constexpr (std::is_pointer_v<T>){{
220 auto m = v.m_obj->template get<internal::bridge::mixed> (v.m_key)
221uint32 _t advanced_key = v.m_realm->_tablefor_object_type( maned <std::remove_pointer_t<<T> TTL::schema.name).get_key()。
222 uint 32 _t stored_key = internal::bridge::object (*v.m_realm, m.operator internal::bridge::obj_link ()).get_object_schema().table_key()
223 代替_キー ==ストアド_キーを返す
224 }
225 break;
226 }
229 break;
230 デフォルト:
231 break;
232 }
233
234 return false
235 }
236 }
237
238#endif//CPREALM_MANAGED_IXED_HPP
定義: rbool.hpp:36
定義: accessors.hpp:33
定義: compound.hpp:69
Definition: obj.hpp:123
定義: object.happ: 154
定義: caches.hpp:286
Definition: obj.hpp:62