19#ifndef CPPREALM_ACCESSORS_HPP
20#define CPPREALM_ACCESSORS_HPP
22#include <cpprealm/internal/bridge/lnklst.hpp>
23#include <cpprealm/internal/bridge/obj.hpp>
24#include <cprealm/internal/bridge/realm.hpp>
25#include <cprealm/internal/bridge/table.hpp>
26#include <cprealm/types.hpp>
30 primary_key da
estrutura ;
32 template <
typename T,
typename =
null>
45 const int64_t& valor) {
46 obj.set(chave, valor);
50 estrutura, estrutura accessor<std::optional<int64_t>> {
54 const std::opcional<int64_t>valor) {
67 const valor
duploe valor) {
68 obj.set(chave, valor);
72 estrutura, estrutura accessor<std::optional<double>> {
76 const std::opcional<double>&) {
90 obj.set(chave, valor);
94 estrutura, estrutura accessor<std::optional<bool>> {
98 const std::opcional<bool>& valor) {
100 obj.set(key, *value);
109 estrutura, estrutura accessor<T, std::enable_if_t<std::is_enum_v<T>>> {
114 obj.set(key,
static_cast<int64_t
>(valor));
118 estrutura, estrutura accessor<T, std::enable_if_t<std::conjunction_v<internal::type_info::is_optional<T>, std::is_enum<typename T::value_type>>>> {
124 obj.set(key,
static_cast <int64_t
>(*value));
132 estrutura, estrutura accessor<T, std::enable_if_t<internal::type_info::MixedPersistableConcept<T>::value>> {
137 obj.set(key, serialize(value));
148 obj.set(chave, valor);
152 estrutura, estrutura accessor<std::optional<uuid>> {
156 const std::opcional<uuid>valor) {
158 obj.set(key, *value);
170 obj.set(chave, valor);
174 estrutura, estrutura acessador<std::opcional<object_id>> {
178 const std::opcional<object_id>& valor) {
180 obj.set(key, *value);
193 obj.set(chave, valor);
197 estrutura, estrutura acessante<std::opcional <decimal128>> {
201 const std::opcional <decimal128>& valor) {
203 obj.set(key, *value);
211 estrutura, estrutura acessador<std::chrono::time_point<std::chrono::system_clock>> {
215 const std::chrono::time_point<std::chrono::system_clock>valor) {
216 obj.set(chave, valor);
220 estrutura, estrutura accessor<std::optional<std::chrono::time_point<std::chrono::system_clock>>> {
224 const std::opcional<std::chrono::time_point<std::chrono::system_clock>>valor) {
226 obj.set(key, *value);
238 const std::string& valor) {
239 obj.set(chave, valor);
243 estrutura, estrutura accessor<std::opcional<std::string>> {
247 const std::opcional<std::string>& valor) {
249 obj.set(key, *value);
257 estrutura, estrutura accessor<std::vector<uint8_t>> {
261 const std::vector<uint8_t>valor) {
262 obj.set(chave, valor);
266 estrutura, estrutura accessor<std::opcional <std::vector <uint8_t>>> {
270 const std::opcional <std::vector <uint8_t>> valor) {
272 obj.set(key, *value);
283 const std::vetor<T>valor) {
284 obj.set_list_values(key, value);
292 const std::vector<T*>valor) {
293 auto list = obj.get_linklist(key);
294 for (
size_t i = 0; i < value.size(); i++) {
295 auto& lnk = valor[i];
299 auto table = obj.get_target_table(key);
305 m_obj = list.create_and_insert_linked_object(i);
307 m_obj = table.create_object();
309 std::apply([&m_obj, &lnk, &realm](
auto && ...p) {
310 (
acessador<
typename std::decay_t<
decltype(p)>::Result>::set(
311 m_obj, m_obj.get_table().get_column_key(p.name), domínio,
312 (*lnk).*(std::decay_t<
decltype(p)>::ptr)), ...);
315 list.add(m_obj.get_key());
325 const std::set<T>& valor) {
327 for (
const auto& v : valor) {
328 set.insert(serialize(v));
337 const std::set<T*>& valor) {
339 para (
const auto& lnk : valor) {
343 auto table = obj.get_target_table(key);
349 m_obj = table.create_object();
351 std::apply([&m_obj, &lnk, &realm](
auto && ...p) {
352 (
acessador<
typename std::decay_t<
decltype(p)>::Result>::set(
353 m_obj, m_obj.get_table().get_column_key(p.name), domínio,
354 (*lnk).*(std::decay_t<
decltype(p)>::ptr)), ...);
357 set.insert(m_obj.get_key());
363 estrutura, estrutura accessor<std::map<std::string, T>> {
367 const std::map<std::string, T>& valor) {
368 auto d = obj.get_ dictionary(key);
369 para (
auto& [k, v] : valor) {
370 se constexpr (internal::type_info::MixedPersistableConcept<T>::value) {
371 d.insert(k, std::visit([](
auto&& arg) {
377 se constexpr (std::is_enum_v<typename T::value_type>) {
379 d.insert(k,
static_cast<nome do<typename T::value_type> tipo std::sublying_type::tipo
>(*v));
396 estrutura, estrutura accessor<std::map<std::string, T*>> {
400 const std::map<std::string, T*>& valor) {
401 auto d = obj.get_ dictionary(key);
402 para (
auto& [k, v] : valor) {
407 m_obj = d.create_and_insert_linked_object(k, pk.value);
409 m_obj = d.create_and_insert_linked_object(k);
411 std::apply([&m_obj, &realm, o = *v](
auto && ...p) {
412 (
acessador<
typename std::decay_t<
decltype(p)>::Result>::set(
413 m_obj, m_obj.get_table().get_column_key(p.name), domínio,
414 o.*(std::decay_t<
decltype(p)>::ptr)), ...);
416 d.insert(k, m_obj.get_key());
434 auto table = obj.get_target_table(key);
439 obj.set(key, m_obj.get_key());
441 m_obj = obj.create_and_set_linked_object(key);
443 m_obj = table.create_object();
444 obj.set(key, m_obj.get_key());
446 std::apply([&m_obj, &realm, &value](
auto && ...p) {
447 (
acessador<
typename std::decay_t<
decltype(p)>::Result>::set(
448 m_obj, m_obj.get_table().get_column_key(p.name), domínio,
449 (*value).*(std::decay_t<
decltype(p)>::ptr)), ...);
469 se constexpr (std::is_enum_v<T>) {
470 obj.set(key,
static_cast<int64_t
>(value.value));
472 obj.set(key, value.value);
Definição: accessors.hpp:33
Definição: col_key.hpp:28
Definição: type_info.hpp:45
Definição: results.hpp:419
Definição: managed_primary_key.hpp:30