Realm C++ SDK版本 v 2.2.0

obj.hpp

1
2//
3// 版权所有 2024 Realm Inc.
4//
5// 根据 Apache 许可证 2.0 版(“许可证”)获得许可;
6// 除非符合合规,否则不得使用此文件。
7// 您可以在以下网址获取许可证副本:
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// 除非适用法律要求或书面同意,否则软件
12// 根据许可证分发是按“原样”分发的,
13// 不提供任何类型的Express或暗示的保证或条件。
14// 请参阅管理权限的特定语言的许可证和
15// 许可证下的限制。
16//
18
19#ifndef CPPREALM_BRIDGE_OBJ_HPP
20#define CPPREALM_BRIDGE_OBJ_HPP
21
22#include <any>
23#include <chrono>
24#include<functional>
25#include<memory>
26#include<optional>
27#include <string>
28
29#include <cpprealm/types.hpp>
30#include <cpprealm/internal/bridge/binary.hpp>
31#include <cpprealm/internal/bridge/col_key.hpp>
32#include <cpprealm/internal/bridge/decimal 128 .hpp>
33#include <cpprealm/internal/bridge/dictionary.hpp>
34#include <cpprealm/internal/bridge/ 对象.hpp>
35#include <cpprealm/internal/bridge/object_id.hpp>
36#include <cpprealm/internal/bridge/table.hpp>
37#include <cpprealm/internal/bridge/utils.hpp>
38
39命名空间域 {
40 class Group;
41 class Realm;
42 class Timestamp;
43 class Object;
44 class ObjectSchema;
45 class Obj;
46 class TableRef;
47 class Query;
48 struct ColKey;
49 class LnkLst;
50 structNotificationToken
51
52 命名空间内部::bridge {
53 struct obj_key;
54 struct obj_link;
55 }
56 命名空间内部::type_info {
57 template < typename , typename >
58 struct type_info
59 }
60
61 template < typename , typename >
62 struct 托管
63 template < typename , typename >
64 struct accessor
65 }
66
67命名空间realm::internal::bridge {
68 struct obj;
69 结构体混合;
70 struct Realm;
71 struct lnklst;
72 struct 查询;
73 struct object_schema;
74 struct timestamp;
75 struct obj_key;
76 struct obj_link;
77 结构表;
78 struct字典;
79 struct uuid
80 struct object_id
81 struct 十进制128
82 struct list;
83 structrow
84 structtable_view
85
86 命名空间{
87 template < typename T>
88 struct is_Optional : std::false_type {
89 using底层= T;
90 };
91
92 template < typename T>
93 struct is_Optional<std::Optional<T>> : std::true_type {
94 using底层= T;
95 };
96 }
97
98 template < typename T>
99 [[nodiscard]] T get( const obj&, const col_key& col_key);
100 template <>
101 [[nodiscard]] std::string get( const obj&, const col_key& col_key);
102 template <>
103 [[nodiscard]] uuid get( const obj&, const col_key& col_key);
104 template <>
105 [[nodiscard]] object_id get( const obj&, const col_key& col_key);
106 template <>
107 [[nodiscard]] Decimal 128 get( const obj&, const col_key& col_key);
108 template <>
109 [[nodiscard]] binary get( const obj&, const col_key& col_key);
110 template <>
111 [[nodiscard]] timestamp get( const obj&, const col_key& col_key);
112 template <>
113 [[nodiscard]] int 64 _t get( const obj&, const col_key& col_key);
114 template <>
115 [[nodiscard]] double get( const obj&, const col_key& col_key);
116 template <>
117 [[nodiscard]] bool get( const obj&, const col_key& col_key);
118 template <>
119 [[nodiscard]] Mixed get( const obj&, const col_key& col_key);
120 template <>
121 [[nodiscard]] core_dictionary get( const obj&, const col_key& col_key);
122
123 struct obj {
124 obj();
125 obj ( const obj & other) ;
126 obj & 操作符=( const obj & other) ;
127 obj ( obj && other);
128 obj & Operator=( obj && other);
129 ~obj();
130 obj(const Obj&); //NOLINT google-explicit-constructor
131 操作符 Obj() const ; //NOLINT google-explicit-constructor
132 [[nodiscard]] table get_table() const noException ;
133 [[nodiscard]] tab get_target_table ( col_key ) const noException ;
134 [[nodiscard]] bool is_null( const col_key & col_key ) const ;
135 [[nodiscard]] bool is_valid() const ;
136 [[nodiscard]] obj get_linked_object( const col_key & col_key );
137 template < typename T>
138 T get( const col_key & col_key ) const {
139 returninternal ::bridge::get<T> (* this , col_key );
140 }
141
142 template < typename T>
143 std::Optional<T> get_Optional( const col_key & col_key ) const {
144 if (is_null( col_key )) {
145 return std::nullopt;
146 }
147 returninternal ::bridge::get<T> (* this , col_key );
148 }
149
150 void 设立 ( const col_key & col_key , const int 64 _t& value);
151 void 设立 ( const col_key & col_key , const double & value);
152 void 设立 ( const col_key & col_key , const std::string& value);
153 void 设立 ( const col_key & col_key , const Mixed & Value);
154 void 设立 ( const col_key & col_key , const bool & value);
155 void set ( const col_key & col_key , const timestamp & value);
156 void set ( const col_key & col_key , const binary & value);
157 void 设立 ( const col_key & col_key , const uuid & value);
158 void set ( const col_key & col_key , const object_id & value);
159 void 设立 ( const col_key & col_key , const Decimal 128 & value);
160 void 设立 ( const col_key & col_key , const obj_key & value);
161 void 设立 ( const col_key & col_key , const std::chrono::time_point<std::chrono::system_clock>& value);
162 template < typename T>
163 std::enable_if_t<std::is_enum_v<T>> 设立 ( const col_key & col_key , const T& value) {
164 set<int 64 _t> ( col_key , static_cast< int 64 _t > (value));
165 }
166 template < typename T>
167 void 设立 ( const col_key & col_key , const std::Optional<T>& value) {
168 if (value) {
169 设立 ( col_key , *value);
170 } else {
171 set_null( col_key );
172 }
173 }
174
175 void set_list_values( const col_key & col_key , const std::vector<obj_key>&values);
176 void set_list_values( const col_key & col_key , const std::vector<std::string>&values);
177 void set_list_values( const col_key & col_key , const std::vector<bool>&values);
178 void set_list_values( const col_key & col_key , const std::vector<int 64 _t>&values);
179 void set_list_values( const col_key & col_key , const std::vector<double>&values);
180 void set_list_values( const col_key & col_key , const std::vector<internal::bridge::uuid>&values);
181 void set_list_values( const col_key & col_key , const std::vector<internal::bridge::object_id>&values);
182 void set_list_values( const col_key & col_key , const std::vector<internal::bridge::decimal 128 >&values);
183 void set_list_values( const col_key & col_key , const std::vector<binary>&values);
184 void set_list_values( const col_key & col_key , const std::vector<mixed>&values);
185 void set_list_values( const col_key & col_key , const std::vector<timestamp>&values);
186
187 void set_list_values(const col_key& col_key, const std::vector<std::optional<int64_t>>& values);
188 void set_list_values(const col_key& col_key, const std::vector<std::optional<bool>>& values);
189 void set_list_values( const col_key & col_key , const std::vector<std::Optional<double>>&values);
190 void set_list_values(const col_key& col_key, const std::vector<std::optional<std::string>>& values);
191 void set_list_values(const col_key& col_key, const std::vector<std::optional<obj_key>>& values);
192 void set_list_values(const col_key& col_key, const std::vector<std::optional<internal::bridge::uuid>>& values);
193 void set_list_values(const col_key& col_key, const std::vector<std::optional<internal::bridge::object_id>>& values);
194 void set_list_values( const col_key & col_key , const std::vector<std::Optional<binary>>&values);
195 void set_list_values(const col_key& col_key, const std::vector<std::optional<timestamp>>& values);
196
197 template < typename ValueType>
198 void set_list_values( const col_key & col_key , const std::vector<ValueType>&values) {
199 std::vector<typenameInternal::type_info::type_info<ValueType, void>::internal_type> v 2 ;
200 for ( auto v : values) {
201 if constexpr (std::is_pointer_v<ValueType>) {
202 Internal::bridge::obj m_obj;
203 if constexpr ( 托管<std::remove_pointer_t<ValueType> , void >:: 模式.HasPrimaryKeyProperty) {
204 auto pk = (*v).*( 托管<std::remove_pointer_t<ValueType> , void >:: 模式.primary_key().ptr);
205 m_obj = this->get_table().create_object_with_primary_key( internal::bridge::mixed (serialize(pk.value)));
206 } else {
207 m_obj = m_obj = this->get_table().create_object();
208 }
209 std:: 应用([&m_obj, &v]( auto && ...p) {
210 ( accessor < typename std::decay_t< decltype (p)>::Result, void >:: 设立(
211 m_obj, m_obj.get_table().get_column_key(p.name),
212 (*v).*(std::decay_t< decltype (p)>::ptr)), ...);
213 }, 托管<std::remove_pointer_t<ValueType> , void >:: 模式.ps);
214 v 2 .push_back(m_obj.get_key());
215 } else {
216 v 2 .push_back(:: 域::serialize(v));
217 }
218 }
219 set_list_values( col_key , v 2 );
220 }
221
222 [[nodiscard]] obj_key get_key() const ;
223 [[nodiscard]] obj_link get_link() const ;
224 lnklst get_linklist( const col_key & col_key );
225 core_dictionary get_dictionary( const col_key & col_key );
226 void set_null( const col_key &);
227 obj create_and_set_linked_object( const col_key &);
228 Table_view get_backlink_view( Table , col_key );
229 void to_json(std::ostream& out) const noException ;
230 private :
231 内联 const Obj* get_obj() const;
232 inline Obj* get_obj();
233 朋友 内联 const Obj* get_obj(const obj&);
234 朋友 inline Obj* get_obj( obj &);
235 template < typename T>
236 好友T get( const obj &, const col_key & col_key );
237#ifdef CPPREALM_HAVE_GENERATED_BRIDGE_TYPES
238 存储::Obj m_obj[ 1 ];
239#else
240 std::shared_ptr<Obj> m_obj;
241#endif
242 };
243
244 struct 群组{
245 群组 ( &);
246 Table get_table(uint 32 _ttable_key);
247 Table get_table( const std::string&table_key);
248 private :
249std::reference_wrapper<realm> m_realm;
250 };
251
252 std::string classtable_name_for_object_type( const std::string&);
253 }
254
255
256#endif //CPREALM_BRIDGE_OBJ_HPP
定义: accessors.hpp:33
定义: types.hpp: 75
定义: binary.hpp: 30
定义: col_key.hpp: 28
定义: dictionary.hpp: 106
定义:十进制128 .hpp: 30
定义: obj.hpp: 244
定义: lnklst.hpp: 33
定义: mixed.hpp:69
定义: obj_key.hpp: 33
定义: obj.hpp:123
定义: object_id.hpp:31
定义: realm.hpp: 67
定义: set.hpp: 48
定义: table.hpp:40
定义: timestamp.hpp: 30
定义: uuid.hpp:32
定义: obj.hpp:62
定义: types.hpp:56
定义: types.hpp:35