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

flex_sync.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#ifndif CPREALM_FLEXIBLE_SYNC_HPP
20CPREALM_FLEXIBLE_SYNC_HPP を定義する
21
22#include <feature"<future>
23#include <type_traits>
24
25#include <cpprealm/ internal/bridge/obj.hpp>
26#include <cpprealm/ internal/bridge/query.hpp>
27#include <cpprealm/ internal/bridge/schema.hpp>
28#include <cpprealm/ internal/bridge/realm.hpp>
29#include <cpprealm/ internal/bridge/uts.hpp>
30
31#include <cpprealm/macros.hpp>
32#include <cpprealm/results.hpp>
33#include <cpprealm/rbool.hpp>
34
35名前空間邦土 {
36 テンプレート< typename >
37 構造体 オブジェクト
38 クラス rbool;
39
40 namespace sync {
41 クラスMutableSubscriptionSet
42 クラスSubscriptionSet
43 クラスSubscription Store
44 クラスのサブスクリプション
45 }
46
47// SyncSubscription は、同じオブジェクトクラス上の他のクエリと OR される可能性がある単一のクエリを表します
48// QUERY または IDENT メッセージでサーバーに送信します。
50 // このサブスクライブの一意の ID を返します。
51 std::string 識別子
52 // このサブスクリプションを表す名前。
53std::optional[std::string]><std::string> 名前。
54 // このサブスクリプションが最初に作成されたときの タイムスタンプを返します。
55std::chrono::time_point<std::chrono::system_clock> created_at
56 // update_query を呼び出して、このサブスクリプションが最後に更新された時刻のタイムスタンプを返します。
57std::chrono::time_point=std::chronno::system_lock><std::chrono::system_clock> update_at.
58 // このサブスクリプションに関連付けられているクエリの文字列化されたバージョンを返します。
59 std::string query_string
60 // このサブスクライブのクエリのオブジェクト クラスの名前を返します。
61 std::string object_Class_name
62 private :
63 同期_サブスクリプション( const sync::サブスクリプション())
64
65 友人 構造体 sync_subscription_set;
66 友人 構造体 mutable_sync_subscription_set;
67 };
68
69// MutableSyncSubscriptionSet は単一のクエリを表します。このクエリは、同じオブジェクト クラス上の他のクエリと OR される可能性があり、
70// QUERY または IDENT メッセージでサーバーに送信します。
72 private :
73 null insert_or_assign ( const std::string+ name、 const internal::bridge::query &)
74 public :
75 Mutable_sync_subscription_set () = delete
77 Mutable_sync_subscription_set & 演算子=( const Mutable_sync_subscription_setとその他) :
81
82 // サブスクリプションがまだ存在しない場合は、セットに新しいサブスクリプションを挿入します。
83 // `query_fn` パラメーターが空のままの場合、サブスクライブは *すべて* オブジェクトを同期します
84 テンプレート化されたクラス タイプの場合は、 // 。
85 テンプレート< typename T>
86 disabledconst std::string &name )、
87std::optional=std::function= rbool ( マネージド=T<T> ============================================================================
88 静的_アサート( のサイズマネージド <T> )、 「T のスキーマを宣言する必要があります」 )。
89
90 オートスキーマ = m_realm.get().schema().find(マネージド<T>::schema .name)
91 自動グループ = m_realm.get().read_group()
92 自動テーブル_参照 = group.get_table(schema.table_key())
93 自動root_query = internal::bridge::query (table_ref)
94
95 if (query_fn) {
96 rboolクエリ = rbool (std::move( root_query))の場合
97 自動query_object = Managed<T>::prepare_for_query (m_realm, &query)
98 auto full_query = (*query_fn)(query_object).q
99 insert_or_assign(name, full_query)
100 } else {
101 insert_or_assign(name, root_query)
102 }
103 }
104
105 // 指定された名前のサブスクライブを削除します。 サブスクライブで
106 // 存在しません。
107 無効な削除( const std::string & 名前)。
108
109 // 指定された名前のサブスクライブを検索します。 サブスクライブでは `std::nullopt` が返されます
110 // 存在しません。
111std::optional[sync_subscription]><sync_subscription> find( const std::string+ name)
112
113 // 指定された名前のサブスクライブを更新します。
114 //サブスクライブが存在しない場合は、 がスローされます。
115 // `query_fn` パラメーターが空のままの場合、サブスクライブは *すべて* オブジェクトを同期します
116 テンプレート化されたクラス タイプの場合は、 // 。
117 テンプレート< typename T>
118std::enable_if_t=std::is_base_ of_v=object=T================================================<T>
119 update_subscription( const std::string+name, std::optional=std::function= rbool (T+)=std::nullopt) {{
120 remove(name)
121 add(name, std::move(query_fn))#
122 }
123
124 // 指定された名前のサブスクライブを更新します。
125 //サブスクライブが存在しない場合は、 がスローされます。
126 // `query_fn` パラメーターが空のままの場合、サブスクライブは *すべて* オブジェクトを同期します
127 テンプレート化されたクラス タイプの場合は、 // 。
128 テンプレート< typename T>
129 無効な更新_サブスクリプション( const std::string+ name)
130std::optional=std::function= rbool ( マネージド=T<T> ================================================================================
131 remove(name)
132 add(name, std::move(query_fn))#
133 }
134
135 // すべてのサブスクライブを削除します。
136 無効クリア()。
137
138 private :
139 Mutable_sync_subscription_setinternal::bridge::realm &、 const sync::MutableSubscriptionSet?subscript_set )
140#ifdef CPREALM_HAV_GENERTED_BRIDGE_TypeS
141 internal::bridge::storage::MutableSyncSubscriptionSet m_subscription_set[ 1 ]
142#else
143std::shared_ptr[sync::MutableSubscriptionSet]><sync::MutableSubscriptionSet> m_subscription_set
144#endif
145 std::reference_ wrapper<internal::bridge::realm> m_realm。
146 友人 構造体 sync_subscription_set;
147 sync::MutableSubscriptionSet get_subscription_set()
148 };
149
151 public :
152 sync_subscription_set () = delete
153 sync_subscription_setconst sync_subscription_set & その他)= delete
154 sync_subscription_set & 演算子=( const sync_subscription_set & その他) :
156 sync_subscription_set & 演算子=( sync_subscription_set &その他)
158
160 [[nodiscard]] size_tサイズ() const
161
162 // 指定された名前のサブスクライブを検索します。 サブスクライブでは `std::nullopt` が返されます
163 // 存在しません。
164std::optional[sync_subscription]><sync_subscription> find( const std::string+ name)
165
166 std::future<bool> update(std::function<void(mutable_sync_subscription_set&)>&& fn);
167
168 explicit sync_subscription_setinternal::bridge::realm & Realm)
169 private :
170 友人 構造体 db;
171#ifdef CPREALM_HAV_GENERTED_BRIDGE_TypeS
172 internal::bridge::storage::SyncSubscriptionSet m_subscription_set[ 1 ]
173#else
174std::shared_ptr[sync::SubscriptionSet><sync::SubscriptionSet> m_subscription_set]
175#endif
176 std::reference_ wrapper<internal::bridge::realm> m_realm。
177 };
178
179} // namespace realm
180
181#endif /* CPPrealM_FLEXIBLE_SYNC_HPP */
定義: rbool.hpp:36
Definition: db.hpp:63
定義: query.happ: 131
Definition: realm.hpp:67
定義: Flex_sync.happ: 37
定義: Flex_sync.hpp:150
size_t size()const
セット内のサブスクライブの合計数。
定義: Flex_sync.cp: 134
定義: Flex_sync.happ: 49