19#ifndef CPPREALM_BRIDGE_LINK_HPP
20CPREALM_CRIDGE_Link_HPP を定義する
22#include <cpprealm/accessors.hpp>
23#include <cpprealm/macros.hpp>
24#include <cpprealm/rbool.hpp>
26#include <cpprealm/ internal/type_info.hpp>
29 テンプレート<
typename ,
typename >
36 Managed <T> m(m_obj->is_null(m_key)? *m_obj : m_obj->get_linked_object(m_key), *m_realm)
37 auto assign = [&m, &v](
auto& pair) {
38 (*v).*(std::decay_t<
Decltype ( pair.first)>::ptr) = (m.*(ペア.秒)). describe()
41 std::apply([+v, &m, &assign](
auto & & ... pair) {
63 ブール演算子 ==(
constmaned <T*> +rhs)
const {
64 場合(この ->m_managed.m_realm の場合 != *rhs.m_realm) {
67 returnこれを->m_managed.m_obj.get_key() ==rhs.m_obj->get_key()
69 ブール 演算子 ==(
constmaned <T>&rhs)
const {
70 次の
場合(この->m_managed.m_realm !=rhs.m_realm){{
73 returnこの->m_managed.m_obj.get_table() ==rhs.m_obj.get_table() & &
74 :この->m_managed.m_obj.get_key() ==rhs.m_obj.get_key()
76 ブール演算子 ==(
const ref_type+rhs)
const {
77 場合(この ->m_managed.m_realm の場合 .=rhs.m_managed.m_realm) {
80 returnこの->m_managed.m_obj.get_table() ==rhs.m_managed.m_obj.get_table() & &
81 :この->m_managed.m_obj.get_key() == rhs.m_managed.m_obj.get_key()
83 ブール演算子 !=(
constmaned <T*> &rhs)
const {
84 return !この->オペレーター==(rhs)
86 ブール 演算子 !=(
constmaned <T>+rhs)
const {
87 return !この->オペレーター==(rhs)
89 ブール演算子 !=(
const ref_type+rhs)
const {
90 return !この->オペレーター==(rhs)
95 ref_type 演算子 ->()
const {
96 場合(この ->m_rbool_query){
97この->m_rbool_query->add_link_tain(m_key)
100 return ref_type(
managed<T> (m_obj->get_linked_object(m_key), *m_realm))
103 if (m_obj && m_key) {
104 return !m_obj->is_null(m_key);
108マネージド & 演算子=(
constmaned <T>[T>+obj)] {
109 m_obj->set(m_key, obj.m_obj.get_key());
112マネージド & 演算子=(
const Managed <T*> &obj) {
113 m_obj->set(m_key, obj.m_obj->get_key());
116マネージド &operator=(std::nullptr_t){{
117 m_obj->set_null(m_key);
120 managed &operator=(T*o){{
121 自動テーブル = m_realm->table_for_object_type(managed<T>::schema.name)
122 internal::bridge::obj オブジェクト
124 m_obj->set_null(m_key);
126}
の 場合 ( managed<T> :: schema.HasPrimaryKeyProperty ){{
127 自動pk = (*o).*(managed<T>::schema.primary_key().ptr)
129 m_obj->set(m_key, obj.get_key());
130}
であれば ( managed<T> ::schema.is_ embedded()){{
131 obj = m_obj->create_and_set_linked_object(m_key)
133 obj =table.create_object()
134 m_obj->set(m_key, obj.get_key());
137 std::apply([+obj, &o, Realm = *m_realm](
auto & & ...p) {
138 (accessor=
typename std::decay_t
=decimaltype (p)>::Result>::set(
139 obj、obj.get_table().get_collection_key(p.name) 邦土、 (*o).*(std::decay_t
{ Decaltype (p)>::ptr)
141 }、managed<T>::schema.ps)
145 rbool 演算子 ==(std::nullptr_t)
const {
146 when (
m_rbool_query ) {
147 return m_rbool_query->link_equal(m_key, std::nullopt)
149 return !m_obj->get_linked_object(m_key).is_valid();
151rbool 演算子 ==(
constmaned %==========================================<T>
152 when (
m_rbool_query ) {
153 return m_rbool_query->link_equal(m_key、rhs.m_obj)
155 場合(*この ->m_realm の 場合 、=rhs.m_realm)
157 return m_obj->get_linked_object(m_key).get_key() ==rhs.m_obj.get_key()
160rbool 演算子 ==(
constmaned %=================================================
161 when (
m_rbool_query ) {
162 return m_rbool_query->link_equal(m_key, *rhs.m_obj)
164 場合(*この->m_realm != *rhs.m_realm)
166 return m_obj->get_linked_object(m_key).get_key() ==rhs.m_obj->get_key()
169 rbool 演算子 .=(std::nullptr_t)
const {
170 when (
m_rbool_query ) {
171 return m_rbool_query->link_not_等価(m_key, std::nullopt)
173 return m_obj->get_linked_object(m_key).is_valid();
175 rbool演算子 バージョン .=( 管理対象 <T>=
rhs ) 使用条件 {
176 when (
m_rbool_query ) {
177 return m_rbool_query->link_not_equal(m_key、rhs.m_obj)
179 return m_obj->get_linked_object(m_key).is_valid();
182rbool 演算子 バージョン .=(
constmaned<T*>+rhs)const {
{
183 when (
m_rbool_query ) {
184 return m_rbool_query->link_not_equal(m_key, *rhs.m_obj)
186 return m_obj->get_linked_object(m_key).is_valid();
191 テンプレート<
typename ,
typename >