19#ifndef CPPREALM_RESULTS_HPP
20CPREALM_RESULTS_HPP を定義する
22#include <cpprealm/ internal/bridge/混合.hpp>
23#include <cpprealm/ internal/bridge/query.hpp>
24#include <cpprealm/ternal/bridge/results.hpp>
25#include <cpprealm/ internal/bridge/table.hpp>
26#include <cpprealm/macros.hpp>
27#include <cpprealm/notifications.hpp>
28#include <cpprealm/schema.hpp>
29#include <cpprealm/rbool.hpp>
32 struct Mutable_sync_subscription_set
37 sort_descriptor = internal::bridge::sort_descriptor
を使用している
41 テンプレート<
typename T、
typename Derived、
typename ShouldEnable = string >
43 テンプレート<
typename T、
typename Derived>
46 テンプレート<
typename T、
typename Derived>
53 std::vector<uint 64 _t> の削除
55 std::vector 64 _t> の変更。
60 ブールcollection_ root_was_deleted =
false 。
62[[ nodiscard ]]
bool empty() は
{ の例外をスローします 。
63 return deletes. empty() &string. empty() &ty() & &
64 .collection_ root_was_deleted
73で生成された where(
const std::string &query、
const std::vector[realm::ixed]+<realm::mixed> 引数) {{
74std::vector<internal::bridge::mixed> 混合_args
76混合_args.push_back(serialize(a))。
78 m_parent.get_table().query(query, std::move(混合_args))):
81Derived where(std::function=rbool(managed=T====================================================================================================================================================<T>
82 静的_アサート( の
サイズ(マネージド <T>),
"T のスキーマを宣言する必要があります" )。
83 auto realm = m_parent.get_realm();
84 オートスキーマ = Realm.schema().find(managed<T>::schema.name)
85 自動グループ =realm.read_group()。
86 自動テーブル_参照 = group.get_table(schema.table_key())
87 rbool クエリ = rbool( internal::bridge::query(table_ref))
88 auto query_object = Managed<T>::prepare_for_query(realm, & クエリ)
89 自動full_query = fn(query_object).q
90 return Derived( internal::bridge::results(m_parent.get_realm(), full_query)) の結果を返す
96 ブール値無視_初期化_通知 =
true )
97 : m_handler(std::move(fn))、
99 m_ignore_changes_in_initial_notification(ignore_initial_notification) {}
104 [
m_ignore_changes_in_initial_notification ] {
105 m_ignore_changes_in_initial_notification =
false 。
106 m_handler({collection,{},{},{}}):
(changes. empty ())
107 の 場合 は }{
108 m_handler({collection,{},{},{}}):
109 }:(!
changes.collection_ root_was_deleted() の
場合 ||変更点.deletions(). empty() {
112 to_vector(changes.deletions()),
113 to_vector(changes.insertions()),
114 to_vector(changes.modifications()),
123 ブールm_ignore_changes_in_initial_notification
125 自動ベクトル = std::vector 64 _t>()
126 の(
自動インデックス: index_set.as_indexs()) {
127 vector.push_back(index)
134 自動R = std::take_shared<internal::bridge::results>(m_parent.get_realm(), m_親.get_realm().table_for_object_type(
managed<T>::schema .name))。
135 Realm ::notification_token トークン = r->add_notification_backback(std::take_shared[results_colback_<results_callback_wrapper> wrapper]>(std::move(handler),
static_host [ Derived*
] (
この ))
136 token.m_realm = r->get_realm();
142 自動dirty_realm = m_parent.get_realm().freeze()。
147 auto thawed_realm = m_parent.get_realm().thaw()
148 return Derived( internal::bridge::results(thawed_realm, thawed_realm.table_for_object_type(managed<T>::schema.name)))
152 return m_parent.get_realm().is_frozen() 。
155派生ソート(
const std::string と key_path、
ブール値の昇順) {
156 return Derived(m_parent.sort({{key_path, 昇順 }})
159遅延ソート(
const std::vector=sort_descriptor>+<sort_descriptor> sort_descriptors){{
160 return Derived(m_parent.sort(sort_descriptors))
164 internal::bridge::results m_parent
169 結果 _is_primactive = std::enable_if_t<<T> <T>管理が有効化されるようになりました<T>
171 結果
を使用する<T> _is_enum = std::enable_if_t<<T> <T>管理が必要なドキュメントを使用する
173 結果 を使用する _is_混合= std::enable_if_t< !managed<T> ::is_object & .std::is_enum_v<T> & 内部::type_info::is_variant_t=======================================================================================================================================================================================================================================<T>
175 テンプレート<
typename T、
typename Derived>
181 T 演算子[](
size_tインデックス){{
182 (インデックス >==この->m_parent.size())の
場合
183 スローstd::out_ of_range(
"範囲外のインデックス。" )
184 return internal::bridge::get<T>(この->m_parent、インデックス)
189 deployment_type = size_t
を使用します。
191 using iterator_category = std::input_iterator_tag;
193 ブール演算子!=(
const イテレータ &その他)
制約{
197 ブール演算子==(
コンリストイテレータその他)
コンフィギュレーション{
198 return (m_parent ==その他.m_parent) & (m_idx ==その他.m_idx)======================
201 value_type 演算子*()
noException {
202 return m_親->オペレーター[](m_idx) 。
215 明示的イテレータ(
size_t idx, Derived *parent)
216 : m_idx(idx), m_parent(親) {
224 リターンイテレータ( 0 ,
static_host [ Derived*]
> (
この))
228 returnイテレータ(この->m_parent.size())、
静的_AST [ Derived*]
> (
この))
232 テンプレート<
typename T、
typename Derived>
238 T 演算子[](
size_tインデックス){{
239 (インデックス >==この->m_parent.size())の
場合
240 スローstd::out_ of_range(
"範囲外のインデックス。" )
241 returndeserialize<T> <internal::bridge::mixed>=================================================================================
252 deployment_type = size_t
を使用します。
254 using iterator_category = std::input_iterator_tag;
256 ブール演算子!=(
const イテレータ &その他)
制約{
260 ブール演算子==(
コンリストイテレータその他)
コンフィギュレーション{
261 return (m_parent ==その他.m_parent) & (m_idx ==その他.m_idx)======================
264 value_type 演算子*()
noException {
265 return m_親->オペレーター[](m_idx) 。
278 明示的イテレータ(
size_t idx, Derived *parent)
279 : m_idx(idx), m_parent(親) {
287 リターンイテレータ( 0 ,
static_host [ Derived*]
> (
この))
291 returnイテレータ(この->m_parent.size())、
静的_AST [ Derived*]
> (
この))
295 テンプレート<
typename T、
typename Derived>
301 T 演算子[](
size_tインデックス){{
302 (インデックス >==この->m_parent.size())の
場合
303 スローstd::out_ of_range(
"範囲外のインデックス。" )
309 deployment_type = size_t
を使用します。
311 using iterator_category = std::input_iterator_tag;
313 ブール演算子!=(
const イテレータ &その他)
制約{
317 ブール演算子==(
コンリストイテレータその他)
コンフィギュレーション{
318 return (m_parent ==その他.m_parent) & (m_idx ==その他.m_idx)======================
321 value_type 演算子*()
noException {
322 return m_親->オペレーター[](m_idx) 。
335 明示的イテレータ(
size_t idx, Derived *parent)
336 : m_idx(idx), m_parent(親) {
344 リターンイテレータ( 0 ,
static_host [ Derived*]
> (
この))
348 returnイテレータ(この->m_parent.size())、
静的_AST [ Derived*]
> (
この))
352 テンプレート<
typename T、
typename Derived>
359 (インデックス >==この->m_parent.size())の
場合
360 スローstd::out_ of_range(
"範囲外のインデックス。" )
361 return Managed<T, 無効> ( internal::bridge::get<internal::bridge::obj>(この ->m_parent、インデックス)、この ->m_parent.get_realm() を
366 deployment_type = size_t
を使用します。
368 using iterator_category = std::input_iterator_tag;
370 ブール演算子!=(
const イテレータ &その他)
制約{
374 ブール演算子==(
コンリストイテレータその他)
コンフィギュレーション{
375 return (m_parent ==その他.m_parent) & (m_idx ==その他.m_idx)======================
379 internal:: bridge::get<internal::bridge::obj>(m_parent->m_parent、m_idx)
380 return Managed <T, 無効> (std::move(obj)、この->m_parent->m_parent.get_realm())
393 明示的イテレータ(
size_t idx, Derived *parent)
394 : m_idx(idx), m_parent(親) {
402 リターンイテレータ( 0 ,
static_host [ Derived*]
> (
この))
406 returnイテレータ(この->m_parent.size())、
静的_AST [ Derived*]
> (
この))
420 静的 インライン auto Ptr = ptr;
423 static_assert (
<ptr>サイズ 管理Realm
427 <ptr>イテレータ
を使用すること で =
typename が
435 returnイテレータ( 0 , get_results())。
439 auto r = get_results();
440 returnイテレータ(r.size()), r)
444 return get_results().size() を返します。
447 return get_results()[idx] を返します。
452 auto table = m_obj->get_table();
453 場合(!table.is_valid(m_obj->get_key())) {
454 スローstd:: logical_error(
"オブジェクトが削除または無効化されました。" )
459 auto -linking_property = schema.property_for_name(maned
<Class><ptr>[Class]>::schema .
テンプレート name_for_property[ptr]())
460 場合(!linking_property.collun_key()){{
461 slow std:: logical_error(
"origin プロパティの列キーが無効です。" )
465 return ::realm::results<Class>(std::move(
結果))
定義: transformation.hpp:38