19#ifndef CPPRALM_ACCESSORS_HPP
20#define CPPRALM_ACCESSORS_HPP
22#include <cpprealm/internal/bridge/lnklst.hpp>
23#include <cpprealm/internal/bridge/obj.hpp>
24#include <cpprealm/internal/bridge/realm.hpp>
25#include <cpprealm/internal/bridge/table.hpp>
26#include <cpprealm/types.hpp>
32 템플릿 <
typename T,
typename =
oid>
45 const int64_t& value) {
50 구조체 접근자 <std::optional<int64_t>> {
54 const std::optional<int64_t>& value) {
72 구조체 접근자 <std::optional<double>> {
76 const std::optional<double>& value) {
94 구조체 접근자 <std::optional<bool>> {
98 const std::optional<bool>& value) {
100 obj.set(key, *value);
109 구조체 접근자 <T, std::enable_if_t<std::is_enum_v<T>>> {
114 객체. 설정하다(key,
static_cast<int64_t
>(value));
118 구조체 접근자 <T, std::enable_if_t<std::con Junction_v<internal::type_info::is_optional<T>, std::is_enum<typename T::value_type>>>>> {
124 obj.set(key,
static_cast<int64_t
>(*value));
132 구조체 접근자 <T, std::enable_if_t<internal::type_info::MixedPersistableConcept<T>::value>> {
137 객체. 설정하다(key, serialize(value));
148 객체. (키, 값)을 설정하다 합니다.
152 구조체 접근자 <std::optional<uuid>> {
156 const std::optional<uuid>& value) {
158 obj.set(key, *value);
170 객체. (키, 값)을 설정하다 합니다.
174 구조체 접근자 <std::optional<object_id>> {
178 const std::optional<object_id>& value) {
180 obj.set(key, *value);
193 객체. (키, 값)을 설정하다 합니다.
197 구조체 접근자 <std::optional<decimal128>> {
201 const std::optional<decimal128>& value) {
203 obj.set(key, *value);
211 구조체 접근자 <std::chrono::time_point<std::chrono::system_clock>> {
215 const std::chrono::time_point<std::chrono::system_clock>& value) {
216 객체. (키, 값)을 설정하다 합니다.
220 구조체 접근자 <std::optional<std::chrono::time_point<std::chrono::system_clock>>> {
224 const std::optional<std::chrono::time_point<std::chrono::system_clock>>& value) {
226 obj.set(key, *value);
234 구조체 접근자<std::string> {
238 const std::string& value) {
239 객체. (키, 값)을 설정하다 합니다.
243 구조체 접근자 <std::optional<std::string>> {
247 const std::optional<std::string>& value) {
249 obj.set(key, *value);
257 구조체 접근자 <std::vector<uint8_t>> {
261 const std::vector<uint8_t>& value) {
262 객체. (키, 값)을 설정하다 합니다.
266 구조체 접근자 <std::optional<std::vector<uint8_t>>> {
270 const std::optional<std::vector<uint8_t>>& value) {
272 obj.set(key, *value);
279 구조체 접근자 <std::vector<T>> {
283 const std::vector<T>& value) {
284 obj.set_list_values(key, value);
288 구조체 접근자 <std::vector<T*>> {
292 const std::vector<T*>& value) {
293 자동 목록 = obj.get_linklist(key);
294 for (
size_t i = 0; i < value.size(); i++) {
295 auto& lnk = value[i];
299 자동 테이블 = obj.get_target_table(key);
305 m_obj = list.create_and_insert_linking_object(i);
307 m_obj = table.create_object();
309 std::apply([&m_obj, &lnk, &realm](
auto && ...p) {
310 (
접근자 <
typename std::decay_t<
decltype(p)>::Result>::set(
311 m_obj, m_obj.get_table().get_column_key(p.name), Realm,
312 (*lnk).*(std::decay_t<
decltype(p)>::ptr)), ...);
315 list.add(m_obj.get_key());
321 구조체 접근자 <std::set<T>> {
325 const std::set<T>& value) {
327 for (
const auto& v : value) {
328 설정하다.insert(serialize(v));
333 구조체 접근자 <std::set<T*>> {
337 const std::set<T*>& value) {
339 for (
const auto& lnk : value) {
343 자동 테이블 = obj.get_target_table(key);
349 m_obj = table.create_object();
351 std::apply([&m_obj, &lnk, &realm](
auto && ...p) {
352 (
접근자 <
typename std::decay_t<
decltype(p)>::Result>::set(
353 m_obj, m_obj.get_table().get_column_key(p.name), Realm,
354 (*lnk).*(std::decay_t<
decltype(p)>::ptr)), ...);
357 set.insert(m_obj.get_key());
363 구조체 접근자 <std::map<std::string, T>> {
367 const std::map<std::string, T>& value) {
368 auto d = obj.get_dictionary(key);
369 for (
auto& [k, v] : value) {
370 만약 constexpr (internal::type_info::MixedPersistableConcept<T>::value) {
371 d.insert(k, std::visit([](
auto&& arg) {
377 만약 constexpr (std::is_enum_v<typename T::value_type>) {
379 d.insert(k,
static_cast<typename std::underlying_type<typename T::value_type>::type
>(*v));
396 구조체 접근자 <std::map<std::string, T*>> {
400 const std::map<std::string, T*>& value) {
401 auto d = obj.get_dictionary(key);
402 for (
auto& [k, v] : value) {
407 m_obj = d.create_and_insert_linking_object(k, pk.value);
409 m_obj = d.create_and_insert_linking_object(k);
411 std:: 적용([&m_obj, &realm, o = *v](
auto && ...p) {
412 (
접근자 <
typename std::decay_t<
decltype(p)>::Result>::set(
413 m_obj, m_obj.get_table().get_column_key(p.name), Realm,
414 o.*(std::decay_t<
decltype(p)>::ptr)), ...));
416 d.insert(k, m_obj.get_key());
434 자동 테이블 = obj.get_target_table(key);
439 obj.set(key, m_obj.get_key());
441 m_obj = obj.create_and_set_linking_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 (
접근자 <
typename std::decay_t<
decltype(p)>::Result>::set(
448 m_obj, m_obj.get_table().get_column_key(p.name), Realm,
449 (*value).*(std::decay_t<
decltype(p)>::ptr)), ...);
469 만약 constexpr (std::is_enum_v<T>) {
470 obj.set(key,
static_cast<int64_t
>(value.value));
472 obj.set(key, value.value);
정의: managed_primary_key.hpp:30