19#ifndef CPPREALM_MANAGED_LIST_HPP
20#define CPPREALM_MANAGED_LIST_HPP
22#include <cpprealm/macros.hpp>
23#include <cpprealm/notifications.hpp>
24#include <cpprealm/observation.hpp>
25#include <cpprealm/types.hpp>
30 構造体 Managed <std::vector=T>,<T> std::enable_if_t=Interval::type_info:: is_primative =T===value========================================================<T>
31 使用 Managed <std::vector=T==================================================================<T>
35 using iterator_category = std::input_iterator_tag;
37 ブール演算子!=(
const イテレータとその他)の
制約
42 ブール演算子==(
constイテレータ~その他)
コンフィギュレーション
44 return (m_parent ==その他.m_parent) & & (m_i ==その他.m_i)=====================
49 return (*m_parent)[m_i] を返します
64 テンプレート<
typename ,
typename >
67反復子(
size_t i、
管理対象 : <std::ベクトル======================================================<T>
68 : m_i(i), m_parent(parent)
81 returnイテレータ(size())、
この)。
83 [[nodiscard]] std::vector<T> Delete()
Const {
85 U =
typename internal::
type_info ::type_info<T>:: internal_type
87 size_t count = list.size()
89 return std::vector=====================================================<T>
91 自動レット = std::vector<T>()
93 for(
size_t i = 0; i < count; i++) {
94 場合 constexpr (内部::type_info::MixedPersistableConcern<T>::value) {
95ret.push_back(deserialize=T>(realm::<T> <U>internal::bridge::get=U>(list, i))
96 }
else if constexpr (std::is_enum_v<T>) {
97ret.push_back(deserialize=T>(realm::<T> <U>internal::bridge::get=U>(list, i))
99 ret.push_back(deserialize(realm:: internal::bridge::get<U>(list, i)):
106 [[nodiscard]] の結果 <T>
as_results () は、{{
111 自動 リスト = std::take_shared{realm::の間:<realm::internal::bridge::list> :bridge::list>(*m_realm, *m_obj, m_key)
113std::take_shared{realm::collection_customback_ wrapper>(<realm::collection_callback_wrapper>
116 token.m_realm = *m_realm;
122 T演算子[](
size_t idx)
const {
124 U =
typename internal::
type_info ::type_info<T>:: internal_type
125 場合 constexpr (内部::type_info::MixedPersistableConcern<T>::value) {
126 returndeserialize<T> (realm:: internal::bridge::get=U>(list,<U> idx))
127 }
else if constexpr (std::is_enum_v<T>) {
130 returndeserialize (realm:: internal::bridge::get=1============================================<U>
135 internal::bridge::list(*m_realm, *m_obj, m_key).remove(size() - 1 )
138 internal::bridge::list(*m_realm, *m_obj, m_key).remove(idx)
141 internal::bridge::list(*m_realm, *m_obj, m_key).remove_all()
143 無効化プッシュ_back(
const T & 値) {
144 自動リスト = internal::bridge::list(*m_realm, *m_obj, m_key)
145 list.add(serialize(value))
148 return internal::bridge::list(*m_realm, *m_obj, m_key).size()
150 size_t find(
const T & ) {
151 場合 constexpr (std::is_enum_v<T>) {
152 は internal::bridge::list(*
m_realm , *m_obj, m_key).find(
static_ Cast < int 64 _t
> (a)) を返します。
154 return internal::bridge::list(*m_realm, *m_obj, m_key).find(a):
157 無効セット(
size_t PO、
const T+ ){
158 internal::bridge::list(*m_realm, *m_obj, m_key).set(os, )、
163.sort(std::vector< internal::bridge::sort_descriptor<internal::bridge::sort_descriptor>
> ({{昇順}}))
168マネージド(
const Managed) =
削除。
170マネージド() 演算子=(
constマネージド() =
削除)
171マネージドと 演算子=(manedおよびを) =
削除。
172 テンプレート<
typename ,
typename >
179 [[nodiscard]] std::vector<T*> Delete()
Const {
181 size_t count = list.size()
183 return std::vector=T================================================
184 自動レプリカセット = std::vector< T*>()
186 for(
size_t i = 0; i < count; i++) {
187 Managed <T> m(realm:: internal::bridge::get<internal::bridge::obj>(list, i), *m_realm)
189 auto assign = [&m, &v](
auto& pair) {
190 (*v).*(std::decay_t<
Decltype ( pair.first)>::ptr) = (m.*(ペア.秒)). describe()
193 std::apply([+v, &m, &assign](
auto & & ... pair) {
202 [[nodiscard]]
の結果 <T*>は
_results () 演算子 {
210 duration_type = std::ptdiff_t
を使用します。
213 イテレータ_カテゴリ = std::forward_itemもの_タグ
を使用する。
215 ブール演算子!=(
const イテレータとその他)の
制約
220 ブール演算子==(
constイテレータ~その他)
コンフィギュレーション
222 return (m_parent ==その他.m_parent) & & (m_i ==その他.m_i)=====================
225 <T>マネージド 演算子*() は例外をスローします
228 Managed m(realm::<T> internal::bridge::get=realm::<realm::internal::bridge::obj> internal::bridge::obj>(list, m_i), *m_parent->m_realm)
229 return {std::move(m)} を返す
238 制約イテレータと演算子++(
int i)
244 テンプレート<
typename ,
typename >
247反復子(
size_t i、
管理対象: <std::ベクトル==========================================================
248 : m_i(i), m_parent(parent)
252 Managed=std::vector=T ============================================================================================
262 returnイテレータ(size())、
この)。
266 internal::bridge::list(*m_realm, *m_obj, m_key).remove(size() - 1 )
269 internal::bridge::list(*m_realm, *m_obj, m_key).remove(idx)
272 internal::bridge::list(*m_realm, *m_obj, m_key).remove_all()
274 disabledpush_back (T* 値)
276 自動リスト = internal::bridge::list(*m_realm, *m_obj, m_key)
277 auto table = m_obj->get_target_table(m_key);
278 internal::bridge::obj m_obj
279 場合 Constexpr (managed<T>::schema.HasPrimaryKeyProperty){{
280 自動pk = (*値).*(managed<T>::schema.primary_key().ptr)
282}
であれば ( managed<T> ::schema.is_ embedded()){{
283 m_obj = list.add_ embedded()
285 m_obj =table.create_object()
287 std::apply([800000000000000000000000000000000000000000000]([80000000000000000000000000000000000000000000000000000000000](
autoと ...p) {
288 (accessor=
typename std::decay_t
=decimaltype (p)>::Result>::set(
289 m_obj, m_obj.get_table().get_corumn_key(p.name), 邦土
290 (*値).*(std::decimal_t<
Decltype (p)>::ptr)), ...)、
291 }、managed< T, 無効>::schema.ps)
292 場合(!managed<T>::schema.is_ embedded()) {
293 list.add(m_obj.get_key())
296 無効 なプッシュ _ バック( 管理対象
:<T> および 値)
298 自動リスト = internal::bridge::list(*m_realm, *m_obj, m_key)
299 場合(!managed<T>::schema.is_ embedded()) {
300 list.add(value.m_obj.get_key())
302 slow std:: logical_error(
"既存の埋め込みオブジェクトを管理対象リストに追加できません。" ):
305 無効なプッシュ_バック(
const Managed <T*> & 値)
307 場合(!managed<T>::schema.is_ embedded()) {
308 自動リスト = internal::bridge::list(*m_realm, *m_obj, m_key)
309 list.add(value.m_obj->get_key())
311 slow std:: logical_error(
"既存の埋め込みオブジェクトを管理対象リストに追加できません。" ):
317 return internal::bridge::list(*m_realm, *m_obj, m_key).size()
319 size_t find(
constmaned <T>[T>+a)] {
320 return internal::bridge::list(*m_realm, *m_obj, m_key).find(a.m_obj.get_key())
322 size_t find(
const typenamemanded =T*>::ref_type=a)
const {
323 return internal::bridge::list(*m_realm, *m_obj, m_key).find(a->m_obj.get_key())
325 typenamemanded =T*>::ref_type 演算子[](
size_t idx)
const {
327 return typenamemanded =T=======================================================================================<T><realm::internal::bridge::obj>
331 自動 リスト = std::take_shared{realm::の間:<realm::internal::bridge::list> :bridge::list>(*m_realm, *m_obj, m_key)
333std::take_shared{realm::collection_customback_ wrapper>(<realm::collection_callback_wrapper>
336 token.m_realm = *m_realm;
341結果<T> where(
const std::string &query、
const std::vector{realm::ixed><realm::mixed> &argments) {{
342std::vector<internal::bridge::mixed> 混合_args
344混合_args.push_back(serialize(a))。
345 結果を<T> 返すstd::move(混合_args))):
348の結果<T> where(std::function[rbool(managed[T]<T> &)> &fn) {{
349 静的_アサート( の
サイズ(マネージド <T>),
"T のスキーマを宣言する必要があります" )。
350 オートスキーマ = m_realm->schema().find(managed<T>::schema.name)
351 自動グループ = m_realm->read_group()。
352 自動テーブル_参照 = group.get_table(schema.table_key())
353 rbool クエリ = rbool( internal::bridge::query(table_ref))
354 auto query_object = Managed<T>::prepare_for_query(*m_realm, &query)
355 自動full_query = fn(query_object).q
359結果<T> sort(
const std::string と key_path、
ブール値の昇順) {
360 オートスキーマ = m_realm->schema().find(managed<T>::schema.name)
361 自動テーブル_参照 = m_obj->get_target_table(m_key)
362 <T>return の結果を返す昇順}})
365の結果<T> sort(
const std::vector[Interval::bridge::sort_descriptor]><internal::bridge::sort_descriptor> &sort_descriptors){{
366 オートスキーマ = m_realm->schema().find(managed<T>::schema.name)
367 自動テーブル_参照 = m_obj->get_target_table(m_key)
373マネージド(
const Managed) =
削除。
375マネージド() 演算子=(
constマネージド() =
削除)
376マネージドと 演算子=(manedおよびを) =
削除。
377 テンプレート<
typename ,
typename >
定義: observation.happ: 176
定義: transformation.hpp:38