Realm C++ SDK Versão C++ v2.2.0

realm.hpp

1
2//
3// Autores 2024 Realm Inc.
4//
5// Licenciado sob a Licença Apache, Versão 2.0 (a "Licença");
6// você não pode usar este arquivo, exceto em conformidade com a Licença.
7// Você pode obter uma cópia da Licença em
8//
9// http://www.apache.org/license/LICENSE-2.0
10//
11// A menos que exigido pela lei aplicável ou acordado por escrito, o software
12// distribuído sob a Licença é distribuído "Como está",
13// sem garantias ou condições de qualquer tipo, Express ou implícitas.
14// Consulte a Licença para obter as permissões específicas de domínio do idioma e
15// limitações da Licença.
16//
18
19#ifndef CPPREALM_BRIDGE_REALM_HPP
20#define CPPREALM_BRIDGE_REALM_HPP
21
22#include <cprealm/internal/bridge/utils.hpp>
23
24#include <functional>
25#include <map>
26#include <memory>
27#include <optional>
28#include <string>
29#include <vector>
30
31namespace Realm {
32 classe Realm;
33 struct RealmConfig;
34 estrutura SyncConfig;
35 agendador de estrutura ;
36 class SyncUser;
37 aplicativo namespace {
38 usuário da classe ;
39 }
40
41 classe enum client_reset_mode: uint8_t {
42 // Dispara um erro de reinício do cliente
43 manual,
44 // Descarta alterações locais não sincronizadas, sem interromper os acessadores ou fechar o Realm
45 descarte_unsynced,
46 // Tenta recuperar alterações não sincronizadas, mas confirmadas.
47 recuperar,
48 // Tentar a recuperação e, se isso falhar, descartar local.
49 recover_or_discard,
50 };
51}
52
53namespace realm::internal::bridge {
54 modelo<typename T> struct client_reset_mode_base;
55 grupo estruturado ;
56 esquema de estrutura ;
57 estrutura object_schema;
58 tabela estrutura ;
59 dicionário estruturado ;
60 estrutura thread_safe_reference;
61 estrutura obj;
62 objeto estruturado ;
63 struct async_open_task;
64 sync_session da estrutura ;
65 struct sync_error;
66
67 estrutura, estrutura domínio {
68 classe enumeração sync_session_stop_policy: uint8_t {
69 imediatamente, // Pare imediatamente a sessão assim que todos os Realms/Sessões Go do escopo.
70 live_indefinitely, // Nunca interrompa a sessão.
71 after_changes_uploaded, Go Quando todos os Realms/Sessões sairem do escopo, aguarde a conclusão dos uploads e pare.
72 };
73
74 estrutura, estrutura sync_config {
75
76 estrutura, estrutura proxy_config {
77 usando port_type = std::uint_fast16_t;
78 std::string endereço;
79 porta_type;
80 // Para autorização básica.
81 std::optional<std::pair<std::string, std::string>> username_password;
82 };
83
84 estrutura, estrutura flx_sync_enabled {};
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 operador std::shared_ptr<SyncConfig>() const; //NOLINT(google-explicit-constructor)
89 set_stop_policy (sync_session_stop_policy &&);
90 vazio set_error_handler(std::function <vazio(const sync_session &, const sync_error &)> &&fn);
91
92 privado:
93 std::shared_ptr<SyncConfig> m_config;
94 };
95
96 estrutura, estrutura config {
97 // Como lidar com update_schema() sendo chamado em um arquivo que tem
98 // já foi inicializado com um esquema diferente
99 classe enum schema_mode : uint8_t {
100 // Se a versão do esquema tiver aumentado, aplique automaticamente todas
101 // alterações e, em seguida, chame a função de migração.
102 //
103 // Se a versão do esquema não tiver sido alterada, verifique se o único
104 // as alterações são para adicionar novas tabelas e adicionar ou remover índices, e então
105 // aplice-as em caso afirmativo. Não chama a função de migração.
106 //
107 // Este modo não remove automaticamente tabelas que não são
108 // presente no esquema que deve ser feito manualmente na migração
109 // função, para dar suporte ao compartilhamento de um arquivo Realm entre processos usando
110 // diferentes subconjuntos de classes.
111 //
112 // Este modo permite utilizar esquemas com diferentes subconjuntos de tabelas
113 // em threads diferentes, mas as tabelas que são compartilhadas devem ser
114 // idêntico.
115 automático,
116
117 // Abra o arquivo no modo imutável. A versão do esquema deve corresponder ao
118 // versão no arquivo, e todas as tabelas presentes no arquivo devem
119 // corresponde exatamente ao esquema especificado, exceto para índices. Tabelas
120 // podem estar ausentes do arquivo.
121 imutável,
122
123 // Abre o Realm no modo somente leitura, não são permitidas transações
124 // ser executada na instância do Realm. O esquema do Realm existente
125 // o arquivo não será alterado por esta Instância de Realm. Tabelas extras e
126 // propriedades extras são permitidas no esquema de Realm existente. Os
127 // a diferença de índices também é permitida. Outras diferenças de esquema
128 // do que esses causará uma exceção. Diferente de Imutável
129 // modo, sincronização O Realm pode ser aberto com o modo ReadOnly. Mudanças
130 // pode ser feito para o arquivo Realm por meio de outra instância gravável do Realm.
131 // Assim, as notificações também são permitidas neste modo.
132 read_only,
133
134 // Se a versão do esquema corresponder e as únicas alterações de esquema forem novas
135 // tabelas e índices que estão sendo adicionados ou removidos, aplique as alterações em
136 // o arquivo existente.
137 // Caso contrário, exclua o arquivo e recrie-o do zero.
138 // A função de migração não é utilizada.
139 //
140 // Este modo permite utilizar esquemas com diferentes subconjuntos de tabelas
141 // em threads diferentes, mas as tabelas que são compartilhadas devem ser
142 // idêntico.
143 soft_reset_file,
144
145 // Excluir o arquivo e recriá-lo do zero.
146 // A função de migração não é utilizada.
147 hard_reset_file,
148
149 // As únicas alterações permitidas são adicionar novas tabelas, adicionar colunas a
150 // tabelas existentes e para adicionar ou remover índices de tabelas existentes
151 // colunas. Tabelas extras não presentes no esquema são ignoradas.
152 // Os índices só são adicionados ou removidos das colunas existentes se o
153 // versão do esquema é maior que a existente (e diferente de outras
154 // modos, a versão do esquema pode ser menor que a existente
155 // um).
156 // A função de migração não é utilizada.
157 // Isso deve ser usado ao incluir classes de usuário descobertas.
158 // Anteriormente chamado de Aditivo.
159 //
160 // Este modo permite atualizar o esquema com alterações cumulativas, mesmo
161 // se o Realm já estiver aberto em outro thread.
162 aditivo_discovered,
163
164 // As mesmas propriedades aditivas que AdditiveDiscovered, exceto
165 // neste modo, todas as classes no esquema foram explicitamente
166 // incluído pelo usuário. Isso significa que verificações de esquema mais rigorosas são
167 // executar como lançar um erro quando um tipo de objeto incorporado que
168 // não está vinculado a nenhum tipo de objeto de nível superior incluído.
169 aditivo_explicit,
170
171 // Verificar se a versão do esquema aumentou, chame a migração
172 // função e, em seguida, verifique se o esquema agora corresponde.
173 // A função de migração é obrigatória para este modo.
174 //
175 // Este modo exige que todas as threads e processos que abrem um
176 // arquivo usa esquemas idênticos.
Manual 177
178 };
179 config();
180 config(configuração const e outros);
181 config& operator=(const config& other);
182 config(configuração&& outro);
183 config& operator=(config&& other);
184 ~config();
185 config(const RealmConfig&); //NOLINT(google-explicit-constructor)
186 config(const std::string& caminho,
187 const std::shared_ptr<struct scheduler>& agendador);
188 [[nodiscard]] std::string path() const;
189 [[nodiscard]] estrutura sync_config sync_config() const;
190 [[nodiscard]] std::shared_ptr<struct scheduler> agendador() const;
191 operador RealmConfig() const; //NOLINT(google-explicit-constructor)
192 set_path (const std::string&);
193 set_schema (const std::vector<object_schema>&);
194 set_schema_mode (schema_mode);
195 vazio set_scheduler(const std::shared_ptr<struct scheduler>&);
196 set_sync_config (const std::opcional<struct sync_config>&);
197 set_custom_http_headers (const std::map<std::string, std::string>e cabeçalhos);
198 set_proxy_config (const sync_config::proxy_config&);
199 set_schema_version (uint64_t version);
200 set_encryption_key (const std::array<char, 64>&);
201 null should_compact_on_launch (std::function<bool(uint64_t total_bytes, uint64_t utilizados_bytes)>&& fn);
202 std::optional<schema> get_schema();
203
204 modelo<typename T>
205 set_client_reset_handler vazio (client_reset_mode_base <T>e manipulador) {
206 before_client_reset([fn = std::move(handler.m_before)](domínio local_realm) {
207 fn(local_realm.freeze());
208 });
209 after_client_reset([fn = std::move(handler.m_after)](realm local_realm, realm remote_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 privado:
216 void set_client_reset_mode(enum client_reset_mode mode);
217 null before_client_reset (std::function <null(Realm old_realm ) > chamada de resposta de resposta );
218 vazio after_client_reset(std::function <vazio(realm local_realm, realm remoto_realm)> chamada de resposta);
219 inline RealmConfig* get_config();
220 in-line const RealmConfig* get_config() const;
221#ifdef CPPREALM_HVE_GENERATED_BRIDGE_TYPes
222 armazenamento::Realm_Config m_config[1];
223#else
224 std::shared_ptr<RealmConfig> m_config;
225#endif
226 };
227
228 domínio();
229 realm(const config&); //NOLINT(google-explicit-constructor)
230 domínio(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 operador std::shared_ptr<Realm>() const; //NOLINT(google-explicit-constructor)
233 grupo read_group();
234 [[nodiscard]] config get_config() const;
235 [[ nodiscard ]] esquema de estrutura () const;
236 vazio begin_transaction() const;
237 commit_transaction() nulo const;
238 tabela table_for_object_type(const std::string& object_type);
239 table get_table(const uint32_t &);
240 [[nodiscard]] std::shared_ptr<struct scheduler> agendador() const;
241 estático async_open_task get_synchronized_realm(const config&);
242 bool refresh();
243 bool is_congelado() const;
244 Realm congelado(); // joga
245 descongelamento do domínio (); // joga
246 vazio fechar();
247 bool is_closed();
248 vazio invalidar();
249 obj import_copy_of(const obj&) const;
250 [[nodiscard]] std::optional<sync_session> get_sync_session() const;
251 privado:
252 std::shared_ptr<Realm> m_realm;
253 amigo estrutura, estrutura grupo;
254 };
255
256 modelo<typename T>
257 estrutura, estrutura client_reset_mode_base {
258 protegido:
259 std::function <void(T local)> m_before;
260 std::function <void(T local, T remoto)> m_after;
261 ::realm::client_reset_mode m_mode;
262 amigo estrutura, estrutura internal::bridge::realm::config;
263 };
264
265 modelo <typename T>
266 T resolve(const Realm&, thread_safe_reference&& tsr);
267 modelo <>
268 resolução de dicionário (const realm&, thread_safe_reference&& tsr);
269 modelo <>
270 resolução de objetos (const realm&, thread_safe_reference&& tsr);
271
272 operador de bool ==(const Realm&, const Realm&);
273 operador de bool !=(const realm&, const realm&);
274}
275
276#endif //CPPrealm_BRIDGE_REALM_HPP
Definição: async_open_task.hpp:31
Definição: dictionary.hpp:138
Definição: obj.hpp:244
Definição: obj.hpp:123
Definição: realm.hpp:67
Definição: schema.hpp:32
Definição: sync_error.hpp:40
Definição: sync_session.hpp:33
Definição: table.hpp:40
Definição: thread_safe_reference.hpp:32
Definição: scheduled.hpp:27
Definição: app.hpp:92