19#ifndef CPPREALM_MANAGED_DICTIONARY_HPP
20#define CPREALM_MANAGED_DICTIONATIONY_HPP
22#include <cpprealm/accessors.hpp>
23#include <cpprealm/macros.hpp>
24#include <cpprealm/notifications.hpp>
25#include <cpprealm/observation.hpp>
26#include <cpprealm/rbool.hpp>
30 テンプレート<
typename mapped_type>
33 const std::string &key、
35 : m_backing_map(std::move(backing_map))、m_key(キー)、m_realm(r) {}
39 const std::string &key、
42 m_col_key = counter_key
47 ボックス_ベース & 演算子=(
const mapped_type &o) {
54 場合 constexpr (o->is_managed) {
55 m_backing_map.insert(m_key, O->m_managed.m_obj.get_key() は
59 auto pk = (*o->unmanaged).*(
マネージド_typename <typename mapped_type::value_type::value_type>mapped_type::value_type::value_type>::schema .primary_key ().ptr)#
60 m_obj = m_backing_map.create_and_insert_linked_object(m_key, pk.value)、
62 m_obj = m_backing_map.create_and_insert_linked_object(m_key)
65 std::apply([+m_obj, &o](
auto & & ...p) {
66 (
accessor <
typename std::decay_t{
Decltype (p)>::Result>::set(
67 m_obj, m_obj.get_table().get_corumn_key(p.name),
68 (*o-> 非マネージド).*(std::decay_t<
Decltype (p)>::ptr)), ...)、
75 場合 constexpr <mapped_type>(内部::type_info::is_primative[mapped_type]::value) {
76 m_backing_map.insert(m_key, Serialize(std::move(o)))
79 m_backing_map.insert(m_key, O.managed.m_obj.get_key()。
83 auto pk = (*o->unmanaged).*(マネージド_タイプ名
mapped_type<typename mapped_type::value_type> ::value_type>::schema . Primary_key().ptr)
84 m_obj = m_backing_map.create_and_insert_linked_object(m_key, pk.value)、
86 m_obj = m_backing_map.create_and_insert_linked_object(m_key)
89 std::apply([+m_obj, &o](
auto & & ...p) {
90 (
accessor <
typename std::decay_t{
Decltype (p)>::Result>::set(
91 m_obj, m_obj.get_table().get_corumn_key(p.name),
100 rbool Operator==(
const mapped_type &rhs)
const {
101 場合 constexpr (realm:: internal::type_info::MixedPersistableConcern<mapped_type> ::value){{
102 場合(この ->m_rbool_query){
103 この->
m_rbool_query- >Dictionary_has_value_for_key_ equals(この ->m_col_key、m_key、serialize(rhs、m_realm))を返します。
105 return m_backing_map.get(m_key) == serialize(rhs, m_realm);
107 場合(この ->m_rbool_query){
108 この->
m_rbool_query- >Dictionary_has_value_for_key_equals(この->m_col_key、m_key、
内部::bridge::混合(serialize(rhs)))を返します。
114 rbool演算子!=(
const mapped_type &rhs)
const {
115 場合(この ->m_rbool_query){
116 この->
m_rbool_query- >Dictionary_has_value_for_key_not_ equals(この->m_col_key、m_key、
内部::bridge::混合(serialize(rhs, m_realm)))を返します。
118 return !operator==(rhs):
126 rbool * m_rbool_query =
nullptr 。
128 テンプレート<
typename V,
typename =
string >
133 使用 Box_base <int 64 _t>::operator================================
135 return m_backing_map.get(m_key).operator int 64 _t()。
138 rbool演算子>(int 64 _rhs)
const {
139 場合(この ->m_rbool_query){
140 この->m_rbool_query->Dictionary_has_value_for_key_greater_thon(この->m_col_key、m_key、rhs)を
返します。
145 rbool演算子>=(int 64 _rhs)
const {
146 場合(この ->m_rbool_query){
147 この->m_rbool_query->Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、m_key、rhs)を
返します。
152 rbool演算子未満(int 64 _t rhs)
const {
153 場合(この ->m_rbool_query){
154 この->m_rbool_query->Dictionary_has_value_for_key_less_than(この->m_col_key、m_key、rhs)を
返します。
159 rbool演算子 <=(int 64 _rhs)
const {
160 場合(この ->m_rbool_query){
161 この->m_rbool_query->Dictionary_has_value_for_key_less_than_equals(この>m_col_key、m_key、rhs)を
返します。
171 return m_backing_map.get(m_key).operator double()
174 rbool演算子>(
double Rhs)
const {
175 場合(この ->m_rbool_query){
176 この->m_rbool_query->Dictionary_has_value_for_key_greater_thon(この->m_col_key、m_key、rhs)を
返します。
181 rbool演算子>=(
double Rhs)
const {
182 場合(この ->m_rbool_query){
183 この->m_rbool_query->Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、m_key、rhs)を
返します。
189 場合(この ->m_rbool_query){
190 この->m_rbool_query->Dictionary_has_value_for_key_less_than(この->m_col_key、m_key、rhs)を
返します。
195 rbool演算子==(
double Rhs)
const {
196 場合(この ->m_rbool_query){
197 この->m_rbool_query->Dictionary_has_value_for_key_less_than_equals(この>m_col_key、m_key、rhs)を
返します。
205 使用 Box_base <
bool >::operator===========================================================
207 return m_backing_map.get(m_key).operator bool():
211 構造体 box<V, std::enable_if_t<std::is_enum_v<V>>> :
public box_base<V> {
215 returnこの->m_backing_map.get(This->m_key).operator int 64 _t()
227 テンプレート<
typenameMixed >
232 rbool演算子>(混合 rhs)
const {
233 場合(この ->m_rbool_query){
234 この->
m_rbool_query- >Dictionary_has_value_for_key_greater_than(この ->m_col_key、この ->m_key、serialize(rhs、この ->m_realm))を返します。
236 returnこの->m_backing_map.get(This->m_key)> Serialize(rhs, この->m_realm)
239 rbool演算子>=(混合rhs)
const {
240 場合(この ->m_rbool_query){
241 この->
m_rbool_query- >Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、この ->m_key、serialize(rhs、この ->m_realm))を返します。
243 この->
m_backing_map.get (This->m_key) >= Serialize(rhs, この->m_realm) を返します。
247 場合(この ->m_rbool_query){
248 この->
m_rbool_query- >Dictionary_has_value_for_key_less_than(この->m_col_key、この ->m_key、serialize(rhs、この ->m_realm))を返します。
250 では、この->
m_backing_map.get (This->m_key)< Serialize(rhs, この->m_realm) が返されます。
253 rbool演算子 <=(混合
Rhs ) 条件 {
254 場合(この ->m_rbool_query){
255 この->
m_rbool_query- >Dictionary_has_value_for_key_less_than_equals(この->m_col_key、この ->m_key、serialize(rhs、この ->m_realm))を返します。
257 returnこの->m_backing_map.get(This->m_key) <= Serialize(rhs, この->m_realm)
263 使用 Box_base <
object_id >::operator===========================================================
277 場合(この ->m_rbool_query){
278 この->m_rbool_query->Dictionary_has_value_for_key_greater_than(この->m_col_key、m_key、serialize(rhs))を
返します。
284 場合(この ->m_rbool_query){
285 この->m_rbool_query->Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、m_key、serialize(rhs))を
返します。
291 場合(この ->m_rbool_query){
292 この->m_rbool_query->Dictionary_has_value_for_key_less_than(この->m_col_key、m_key、serialize(rhs))を
返します。
298 場合(この ->m_rbool_query){
299 この->m_rbool_query->Dictionary_has_value_for_key_less_than_equals(この->m_col_key、m_key、serialize(rhs))を
返します。
305 構造体 ボックス <std::chrono::time_point[std::chrono:system_クロック]<std::chrono::system_clock> :
public window_base <std::chrono::time_point[std::chrono:system_lock]<std::chrono::system_clock> {{
306 使用 box_base<std::chrono::time_point<std::chrono::system_clock>>::box_base;
307 使用 box_base <std::chrono::time_point=std::chrono::system_lock===============================================================<std::chrono::system_clock>
308std::chrono::time_point<std::chrono::system_clock> 演算子*() {
309 この->
m_backing_map.get (This->m_key).operator
internal::bridge::timestamp ().operator std::chrono::time_point=std::chronno:system_クロック>()<std::chrono::system_clock>
312 rbool <std::chrono::system_clock>演算子>(std::chrono::time_point=std::chrono::system_lock>rhs)
const {
313 場合(この ->m_rbool_query){
314 この->m_rbool_query->Dictionary_has_value_for_key_greater_than(この->m_col_key、m_key、serialize(rhs))を
返します。
319 rbool <std::chrono::system_clock>演算子>=(std::chrono::time_point=std::chrono::system_lock>rhs)
const {{
320 場合(この ->m_rbool_query){
321 この->m_rbool_query->Dictionary_has_value_for_key_greater_than_equals(この->m_col_key、m_key、serialize(rhs))を
返します。
326 rbool <std::chrono::system_clock>演算子<(std::chrono::time_point=std::chrono::system_lock>rhs)
const {
327 場合(この ->m_rbool_query){
328 この->m_rbool_query->Dictionary_has_value_for_key_less_than(この->m_col_key、m_key、serialize(rhs))を
返します。
333 rbool <std::chrono::system_clock>演算子=(std::chrono::time_point=std::chrono::system_lock>rhs)
const {{
334 場合(この ->m_rbool_query){
335 この->m_rbool_query->Dictionary_has_value_for_key_less_than_equals(この->m_col_key、m_key、serialize(rhs))を
返します。
341 構造体 ボックス <8
std8 ======================================================
342 使用 box_base<std::vector<uint8_t>>::box_base;
343 使用 box_base < 8 ::vector=================================================================
344 std::vector 8 _t> 演算子*() {
351 使用 box_base <std::string>::operator========================================================
353 この->m_backing_map.get(This->m_key).operator std::string() を
返します。
357 場合(この ->m_rbool_query){
358 この->m_rbool_query->Dictionary_contains_string_for_key(この->m_col_key、m_key、rhs)を
返します。
360 std::string Lhs = m_backing_map.get(m_key)
361 return Lhs.find(rhs) != std::string::nposition
370 使用 box_base <
Managed < V * > >::operator============================================================================
372 rbool 演算子==(
constmaned <V*> &rhs)
const {
373 場合(この ->m_rbool_query){
374 この->
m_rbool_query- >Dictionary_has_value_for_key_ equals(この->m_col_key、
378 オートメーション=
const_ Cast =box = maned =
V ======================================================================
380 場合(この->m_realm .= *rhs.m_realm) {
383 .get_key () == b->get_key() を返します。
387 場合(この ->m_rbool_query){
388 この->
m_rbool_query- >Dictionary_has_value_for_key_not_ equals(この->m_col_key、
392 return !この->オペレーター==(rhs)
395 rbool 演算子==(
constmaned = V><V> =======================================
396 場合(この ->m_rbool_query){
397 この->
m_rbool_query- >Dictionary_has_value_for_key_ equals(この->m_col_key、
402 オートメーション=
const_ Cast =box = maned =
V ======================================================================
404 場合(この ->m_realm .=rhs.m_realm){{
407 return a.get_key() == b.get_key()
411 場合(この ->m_rbool_query){
412 この->
m_rbool_query- >Dictionary_has_value_for_key_not_ equals(この->m_col_key、
417 return !この->オペレーター==(rhs)
420 std::optional[typenamemanded[ V*] ::ref_type[] 演算子*() {
421 自動オブジェクト名 = この->m_backing_map.get_object(この->m_key)
422 if (!obj.is_valid()) {
429 場合(この ->m_rbool_query){
431 ctx.m_key = この->m_key
432 ctx.origin_col_key = この->m_col_key
433 :この->m_rbool_query->add_Dictionary_link_tain(std::move(ctx))
436 自動オブジェクト名 = この->m_backing_map.get_object(この->m_key)
449m_obj =
const_ Cast=box= maned
= V ====================================================================*>(
この)->m_key、pk.value)。
451m_obj =
const_ Cast=box= maned
= V ====================================================================*>(
この)->m_key)。
454 std::apply([800000000000000000000000000000000000000000000000]([8000000000000000000000000000000000000000]([80000000000000000000000000000000000000000](
自動と...p){{Realm =この->m_realm]
455 (
accessor <
typename std::decay_t{
Decltype (p)>::Result>::set(
456 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
457 (*o).*(std::decimal_t<
Decltype (p)>::ptr)), ...)、
463これ->m_backing_map.insert(この->m_key、o->m_obj.get_key())。
468この->m_backing_map.insert(この->m_key、o.m_obj.get_key())
472 ブール演算子==(
constbox =
maned =
V =============================================================================
473 オートメーション=
const_ Cast =box = maned =
V ======================================================================
475 場合(この ->m_realm .=rhs.m_realm){{
478 return a.get_key() == b.get_key()
482 return !この->オペレーター==(rhs)
485 ブール演算子==(
constbox =
V ===========================================================================
486 オートメーション=
const_ Cast =box = maned =
V ======================================================================
487 自動&b = ( &rhs)->m_obj。
488 場合(この ->m_realm .=rhs.m_realm){{
491 return a.get_key() == b.get_key()
494 ブール演算子!=(
const ボックス{V*> &
rhs )に適用されます
495 return !この->オペレーター==(rhs)
501 使用 authorized <std::map=std::string, T#::managed_base::operator====================================================================================
503 [[nodiscard]] std::map{std::string, T> Delete()
Const {
504 場合 constexpr (std::is_pointer_v<T>){{
505 自動 d = internal::bridge::get=contact=============================================================<internal::bridge::core_dictionary>
507 std::map<std::string, T> ret;
508 for (
size_t i = 0; i < s; i++) {
509 auto pair = d.get_pair(i);
510 タイプ = std::remove_pointer_t を使用し<T>
、
514 auto assign = [&m, &v](
auto& pair) {
515 (*v).*(std::decay_t<
Decltype ( pair.first)>::ptr) = (m.*(ペア.秒)). describe()
519 std::apply([+v, &m, &assign](
auto & & ... pair) {
523 ret[ pair.first] = v)
528 auto ret = std::map<std::string, T>();
535 std::enable_if<std::is_pointer_v<T>, std::map<std::string, managed<T>>> to_map()
const {
536 auto ret = std::map<std::string, T>();
545 using iterator_category = std::input_iterator_tag;
547 ブール演算子!=(
const イテレータとその他)の
制約
552 ブール演算子==(
constイテレータ~その他)
コンフィギュレーション
554 return (m_parent ==その他.m_parent) & & (m_i ==その他.m_i)=====================
557 std::
primstring , T> 演算子*() no例外
559 オートペア= m_parent->m_obj->get_Dictionary(m_parent->m_key).get_ pair(m_i)
560 {
pair.first 、 deserialize=T===========================================================================<T>
569 制約イテレータと演算子++(
int i)
575 テンプレート<
typename ,
typename >
578イテレータ(
size_t i,
管理対象 : < std ::map=std::string, T==========================.
579 : m_i(i), m_parent(parent)
588 return m_obj->get_Dictionary(m_key).size()
591イテレータ start()
コンフィギュレーション
598 returnイテレータ(size())、
この)。
601イテレータ find(
const std::string+key) {
602 when (
m_rbool_query ) {
603 スローstd::runtime_error(
"`find` はタイプセーフ クエリでは使用できないため、代わりに `contains_key` を使用してください。 )
606 auto d = m_obj->get_辞書(m_key)
607 auto i = d.find_any_key(key);
608 の
場合(i ==
size_t (- 1 )){
609 returnイテレータ(size())、
この)。
615box=std::条件付き_t=std:: is_pointer_v ========================================================================<T><T>
616 場合 constexpr (std::is_pointer_v<T>){{
617 when (
m_rbool_query ) {
618 returnbox =maned=T================================================================================================<T>
620 returnbox =maned=T==============================================================================================<T>
622 when (
m_rbool_query ) {
623 returnbox <T>(m_rbool_query, m_key, key, *m_realm)
625 returnbox <T>=obj->get_辞書(m_key), キー, *m_realm)
629 無効化(
const std::string+key) {
630 m_obj->get_Dictionary(m_key).erase(key)
635 when (
m_rbool_query ) {
636 return m_rbool_query->Dictionary_has_key(m_key, キー)
638 return m_obj->get_Dictionary(m_key).find_any_key(key) !=size_t(- 1 ):
645 自動 辞書 = std::take_shared=realm::<realm::internal::bridge::dictionary> internal::bridge::Dictionary>(o.get_Dictionary(m_key))
647std:: take_shared [realm::辞書<realm::dictionary_callback_wrapper>
648 token.m_realm = *m_realm;
649 token.m_Dictionary = 決定。
655マネージド(
const Managed) =
削除。
657マネージド() 演算子=(
constマネージド() =
削除)
658マネージドと 演算子=(manedおよびを) =
削除。
659 テンプレート<
typename ,
typename >
定義: Managed_Dictionary.happ: 31
定義: Managed_Dictionary.happ: 129
Definition: obj_key.hpp:53
rbool include_key(const std::string &key)
主に型安全性のあるクエリで使用される便利なメソッド。
定義: Managed_Dictionary.happ: 634
定義: transformation.hpp:38
定義: Managed_primary_key.happ:30