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

types.hpp

1
2//
3// © 2022 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_TYPES_HPP
20CPREALM_TypeS_HPP を定義する
21
22#include <array>
23#include <optional>
24#include <set>
25#include<stdexcept>
26
27#include <cpprealm/ internal/bridge/realm.hpp>
28#include <cpprealm/ internal/bridge/schema.hpp>
29#include <cpprealm/ internal/type_info.hpp>
30
31名前空間邦土 {
32
33 制約 size_t not_in_collection = - 1 、
34
35 構造体 uuid {
36 explicit uuidconst std::string &)。
37 uuidconst std::array{uint 8 _t, 16 >========================================================
38 uuid() = default;
39 [[nodiscard]] std::string to_string() const
40 [[nodiscard]] std::string to_base 64 () const
41 [[nodiscard]] std::array{uint 8 _t, 16 > to_bytes () convert
42 UUIDconst internal::bridge::uuid &)
44 友人 構造体 internal::bridge::uuid
45 テンプレート< typename mapped_type>
46 友人 構造体 box_base :
47 };
48
49 インライン ブール演算子 ==( const uuid & Lhs、 const uuid &rhs) { return Lhs.m_uuid ==rhs.m_uuid を返す}
50 インライン ブール演算子 !=( const uuid+ Lhs、 const uuid+ rhs) { return Lhs.m_uuid !=rhs.m_uuid: }
51 インライン ブール演算子 >( const uuidと Lhs、 const uuidと rhs){ return Lhs.m_uuid > rhs.m_uuid。 }
52 インライン ブール演算子 >=( const uuid+ Lhs、 const uuid+ rhs) { return Lhs.m_uuid >=rhs.m_uuid。 }
53 インライン ブール演算子 <( const uuid+ Lhs, const uuid+ rhs) { return Lhs.m_uuid <rhs.m_uuid を返す}
54 インライン ブール演算子 <=( const uuid+ Lhs, const uuid_rhs) { return Lhs.m_uuid <=rhs.m_uuid} }
55
56 構造体 object_id {
57 explicit object_idconst std::string &)。
58 object_id () =デフォルト
59[[ nodiscard ]] 静的 オブジェクト_id generate()
60 [[nodiscard]] std::string to_string() const
62 internal::bridge::object_id m_object_id。
63 友人 構造体 external::bridge::object_id
64 テンプレート< typename mapped_type>
65 友人 構造体 box_base :
66 };
67
68 インライン ブール演算子 ==( const object_id & Lhs、 const object_id &rhs) { return Lhs.m_object_id ==rhs.m_object_id。 }
69 インライン ブール演算子 !=( const object_id+ Lhs、 const object_id+ rhs) { return Lhs.m_object_id != RHs.m_object_id : }
70 インライン ブール演算子 <( const object_id+ Lhs, const object_id+rhs) { return Lhs.m_object_id < RHs.m_object_id。 }
71 インライン ブール演算子 >( const object_id+ Lhs, const object_id+rhs){ return Lhs.m_object_id > rhs.m_object_id。 }
72 インライン ブール演算子 <=( const object_id+ Lhs, const object_id+rhs) { return Lhs.m_object_id <=rhs.m_object_id。 }
73 インライン ブール演算子 >=( const object_id+ Lhs, const object_id+rhs) { return Lhs.m_object_id >=rhs.m_object_id。 }
74
75 構造体 10 進数128 {
76 explicit 10進数128const std::string &)
77 小数点 128{ 2 ( double と )
78 10進数128 ()=デフォルト
79 [[nodiscard]] std::string to_string() const
80[[ nodiscard ]] ブール値 は NaN() が 含む
83 友人 構造体 internal::bridge::decimal 128 :
84 テンプレート< typename mapped_type>
85 友人 構造体 box_base :
86
87 10 進数128演算子( 10数128 & O)
88 10 進数128演算子 +( const 10 進数128 & O)。
89 10進数128演算子 *( const 10進数128 & O)。
90 10 進数128演算子/( 10数128 & O)
91
92 10 進数128 & 演算子 -=( const decimal 128 & op):
93 10 進数128 &+=( const decimal 128 & op):
94 10 進数128 & 演算子 *=( const decimal 128 & op):
95 10 進数128 & 演算子/=( const decimal 128 & op):
96 };
97
98 インライン ブール 演算子 >( 10 進数128 10 進数 10128 進数 & rhs) { return Lhs.m_decimal > rhs.m_decimal }
99 インライン ブール演算子 >=( const 10 進数128 & Lhs、 const 10 進数128 &rhs) { return Lhs.m_decimal >= rhs.m_decimal を返す}
100 インライン ブール演算子 <( const 10 進数128 & Lhs、 const 10 進数128 & rhs) { return Lhs.m_decimal <rhs.m_decimal }
101 インライン ブール演算子 <=( const 10 進数128 & Lhs、 const 10 進数128 & rhs) { return Lhs.m_decimal <= rhs.m_decimal }
102 インライン ブール演算子 ==( const 10 進数128 & Lhs、 const 10 進数128 & rhs) { return Lhs.m_decimal ==rhs.m_decimal }
103 インライン ブール演算子 !=( const 10 進数128 & Lhs、 const 10 進数128 &rhs) { return Lhs.m_decimal !=rhs.m_decimal を返す}
104 }
105
106名前空間邦土 {
107
108 静的 inline int64 _t Serialize(int64 _t v、 const std::optional{internal::bridge::realm>+<internal::bridge::realm> = std::nullopt) {
109 return v;
110 }
111 静的 inline int 64 _tdeserialize(int 64 _t v) {
112 return v;
113 }
114
115 静的 インライン std::optional[int64 _t> Serialize( const std::optional[int64 _t>+ v, const <internal::bridge::realm>std::optional[Interl::bridge::realm>+ = std::nullopt] {
116 return v;
117 }
118 静的 inline 64 64 opデータベース
119 return v;
120 }
121
122 静的 インライン double Serialize( const double と v、 const std::optional[Interl::bridge::realm>+<internal::bridge::realm> = std::nullopt)] {{
123 return v;
124 }
125 静的 インライン double delete( const double & v) {
126 return v;
127 }
128
129 静的 インライン std::optional[double] と<double> v 、 const std::optional[<double> <internal::bridge::realm>Interl ::bridge::realm>+ = std::nullopt] {{
130 return v;
131 }
132 静的 inline std::optional=double>deserialize(<double> const std::optional=double>+<double> v) {
133 return v;
134 }
135
136 静的 インライン ブール シリアル化( bool v, const std::optional[Interval::bridge::realm>+<internal::bridge::realm> = std::nullopt)] {
137 return v;
138 }
139 静的 インライン ブール逆シリアル化( bool v) {
140 return v;
141 }
142
143 静的 インライン std::optional[bool]><bool> Serialize(std::optional[bool]<bool> v, const std::optional[Interval::bridge::realm]>+<internal::bridge::realm> = std::nullopt) {
144 return v;
145 }
146 静的 inline <bool>std::optional[bool]>deserialize(std::optional[bool]v)<bool> {
147 return v;
148 }
149
150 テンプレート< typename T>
151 静的 インライン typename std::enable_if_t[std::is_enum_v[T]],<T> int64 _t> Serialize( const T+ v, const <internal::bridge::realm>std::optional=std::nullopt) {
152 return 静的_投じ[ int 64 _t > (v) ]
153 }
154 テンプレート < typename T, std::enable_if_t=std::is_enum_v=T============================================<T>
155 静的 inline T diserialize(int 64 _t v) {
156 return 静的_ Cast < T > (v):
157 }
158
159 テンプレート< typename T>
160 静的 インライン std::enable_if_t<std::is_enum_v[typename<typename T::value_type> T::value_type], std::optional[int64 _t]ID( const T & v、 const std::optional<internal::bridge::realm> & =std::nullopt){{
161v ){
162 return 静的_ Cast < int 64 _t > (*v)。
163 } else {
164 std::nullopt を返す
165 }
166 }
167 テンプレート< typename T, std::enable_if_t=std::is_enum_v= typename T::value_type=====================================
168 静的 インラインstd::optional{int 64 _t> diserialize(std::optional 64 _t> v) {
169v ){
170 return 静的_キャスト_T > (*v):
171 } else {
172 std::nullopt を返す
173 }
174 }
175
176 静的 インライン std::string 直列化( const std::string+ v, const std::optional[internal::bridge::realm]+<internal::bridge::realm> = std::nullopt) {
177 return v;
178 }
179 静的 inline std::string diserialize( const std::string+ v) {
180 return v;
181 }
182
183 静的 インライン std::optional[std::string]reize(<std::string> const std::optional[std::string]+<std::string> v, const std::optional[Interl::bridge::realm>+<internal::bridge::realm> = std::nullopt] {{
184 return v;
185 }
186 静的 inline <std::string>std::optional{std::string>deserialize( const std::optional{std::string>+<std::string> v) {
187 return v;
188 }
189
190 静的 インライン 内部::bridge::uuid Serialize( const uuid+ v、 const <internal::bridge::realm>std::optional=Interl::bridge::realm>= std::nullopt) {
191 return v;
192 }
193 静的 インラインUUID シリアル化( const internal::bridge::uuid & v) {
194 return v.オペレーター ::realm::uuid()
195 }
196
197 静的 インライン std::optional=<internal::bridge::uuid> Interl<uuid> <internal::bridge::realm>::bridge::uuid> Serialize( const std::optional=uuid>====================================================================
198 return v;
199 }
200 静的 inline <uuid>std::optional=uuid>deserialize( const std::optional=integer::bridge::uuid=======================================<internal::bridge::uuid>
201v ){
202 return v->演算子 ::realm::uuid()
203 } else {
204 std::nullopt を返す
205 }
206 }
207
208 静的 インライン 内部::bridge::binary ( const std::vector8 ===================================================================================================<internal::bridge::realm>
209 return v;
210 }
211 静的 inline std::vector 8 _t>deserialize( const internal::bridge::binary+ v) {
212 return 8 std::vector==========================================
213 }
214
215 静的 インライン std :: optional<internal::bridge::binary> ] 内部::bridge::binary[]8<internal::bridge::realm> >= std::nullopt){
216 return v;
217 }
218 静的 inline std:: optional std::vector======================================================================================================8<internal::bridge::binary>
219v ){
220 return v-> 演算子 std::vector 8 _t>()
221 } else {
222 std::nullopt を返す
223 }
224 }
225
226 静的 インライン 内部::bridge::timestamp Serialize( const std::chrono::time_point=std::chrono:system_cloud>+<std::chrono::system_clock> v, Const std::optional[<internal::bridge::realm> Interl ::bridge::realm>+ = std::nullopt] ){
227 return v;
228 }
229 静的 inline std::chrono::time_point=std::chronno:system_クロック>deserialize(<std::chrono::system_clock> const internal::bridge::timestamp+ v) {
230 return v.operator std::chrono::time_point=std::chrono::system_クロック>()<std::chrono::system_clock>
231 }
232
233 静的 インライン std::optional[]<internal::bridge::timestamp> 内部::bridge::timestamp> Serialize( const std::optional[std::chrono:: time_point [std::chronno::system_cloud]<std::chrono::system_clock> : <internal::bridge::realm>の:bridge::realm>=std::nullopt) {
234 return v;
235 }
236 静的 inline std::optional=std::chrono:: time_point =std::chrono:system_lock==========================================================<std::chrono::system_clock><internal::bridge::timestamp>
237v ){
238 return v->演算子 std::chrono::time_point=std::chrono::system_クロック>()<std::chrono::system_clock>
239 } else {
240 std::nullopt を返す
241 }
242 }
243
244 静的 インライン 内部::bridge::object_id Serialize( const Realm::object_id & v、 const std::optional"::realm>+<internal::bridge::realm> = std::nullopt) {
245 return v;
246 }
247 静的 インライン Realm::object_iddeserialize ( const internal::bridge::object_id+v){{
248 return v.オペレーター ::realm::object_id()
249 }
250
251 静的 インライン std::optional[]<internal::bridge::object_id> 内部::bridge::object_id> Serialize( const<realm::object_id> std::optional[realm::object_id>+ v, const<internal::bridge::realm> std::optional[Interl::bridge::realm]+ = std::nullopt ){
252 return v;
253 }
254 静的 inline <realm::object_id>std::optional{realm::object_id>deserialize( const <internal::bridge::object_id>std::optional{Interl::bridge::object_id>+v){{
255v ){
256 return v->演算子 ::realm::object_id()
257 } else {
258 std::nullopt を返す
259 }
260 }
261
262 静的 インライン 内部::bridge::decimal128 serialize( const Realm::decimal128 & v、 const <internal::bridge::realm>std::optional{Interl::bridge::realm>8=std::nullopt){{
263 return v;
264 }
265 静的 インライン Realm::decimal 128 deserialize( const internal::bridge::decimal 128 & v) {
266 return v.operator ::realm::decimal 128 ()
267 }
268
269 静的 inline std::optional[] 内部::bridge::decimal128 > Serialize( const std::optional[realm::decimal128 >+ v, const std::optional[intal::bridge::realm]<internal::bridge::realm> & =std::nullopt){{
270 return v;
271 }
272 静的 inline std::optional{realm::decimal 128 > Deserialize( const std::optional{Interl::bridge::decimal 128 >+ v) {{
273v ){
274 return v->演算子 ::realm::decimal 128 ()
275 } else {
276 std::nullopt を返す
277 }
278 }
279
280 テンプレート< typename T>
281 静的 インライン typename std:: enable_if_t = Interl ::type_info::MixedPeristableConcern=======================================================================<T> <internal::bridge::realm>std::nullopt) {
282 return std::visit([+]( auto &+ arg) {
283 保存済みタイプ = std::decimal_t< Decimaltype (arg)> を使用し ます。
284 M = typename internal:: type_info ::type_info<StoredType>::の間で設定したデータ型。
285 return internal::bridge::混合(M(arg)):
286 }, v);
287 }
288
289 テンプレート< typename T>
290 静的 インライン typename std::enable_if_t<!権内部::type_info::MixedPersistableConcern"T"::value,<T> T>
291 deserialize( const internal::bridge::ixed, 値) {
292 場合 constexpr (内部::type_info::is_optional<T>::value){{
293 std::nullopt を返す
294 } else if constexpr (std::is_same_v<T, int64_t>) {
295 戻り値.演算子 int 64 _t()
296 } else if constexpr (std::is_same_v<T, bool>) {
297 return値.演算子bool():
298 } else if constexpr (std::is_same_v<T, std::string>) {
299 return 静的_投じ[ std::string ] > (値)。
300 } else if constexpr (std::is_same_v<T, std::vector<uint8_t>>) {
301 return 静的_ Cast_ std ::8 ..
302 } else if constexpr (std::is_same_v<T, std::chrono::time_point<std::chrono::system_clock>>) {
303 return 静的_投じ[ internal::bridge ::timestamp > (値)]
304 }以外の場合は Constexpr (std::disjortion_v=std::is_sume=T, double>, std::is_sume=T, double================================================================
305 return static_ Cast <double> (値)
306 } else if constexpr (std::is_same_v<T, realm::uuid>) {
307 return value.operator internal::bridge::uuid().operator ::realm::uuid()
308 } else if constexpr (std::is_same_v<T, realm::object_id>) {
309 return value.operator internal::bridge::object_id().operator ::realm::object_id()
310 } else if constexpr (std::is_same_v<T, realm::decimal128>) {
311 return value.operator internal::bridge::decimal 128 () .operator ::realm::decimal 128 ()
312 } else if constexpr (std::is_enum_v<T>) {
313 return 静的_キャスト_T > (value.operator int 64 _t()):
314 } else {
315 abort()
316 }
317 }
318
319 テンプレート< typename T>
320 静的 インライン typename std::enable_if_t< internal::type_info::MixedPersistableConcern[T]::value,<T> T>
321 deserialize( const internal::bridge::ixed, 値) {
322 (value.is_null())の場合 {
323 return std::mongostat() を返します。
324 }
325
326 スイッチ(value.type()) {
327 case internal::bridge::data_type::Int:
328 戻り値.演算子 int 64 _t()
329 case internal::bridge::data_type::Bool:
330 return値.演算子bool():
331 case internal::bridge::data_type::String:
332 return 静的_投じ[ std::string ] > (値)。
333 内部::bridge:: data_type ::Binary:
334 return 静的_ Cast_ std ::8 ..
335 case internal::bridge::data_type::Timestamp:
336 return 静的_投じ[ internal::bridge ::timestamp > (値)]
337 case internal::bridge::data_type::Field:
338 case internal::bridge::data_type::Double:
339 return static_ Cast <double> (値)
340 case internal::bridge::data_type::UUID:
341 return value.operator internal::bridge::uuid().operator ::realm::uuid()
342 内部::bridge:: data_type ::ObjectId:
343 return value.operator internal::bridge::object_id().operator ::realm::object_id()
344 case internal::bridge::data_type::Decimal:
345 return value.operator internal::bridge::decimal 128 ().operator ::realm::decimal 128 ()
346 case internal::bridge::data_type::TypedLink:
347 スローstd::runtime_error( "混合プロパティに保存されているオブジェクトは、`get_object_value()` 経由でアクセスする必要があります。)
348 デフォルト:
349 slow std::runtime_error( "混合プロパティを逆直列化する際、不明なデータ型が発生します。" )
350 }
351 }
352
353} // namespace realm
354
355
356#endif//CPREALM_TypeS_HPP
定義: Managed_Dictionary.happ: 31
定義: types.happ: 75
定義: 10進数128 .happ: 30
定義: object_id.hpp:31
定義: types.hpp:56
定義: types.hpp:35