Realm C++ SDK版本 v 2.2.0

realm.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// 除非适用法律要求或书面同意,否则软件
12// 根据许可证分发是按“原样”分发的,
13// 不提供任何类型的Express或暗示的保证或条件。
14// 请参阅管理权限的特定语言的许可证和
15// 许可证下的限制。
16//
18
19#ifndef CPPREALM_BRIDGE_REALM_HPP
20#define CPPREALM_BRIDGE_REALM_HPP
21
22#include <cpprealm/internal/bridge/utils.hpp>
23
24#include<functional>
25#include <map>
26#include<memory>
27#include<optional>
28#include <string>
29#include<vector>
30
31命名空间域 {
32 class Realm;
33 struct RealmConfig;
34 struct SyncConfig;
35 struct scheduler;
36 class SyncUser;
37 命名空间应用 {
38 class User;
39 }
40
41 enum class client_reset_mode: uint 8 _t {
42 // 触发客户端重置错误
43手册,
44 // 丢弃未同步的本地更改,而不中断访问器或关闭 Realm
45 Discard_unsynced,
46 // 尝试恢复未同步但已提交的更改。
47恢复,
48 // 尝试恢复,如果失败,则丢弃 local。
49 recover_or_discard,
50 };
51 }
52
53命名空间realm::internal::bridge {
54 template < typename T> struct client_reset_mode_base;
55 struct group;
56 结构模式;
57 struct object_schema;
58 结构表;
59 struct字典;
60 structthread_safe_reference
61 struct obj;
62 struct对象;
63 struct async_open_task;
64 struct sync_session;
65 struct sync_error;
66
67 struct Realm {
68 枚举 class sync_session_stop_policy: uint 8 _t {
69立即, //一旦所有Go /会话超出范围,立即停止会话。
70 live_indefinitely, // 永不停止会话。
71 after_changes_uploaded, Go一旦所有 Realm/会话都超出范围,请等待上传完成并停止。
72 };
73
74 struct sync_config {
75
76 struct proxy_config {
77 using port_type = std::uint_fast 16 _t;
78 std::string 地址;
79 port_type port;
80 // 用于基本授权。
81 std::Optional<std::pair<std::string, std::string>> username_password;
82 };
83
85 sync_config() {}
86 sync_config ( const std::shared_ptr<SyncUser> & user );
87 sync_config ( const std::shared_ptr<SyncConfig> &); //NOLINT(google-explicit-constructor)
88 Operator std::shared_ptr<SyncConfig>() const ; //NOLINT(google-explicit-constructor)
89 void set_stop_policy(sync_session_stop_policy &&);
90 void set_error_handler(std::function< void ( const sync_session &, const sync_error &)> &&fn);
91
92 private :
93 std::shared_ptr<SyncConfig> m_config;
94 };
95
96 struct 配置{
97 // 如何处理对具有以下内容的文件调用 update_schema()
98 // 已经使用不同的模式进行了初始化
99 enum class schema_mode : uint 8 _t {
100 // 如果模式版本已增加,则自动应用所有
101 // 更改,然后调用迁移函数。
102 //
103 // 如果模式版本未更改,则验证唯一
104 // 更改是为了添加新表以及添加或删除索引,然后
105 // 如果是这样,则应用它们。 不调用迁移函数。
106 //
107 // 此模式不会自动删除不符合以下条件的表:
108 // 存在于模式中,必须在迁移中手动完成
109 // 函数,以支持在进程之间共享 Realm 文件
110 // 不同类的子集。
111 //
112 // 此模式允许将模式与表的不同子集一起使用
113 // 在不同的线程上,但共享的表必须是
114 // 相同。
115自动,
116
117 // 以不可变模式打开文件。 模式版本必须匹配
118 // 文件中的版本,并且文件中存在的所有表必须
119 // 与指定模式完全匹配,索引除外。 表格
120 // 允许从文件中缺失。
121不可变,
122
123 // 以只读模式打开 Realm,不允许事务
124 // 在 Realm 实例上执行。 现有 Realm 的模式
125 //文件不会通过此Realm 实例进行更改。 额外的表和
126 // 现有Realm模式中允许使用额外的属性。 的
127 // 索引的差异也是允许的。 其他模式差异
128 // 比这些会导致异常。 这与不可变
129 // 模式,sync Realm 可以用 ReadOnly 模式打开。 更改
130 // 可以通过另一个可写 Realm 实例对 Realm 文件进行写入。
131 // 因此,在此模式也允许通知。
132 read_only,
133
134 // 如果模式版本匹配,并且唯一的模式更改是新的
135 // 添加或删除表和索引,应用更改应用于
136 // 现有文件。
137 // 否则,请删除该文件并从头开始重新创建。
138 // 未使用迁移函数。
139 //
140 // 此模式允许将模式与表的不同子集一起使用
141 // 在不同的线程上,但共享的表必须是
142 // 相同。
143 soft_reset_file,
144
145 // 删除文件并从头开始重新创建。
146 // 未使用迁移函数。
147 hard_reset_file,
148
149 // 唯一允许的更改是添加新表、向
150 // 现有表,并在现有表中添加或删除索引
151 // 列。 模式中不存在的额外表将被忽略。
152 // 只有在以下情况下,索引才会添加到现有列或从现有列中删除:
153 // 模式版本大于现有版本(并且与其他
154 // 模式,模式版本允许低于现有模式
155 // one).
156 // 未使用迁移函数。
157 // 当包含已发现的用户类时,应使用该选项。
158 // 以前称为加法。
159 //
160 // 此模式允许使用附加更改来更新模式,甚至
161 // 如果 Realm 已在另一个线程上打开。
162 Additive_discovered,
163
164 // 与 AdditiveDiscovered 相同的附加属性,不同之处在于
165 // 在这种模式下,模式中的所有类都已显式
166 // 由用户包含。 这意味着更严格的模式检查
167 // 当嵌入式对象类型为
168 // 不与任何顶级对象类型链接。
169 Additive_explicit,
170
171 // 验证模式版本是否已增加,调用迁移
172 // 函数,然后验证模式现在是否匹配。
173 // 此模式必须使用迁移函数。
174 //
175 // 此模式要求所有打开
176 // 文件使用相同的模式。
177手册
178 };
179 config ();
180 config ( const config & other);
181 config & 操作符=( const config & other);
182 config ( config && other);
183 config & 操作符=( config && other);
184 ~config ();
185 config ( const RealmConfig&); //NOLINT(google-explicit-constructor)
186 config ( const std::string& path,
187 const std::shared_ptr<struct scheduler>& scheduler );
188 [[nodiscard]] std::string path() const ;
189 [[nodiscard]] struct sync_config sync_config () const;
190 [[nodiscard]] std::shared_ptr<struct scheduler> scheduler () const ;
191 Operator RealmConfig() const ; //NOLINT(google-explicit-constructor)
192 void set_path( const std::string&);
193 void set_schema( const std::vector<object_schema>&);
194 void set_schema_mode(schema_mode);
195 void set_scheduler( const std::shared_ptr<struct scheduler>&);
196 void set_sync_config( const std::Optional<struct sync_config>&);
197 void set_custom_http_headers( const std::map<std::string, std::string>& headers);
198 void set_proxy_config( const sync_config::proxy_config &);
199 void set_schema_version(uint 64 _t version);
200 void set_encryption_key( const std::array<char, 64 >&);
201 void should_compact_on_launch(std::function< bool (uint 64 _t total_bytes, uint 64 _tused_bytes)>&& fn);
202std::Optional<schema> get_schema();
203
204 template < typename T>
205 void set_client_reset_handler( const client_reset_mode_base<T> & handler) {
206 before_client_reset([fn = std::move(handler.m_before)]( realm local_realm) {
207 fn(local_realm.freeze());
208 });
209 after_client_reset([fn = std::move(handler.m_after)]( realm local_realm, realmremote_realm ) {
210 fn(local_realm.freeze(), remote_realm);
211 });
212 set_client_reset_mode(handler.m_mode);
213 }
214 enum client_reset_mode get_client_reset_mode() const;
215 private :
216 void set_client_reset_mode(enum client_reset_mode mode);
217 void before_client_reset(std::function< void ( old_realm)> 回调);
218 void after_client_reset(std::function< void ( realm local_realm, Realm Remote_realm)> callback);
219 inline RealmConfig* get_config();
220 内联 const RealmConfig* get_config() const ;
221#ifdef CPPREALM_HAVE_GENERATED_BRIDGE_TYPES
222 storage::Realm_Config m_config[ 1 ];
223#else
224 std::shared_ptr<RealmConfig> m_config;
225#endif
226 };
227
228 Realm ();
229 Realm ( const config &); //NOLINT(google-explicit-constructor)
230 realm (std::shared_ptr<Realm>); //NOLINT(google-explicit-constructor)
231 realm ( thread_safe_reference && tsr, const std::Optional<std::shared_ptr<scheduler>>&); //NOLINT(google-explicit-constructor)
232 Operator std::shared_ptr<Realm>() const ; //NOLINT(google-explicit-constructor)
233 群组 read_group();
234 [[nodiscard]] config get_config() const ;
235 [[nodiscard]] struct schema schema () const;
236 void begin_transaction() const ;
237 void commit_transaction() const ;
238 table_for_object_type( const std::string& object_type);
239 Table get_table( const uint 32 _t &);
240 [[nodiscard]] std::shared_ptr<struct scheduler> scheduler () const ;
241 静态 async_open_task get_synchronized_realm( const config &);
242 bool refresh();
243 bool is_frozen() const ;
244 冻结(); // 抛出异常
245 Realm thaw(); // 抛出异常
246 void close();
247 bool is_close();
248 void invalidate();
249 obj import_copy_of( const obj &) const ;
250 [[nodiscard]] std::Optional<sync_session> get_sync_session() const ;
251 private :
252 std::shared_ptr<Realm> m_realm;
253 朋友 struct 群组;
254 };
255
256 template < typename T>
258 protected
259 std::function<void(T local)> m_before;
260 std::function<void(T local, Tremote)> m_after;
261 ::realm::client_reset_mode m_mode;
262 朋友 struct inside::bridge::realm::config
263 };
264
265 template < typename T>
266 Tsolve( const &, thread_safe_reference && tsr);
267 template <>
268 字典解析(常量领域&, thread_safe_reference && tsr);
269 template <>
270 对象解析(常量领域&, thread_safe_reference && tsr);
271
272 bool 操作符 ==( const &, const &);
273 bool Operator !=( const realm &, const realm &);
274 }
275
276#endif //CPREALM_BRIDGE_REALM_HPP
定义: async_open_task.hpp: 31
定义: dictionary.hpp: 138
定义: obj.hpp: 244
定义: obj.hpp:123
定义: realm.hpp: 67
定义: schema.hpp: 32
定义: sync_error.hpp:40
定义: sync_session.hpp:33
定义: table.hpp:40
定义: thread_safe_reference.hpp: 32
定义: scheduler.hpp: 27
定义: app.hpp: 92