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

flex_sync.hpp

1
2//
3// Autores 2022 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_FLEXIBLE_SYNC_HPP
20#define CPPREALM_FLEXIBLE_SYNC_HPP
21
22#include <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 <cprealm/internal/bridge/realm.hpp>
29#include <cprealm/internal/bridge/utils.hpp>
30
31#include <cprealm/macros.hpp>
32#include <cprealm/results.hpp>
33#include <cprealm/rbool.hpp>
34
35namespace Realm {
36 modelo <nome do tipo>
37 estrutura, estrutura objeto;
38 classe rbool;
39
40 namespace sync {
41 classe MutableSubscriptionSet;
42 classe Conjunto de Assinaturas;
43 classe SubscriptionStore;
44 inscrição de classe ;
45 }
46
47// Uma SyncSubscription representa uma única query que pode ser OR'd com outras queries na mesma classe de objeto a ser
48// enviar para o servidor em uma mensagem QUERY ou IDENT.
49 estrutura, estrutura sync_subscription {
50 // Retorna o ID exclusivo para esta assinatura.
51 std::identificador de string;
52 // O nome que representa esta assinatura.
53 std::opcional<std::string> nome;
54 // Retorna o registro de data/hora de quando esta assinatura foi originalmente criada.
55 std::chrono::time_point<std::chrono::system_clock> created_at;
56 // Retorna o registro de data/hora da última vez que esta assinatura foi atualizada chamando update_query.
57 std::chrono::time_point<std::chrono::system_clock> updated_at;
58 // Retorna uma versão em string da query associada a esta assinatura.
59 std::string query_string;
60 // Retorna o nome da classe de objeto da query para esta assinatura.
61 std::string object_class_name;
62 privado:
63 sync_subscription(const sync::Subscription &);
64
65 amigo estrutura, estrutura sync_subscription_set;
66 amigo estrutura, estrutura mutable_sync_subscription_set;
67 };
68
69// Um MutableSyncSubscriptionSet representa uma única query que pode ser OR com outras queries na mesma classe de objeto a ser
70// enviar para o servidor em uma mensagem QUERY ou IDENT.
71 estrutura, estrutura mutable_sync_subscription_set {
72 privado:
73 insert_or_assign (const std::string& name, const internal::bridge::query&);
74 público:
81
82 // Insere uma nova assinatura no conjunto se ainda não existir.
83 // Se o parâmetro `query_fn' ficar vazio, a assinatura sincronizará *todos* os objetos
84 // para o tipo de classe modelo.
85 modelo<typename T>
86 add(const std ::string &name ,
87 std::optional <std::function <rbool(managed<T> &)>> &&query_fn = std::nullopt) {
88 estático_assert(sizeof(managed<T>), "Deve declarar esquema para T");
89
90 auto schema = m_realm.get().schema().find(managed<T>::schema.name);
91 auto group = m_realm.get().read_group();
92 auto table_ref = group.get_table(schema.table_key());
93 auto root_query = internal::bridge::query(table_ref);
94
95 if (query_fn) {
96 query rbool = rbool(std::move(root_query));
97 auto 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 } mais {
101 insert_or_assign(name, root_query);
102 }
103 }
104
105 // Remove uma assinatura para um determinado nome. Lançará se a assinatura funcionar
106 // não existe.
107 removedor nulo ( std const ::string& name);
108
109 // Encontra uma assinatura para um determinado nome. Retornará 'std::nullopt' é a assinatura
110 // não existe.
111 std::opcional<sync_subscription> find(const std::string& name);
112
113 // Atualiza uma assinatura para um determinado nome.
114 // Lançará se a assinatura não existir.
115 // Se o parâmetro `query_fn' ficar vazio, a assinatura sincronizará *todos* os objetos
116 // para o tipo de classe modelo.
117 modelo <typename T>
118 std::enable_if_t<std::is_base_of_v< objeto<T>, T>>
119 update_subscription(const std::string& name, std::optional<std::function<rbool(T&)>>&& query_fn = std::nullopt) {
120 remover(nome);
121 add(name, std::move(query_fn));
122 }
123
124 // Atualiza uma assinatura para um determinado nome.
125 // Lançará se a assinatura não existir.
126 // Se o parâmetro `query_fn' ficar vazio, a assinatura sincronizará *todos* os objetos
127 // para o tipo de classe modelo.
128 modelo <typename T>
129 update_subscription (const std::string& name,
130 std::optional <std::function <rbool(managed<T>&)>>&& query_fn = std::nullopt) {
131 remover(nome);
132 add(name, std::move(query_fn));
133 }
134
135 // Remove todas as assinaturas.
136 null clear();
137
138 privado:
139 mutable_sync_subscription_set(internal::bridge::realm&, const sync::MutableSubscriptionSet& subscribe_set);
140#ifdef CPPREALM_HVE_GENERATED_BRIDGE_TYPes
141 internal::bridge::storage::MutableSyncSubscriptionSet m_subscription_set[1];
142#else
143 std::shared_ptr<sync::MutableSubscriptionSet> m_subscription_set;
144#endif
145 std::reference_wrapper<internal::bridge::realm> m_realm;
146 amigo estrutura, estrutura sync_subscription_set;
147 sync::MutableSubscriptionSet get_subscription_set();
148 };
149
150 estrutura, estrutura sync_subscription_set {
151 público:
152 sync_subscription_set() = excluir;
153 sync_subscription_set(const sync_subscription_sete outros) = excluir;
154 sync_subscription_set& operator=(const sync_subscription_set& other) ;
158
160 [[nodiscard]] size_t size() const;
161
162 // Encontra uma assinatura para um determinado nome. Retornará 'std::nullopt' é a assinatura
163 // não existe.
164 std::opcional<sync_subscription> find(const std::string& name);
165
166 std::future<bool> update(std::function<void(mutable_sync_subscription_set&)>&& fn);
167
169 privado:
170 amigo estrutura, estrutura db;
171#ifdef CPPREALM_HVE_GENERATED_BRIDGE_TYPes
172 internal::bridge::storage::SyncSubscriptionSet m_subscription_set[1];
173#else
174 std::shared_ptr<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 */
Definição: rbool.hpp:36
Definition: db.hpp:63
Definição: query.hpp:131
Definição: realm.hpp:67
Definição: flex_sync.hpp:71
Definição: flex_sync.hpp:37
Definição: flex_sync.hpp:150
size_t size() const
O número total de assinaturas no conjunto.
Definição: flex_sync.cpp:134
Definição: flex_sync.hpp:49