19#ifndef CPPREALM_OBSERVATION_HPP
20#define CPPREALM_OBSERVATION_HPP
22#include <cprealm/internal/bridge/list.hpp>
23#include <cpprealm/internal/bridge/obj.hpp>
24#include <cpprealm/internal/bridge/ objeto.hpp>
25#include <cprealm/internal/bridge/realm.hpp>
26#include <cprealm/macros.hpp>
28#include <cprealm/internal/bridge/table.hpp>
29#include <cprealm/internal/bridge/thread_safe_reference.hpp>
38 utilizando subjacente = T;
61 std::shared_ptr<internal::bridge::object> internal_object)
62 : block(std::move(b)),
object(*obj), m_object(internal_object) {
63 estático_cast <vazio>(obj);
67 std::shared_ptr<internal::bridge::object> m_object;
69 std::opcional <std::vector<std::string>> Property_names = std::nullopt;
70 std::opcional <std::vector <
typename decltype(T::schema)::variant_t>> old_values = std::nullopt;
77 if (!c.deletions().empty()) {
81 se (c.columns().empty() {
85 propriedades
automáticas = std::vector<std::string>();
86 auto table = m_object->get_obj().get_table();
88 for (
auto i = 0; i < std::tuple_size<
decltype(T::schema.properties)>{}; i++) {
89 se (c.columns().count(table.get_column_key(T::schema.names[i]).value())) {
90 propriedades.push_back(T::schema.names[i]);
94 se (!properties.empty()) {
95 Property_names = propriedades;
99 std::opcional<std::vector<
typename decltype(T::schema)::variant_t>>
104 preenchimento_properties(c);
105 se (!property_names) {
109 std::vector< nome
do tipo
decltype (T::schema):: variant_t > valores;
110 para (
auto &name: *property_names) {
111 valor
automático = T::schema.property_value_for_name(nome,
objeto,
verdadeiro);
112 valores.push_back(value);
118 valores_antigos = valores_de leitura(c);
122 auto new_values = read_values(c);
124 forward_change(
nullptr, { }, { }, { },
nullptr);
125 }
mais se (new_values) {
126 forward_change(&
objeto,
128 valores_antigos ? *old_values : std::vector<
typename decltype(T::schema)::variant_t>{},
132 Nomes_de Propriedades = std::nulopt;
133 valores_antigos = std::nulopt;
136 erro
nulo (std::exceção_ptr err) {
137 forward_change(
nullptr, { }, { } , { } , err);
140 forward_change (
const T *ptr,
141 std::vector<std::string> Property_names,
142 std::vector<
typename decltype(T::schema)::variant_t> old_values,
143 std::vector<
typename decltype(T::schema)::variant_t> new_values,
144 const std::exException_ptr &error) {
152 oc.is_deleted =
true;
156 std::vector<PropertyChange<T>> Property_changes;
157 for (
size_t i = 0; i < Property_names.size(); i++) {
159 propriedade.
nome = Property_names[i];
160 se (!old_values.empty()) {
161 propriedade.old_value = valores_antigos[i];
163 se (!new_values.empty()) {
164 propriedade.new_value = new_values[i];
166 Property_changes.push_back(std::move(property));
170 oc.property_changes = Property_changes;
177 std::vector<uint64_t> exclusões;
178 std::vector<uint64_t> inserções;
179 std::vector<uint64_t> modificações;
184 bool collection_root_was_deleted =
false;
186 [[nodiscard]]
bool empty()
const noexceto {
187 return deleteries.empty() && inserts.empty() && modified.empty() &&
188 !collection_root_was_deleted;
194 bool ignoreChangesInInitialNotification;
197 bool ignoreChangesInInitialNotification)
199 , ignoreChangesInitialNotification(ignoreChangesInInitialNotification)
205 se (ignoreChangesInInitialNotification) {
206 ignoreChangesInInitialNotification =
false;
209 mais se (changes.empty()) {
213 mais se (!changes.collection_root_was_deleted() || !changes.deletions().empty() {
214 manipulador({to_vector(changes.deletions()),
215 to_vector(changes.insertions()),
216 to_vector(changes.modifications()),
223 auto vector = std::vector<uint64_t>();
224 para ( índice
automático : index_set.as_indexes()) {
225 vector.push_back(index);
237 stream <<
"\tis_deleted: " <<
object.is_deleted <<
"\n";
238 stream <<
"\tchange_to: " <<
object.property.name <<
"\n";
239 se (
objeto. propriedade.old_value) {
240 stream <
"\told_value: ";
241 std::visit([&stream](
auto&& arg) {
242 usando M = std::decay_t<
decltype(arg)>;
243 stream <<static_cast<M>(arg);
244 }, *
objeto. propriedade.old_value);
246 se (
objeto. propriedade.new_value) {
247 stream <<
"\tnew_value: ";
248 std::visit([&stream](
auto&& arg) {
249 usando M = std::decay_t<
decltype(arg)>;
250 stream <<static_cast<M>(arg);
251 }, *
object.property.new_value);
Definição: notificações.hpp:80
std::string name
Definição: notificações.hpp:84
Definição: observação.hpp:192
Definição: observação.hpp:176
Definição: object.hpp:148
Definição: object.hpp:126
Definição: observação.hpp:58
Definição: observação.hpp:37
bool is_deleted
O objeto foi excluído do Realm.
Definição: observação.hpp:42
std::vector < PropertyChange< T > > Property_changes
Definição: observação.hpp:54
objeto constante T *
O objeto que está sendo observado.
Definição: observação.hpp:40
std::exception_ptr error
Definição: observação.hpp:50
Definição: flex_sync.hpp:37