19#ifndef CPPREALM_MANAGED_MIXED_HPP
20#define CPPREALM_MANAGED_MIXED_HPP
22#include <cprealm/macros.hpp>
23#include <cprealm/rbool.hpp>
24#include <cprealm/types.hpp>
28 estrutura, estrutura managed<T, std::enable_if_t< Realm::internal::type_info::MixedPersistableConcept<T>::value>> :
public managed_base {
29 Usando <T>gerenciado ::managed_base::operator=;
31 enumeração stored_type {
49 managed& operator =(
const T& v) {
50 m_obj->set(m_key, std::visit([](
auto&& arg) {
58 managed& operator =(
const U& v) {
63 [[nodiscard]] stored_type get_stored_type()
const {
66 return stored_type::Null;
68 Método estático_cast
<stored_type
>(val.type());
72 [[nodiscard]] T detach()
const {
76 [[nodiscard]] Operador de T *()
const {
81 rbool operator==(
const T& rhs)
const noexceto {
83 return this->m_rbool_query->mixed_equal(m_key, serialize(rhs));
85 return detach() == rhs;
88 operador
rbool !=(
const T& rhs)
const noexceto {
90 return this->m_rbool_query->mixed_not_equal(m_key, serialize(rhs));
92 return detach() != rhs;
95 rbool operator==(
const std::nullopt_t&)
const noexceto {
99 return detach() == T(std::monostate());
102 operador de
rbool !=(
const std::nullopt_t&)
const noexceto {
106 return detach() != T(std::monostate());
109 bool has_link()
const {
110 return (get_stored_type() == stored_type::TypedLink);
115 m_realm->read_group();
119 uint32_t alternate_key = m_realm->table_for_object_type(
managed<std::remove_pointer_t<U>>::schema.name).get_key();
120 uint32_t stored_table = obj.get_obj().get_table().get_key();
122 se (alternative_key != stored_table) {
123 lance std::runtime_error(
"Tipo de link diferente armazenado em tipo misto. Tipo armazenado: " + obj.get_object_schema().get_name());
130 estático_assert(
tamanho(
gerenciado<U>),
"Deve declarar esquema para T");
131 estático_assert(
gerenciado<U>::object_type == ObjectType::TopLevel,
"Propidades mistas só podem armazenar objetos de nível superior.");
138 o = table.create_object();
141 std::apply([&o, &v,
este](
auto && ...p) {
142 (
acessador<
typename std::decay_t<
decltype(p)>::Result>::set(
143 o, o.get_table().get_column_key(p.name), *This->m_realm, v.*(std::decay_t<
decltype(p)>::ptr)
161 modelo<
typename,
typename>
162 amigo estrutura, estrutura managed;
165 template<
typename T,
typename Types>
167 auto val = v.get_stored_type();
170 se constexpr (std::is_same_v<T, int64_t>)
174 se constexpr (std::is_same_v<T, bool>)
178 se constexpr (std::is_same_v<T, std::string>)
182 se constexpr (std::is_same_v<T, std::vector<uint8_t>>)
186 se constexpr (std::is_same_v<T, Types>)
190 se constexpr (std::is_same_v<T, std::chrono::time_point<std::chrono::system_clock>>)
194 se constexpr (std::is_same_v<T, float>)
198 se constexpr (std::is_same_v<T, double>)
202 se constexpr (std::is_same_v<T, realm::decimal128>)
206 se constexpr (std::is_same_v<T, realm::object_id>)
211 se constexpr (std::is_same_v<T, realm::uuid>)
215 se constexpr (std::is_same_v<T, std::monostate>)
219 se constexpr (std::is_pointer_v<T>) {
220 auto m = v.m_obj->template get<internal::bridge::mixed>(v.m_key);
221 uint32_t alternate_key = v.m_realm->table_for_object_type(
managed<std::remove_pointer_t<T>>::schema.name).get_key();
223 return alternate_key == stored_key;
Definição: accessors.hpp:33
Definição: obj_key.hpp:53
Definição: object.hpp:154
Definição: macros.hpp:286