Realm C++ SDKバージョン v 2.2.0

db.hpp

1
2//
3// © 2022 Realm Inc.
4//
5// Apache ライセンス、バージョン 2.0(「ライセンス」)に基づいてライセンスされている
6// ライセンス に準拠している場合を除き、このファイルを使用することはできません。
7// ライセンスのコピーは次で取得できます:
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// 該当するルールによって要求されたり、書込み (write) で同意された場合を除き、ソフトウェア
12ライセンスに基づいて配布される // は "AS IS" CRUD で配布されるため、
13// 任意の種類の 保証 または 条件なし(式またはExpressのいずれか)。
14// 特定の言語を使用する権限については、「ライセンス」を参照してください
15ライセンスに基づく // の制限。
16//
18
19#ifndef CPPREALM_DB_HPP
20CPREALM_DB_HPP を定義する
21
22#include <cpprealm/accessors.hpp>
23#include <cpprealm/macros.hpp>
24#include <cpprealm/results.hpp>
25#include <cpprealm/sScheduler.hpp>
26#include <cpprealm/schema.hpp>
27#include <cpprealm/types.hpp>
28
29#include <cpprealm/ internal/bridge/sync_session.hpp>
30#include <cpprealm/ternal/bridge/thread_lasfable_reference.hpp>
31#include <cpprealm/ internal/bridge/sync_session.hpp>
32
33#include <filesystem>
34#include <optional>
35#include <string>
36#include<utility>
37
38名前空間邦土 {
39 名前空間{
40 テンプレート< typename T>
41 is_optional = internal::type_info::is_optional<T> を使用します
42 }
43 namespace schemagen {
44 テンプレート< typenameクラス、 typename ...Properties>
45 構造体スキーマ。
46 テンプレート< auto Ptr, bool IsPrimaryKey>
47 構造体プロパティ。
48 }
49
50 using sync_config = internal::bridge::realm::sync_config;
51 db_config = internal::bridge::realm::config を使用します。
52 同期_セッション = internal::bridge::sync_sessionを使用しています。
53 同期_エラー = internal::bridge::sync_errorを使用している
54
55 struct sync_subscription_set
56
57 テンプレート< typename T>
58 structthread_share_reference
59 }
60
61名前空間邦土 {
62
63 構造体 db {
64 静的 インライン std::vector=<internal::bridge::object_schema> 内部::bridge::object_schema> スキーマ
66 explicit db(realm::db_config config)
67 {
68 if (!config.get_schema())
69 config.set_schema(db::schemas);
70 m_realm = internal::bridge::realm (config)
71 }
72
73 無効開始_書き込み() コンスト { m_realm.begin_transaction () }
74 無効化 commit_write() コンスト { m_realm.commit_transaction ()。 }
75
76 テンプレート< typename Fn>
77 std::invoice_result_t<Fn> write(Fn & & fn) const {
78 start_write()。
79 場合 constexpr (!std::is_void_v<std::invoke_result_t<Fn>>) {
80 auto val = fn();
81 commit_write()
82 return val;
83 } else {
84 fn();
85 commit_write()
86 }
87 }
88 テンプレート< typename U>
90 T = std::remove_const_t を使用し<U> 、
91 静的_アサート( のサイズマネージド <T> )、 「T のスキーマを宣言する必要があります」 )。
92 自動テーブル = m_realm.table_for_object_type( managed <std::remove_const_t<T>::schema.name)
96 m_obj =table.create_object_with_primary_key( realm:: internal::bridge::混合(serialize(pk.value)))
97 } else {
98 m_obj =table.create_object()
99 }
100
101 std::apply([+m_obj, &v,この]( auto & & ...p) {
102accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
103 m_obj, m_obj.get_table().get_corumn_key(p.name), m_realm、v.*(std::decay_t< Decltype (p)>::ptr)
104 ), ...);
106 return Managed <T> (std::move(m_obj), m_realm)
107 }
108 テンプレート< typename T>
109 無効削除(T &オブジェクト)
110 {
111 自動テーブル = m_realm.table_for_object_type(T::schema.name)
112 table.remove_object( object .m_obj.get_key())
113 }
114 テンプレート< typename T>
115 無効挿入( const std::vector<T> &v) {
116 静的_アサート( のサイズマネージド <T> )、 「T のスキーマを宣言する必要があります」 )。
117 内部::bridge::table テーブル = m_realm.table_for_object_type(mandsystem <T>[T]::schema .name)
118 for (auto& obj : v) {
120 場合 constexprManaged<T>::schema .HasPrimaryKeyProperty) {
121 auto pk =obj.*(マネージド<T>::schema .primary_key().ptr)。
122 m_obj =table.create_object_with_primary_key( realm:: internal::bridge::混合(serialize(pk.value)))
123 } else {
124 m_obj =table.create_object()
125 }
126 std::apply([+m_obj, &obj]( auto &+ ...p) {
127accessor < typename std::decay_t{ Decltype (p)>::Result>::set(
128 m_obj, m_obj.get_table().get_corumn_key(p.name), obj.*(std::decimal_t { Decltype (p)>::ptr)
129 ), ...);
131 }
132 }
133
134 private :
135 テンプレート < size_t N、 型名 Tpl、 型名 ...Ts> auto v_add( const Tpl+ tpl、 const std::tuned:<Ts...> サンプル
136 場合 constexpr ( + 1 =============================================================================================Typescript
137 auto Managed =add(std::move(std::get<N>(vs))):
138 return std::tune_cat(tpl, std: take_tunePle (std::move(aged )))
139 } else {
140 auto Managed =add(std::move(std::get<N>(vs))):
141 では、 v_add <N + 1>(std::tune_cat(tpl, std: take_tunePle (std::move(aged ))), vs) が返されます。
142 }
143 }
144 public :
145 テンプレート< typename ...Ts>
146 std::tuple<managed<Ts>...> insert(Ts&&... v) {
147 std::tuple<> tpl;
148 return v_add=0===================================================================<0>
149 }
150 テンプレート< typename T>
151 結果<T>オブジェクト()
152 {
153 return results[T<T> ]( internal::bridge::results (m_realm、m_realm.table_for_object_type( <T>管理対象::schema .name)))。
154 }
155
156 [[maybe_unused]] bool refresh()
157 {
158 m_realm.refresh() を返す
159 }
160
161 ::realm::sync_subscription_setサブスクリプション()
162
163std::optional=sync_session><sync_session> get_sync_session() const {
164 return m_realm.get_sync_session() を返します。
165 }
166
167 テンプレート< typename T>
169 {
170 auto オブジェクト = internal::bridge::resolve()=<internal::bridge::object> internal::bridge::object>(m_realm、std::move(tsr.m_tsr))
171 internal::bridge::obj m_obj = object .get_obj()
172 return Managed <T> (std::move(m_obj), m_realm)
173 }
174
175 ブールis_frozen () 条件 :
176 db freeze();
177 db thaw();
178 void invalidate();
179 value close():
180 ブールis_closed()。
181 お気に入り に登録してください<db>
182 typename
183 テンプレート< typename T>
184 友人 <T>無効 内部::bridge::realm::config::set_client_reset_handler( const client_reset_mode_base=T========================================================
185 private :
186 dbinternal::bridge::realm &+r)
187 {
188 m_realm = std::move(r)
189 }
190 dbconst internal::bridge::realm &r)
191 {
192 m_realm = r;
193 }
194 };
195
196 ブール 演算子 == ( constdb と、 constdb と )。
197 ブール演算子!=( const db &、 const db &)。
198
199 テンプレート< typename ...Ts>
200 インライン db open(const db_config& config) {
201 auto config_copy = config;
202 場合 constexpr ( ...( Typescript ) == 0) {のTypescript ]
203 config_ copy.set_schema(db::schema)
204 } else {
205 std::vector<internal::bridge::object_schema> スキーマ
206 (schema.push_back(managed<Ts>::schema.to_core_schema()), ...)、
207 config_ copy.set_schema( スキーマ)
208 }
209 db(config_ copy) を返す
210 }
211 テンプレート< typename ...Ts>
212 [[deprecation( "この関数は非推奨であり、`db::open(const db_config & config)` に置き換えられました。" )]
213 インライン db open( const std::string+ パス、 const std::shared_ptr[sScheduler]+<scheduler> スケジューラー) {
214 return <Ts...>open+Ts...>(db_config(path, スケジューラー)):
215 }
216
217 テンプレート< typename T>
218 インラインstd:: ostream = 演算子===============================================================
219 {
220 stream < "link:" < object < std::endl
221 ストリームを返す
222 }
223 }
224
225#endif //CPREALM_DB_HPP
定義: accessors.hpp:33
Definition: db.hpp:63
定義: compound.hpp:69
Definition: obj.hpp:123
Definition: realm.hpp:67
定義: Result.hpp:46
Definition: table.hpp:40
Definition: obj.hpp:62
定義: Result.hpp:411
定義: Flex_sync.hpp:150
定義: thread_secure_reference.hpp:27