Realm C++ SDK 버전 v2.2.0

obj.hpp

1
2//
3//저작권 2024 Realm Inc.
4//
5// Apache 라이선스, 버전 2.0("라이선스")에 따라 라이선스가 부여됩니다.
6// 라이선스를 준수하는 경우를 제외하고는 이 파일을 사용할 수 없습니다.
7// 다음에서 라이선스 사본을 얻을 수 있습니다.
8//
9// http://www.apache.org/licences/LICENSE-2.0
10//
11// 관련 법률에서 요구하거나 문서로 동의하지 않는 한, 소프트웨어
12// 라이선스에 따라 배포되는 것은 '있는 그대로' 배포됩니다,
13// Express 묵시적이든 어떤 종류의 보증이나 조건도 제공하지 않습니다.
14// 권한을 관리하는 특정 언어에 대한 내용은 라이선스를 참조하세요.
15// 라이선스에 따른 제한 사항.
16//
18
19#ifndef CPPRALM_BRIDGE_OBJ_HPP
20#define CPPRALM_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/decimal128.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 클래스 그룹;
41 클래스 Realm;
42 클래스 타임스탬프;
43 클래스 객체;
44 클래스 ObjectSchema;
45 클래스 객체
46 클래스 TableRef;
47 클래스 쿼리;
48 구조체 ColKey;
49 클래스 LnkLst;
50 structNotificationToken ;
51
52 네임스페이스 내부::브릿지 {
53 struct obj_key;
54 struct obj_link;
55 }
56 네임스페이스 internal::type_info {
57 템플릿 <typename, typename>
58 구조체 type_info;
59 }
60
61 템플릿 <typename, typename>
62 구조체 managed 됨 ;
63 템플릿 <typename, typename>
64 구조체 접근자;
65}
66
67namespace realm::internal::bridge {
68 구조체 객체
69 구조체 혼합;
70 구조체 영역;
71 struct lnklst;
72 구조체 쿼리;
73 struct object_schema;
74 구조체 타임스탬프
75 struct obj_key;
76 struct obj_link;
77 구조체 테이블;
78 구조체 딕셔너리;
79 구조체 uuid;
80 구조체 object_id;
81 구조체 십진수128;
82 구조체 목록;
83 구조체
84 struct table_view;
85
86 네임스페이스 {
87 템플릿 <typename T>
88 struct is_optional : std::false_type {
89 기본 = T 를 사용 합니다.
90 };
91
92 템플릿 <typename T>
93 struct is_optional<std::optional<T>> : std::true_type {
94 기본 = T 를 사용 합니다.
95 };
96 }
97
98 템플릿 <typename T>
99 [[nodiscard]] T get(const obj&, const col_key& col_key);
100 템플릿 <>
101 [[nodiscard]] std::string get(const obj&, const col_key& col_key);
102 템플릿 <>
103 [[nodiscard]] uuid get(const obj&, const col_key& col_key);
104 템플릿 <>
105 [[nodiscard]] object_id get(const obj&, const col_key& col_key);
106 템플릿 <>
107 [[nodiscard]] 십진수128 get(const obj&, const col_key& col_key);
108 템플릿 <>
109 [[nodiscard]] 바이너리 get(const obj&, const col_key& col_key);
110 템플릿 <>
111 [[nodiscard]] timestamp get(const obj&, const col_key& col_key);
112 템플릿 <>
113 [[nodiscard]] int64_t get(const obj&, const col_key& col_key);
114 템플릿 <>
115 [[nodiscard]] double get(const obj&, const col_key& col_key);
116 템플릿 <>
117 [[nodiscard]] bool get(const obj&, const col_key& col_key);
118 템플릿 <>
119 [[nodiscard]] mixed get(const obj&, const col_key& col_key);
120 템플릿 <>
121 [[nodiscard]] core_dictionary get(const obj&, const col_key& col_key);
122
123 구조체 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]] 테이블 get_table() const noException;
133 [[nodiscard]] 테이블 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_linking_object(const col_key& col_key);
137 템플릿 <typename T>
138 T get(const col_key& col_key) const {
139 return internal::bridge::get<T>(*this, col_key);
140 }
141
142 템플릿 <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 return internal::bridge::get<T>(*this, col_key);
148 }
149
150 void 설정하다(const col_key& col_key, const int64_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 바이너리& 값);
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 decimal128& 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 템플릿<typename T>
163 std::enable_if_t<std::is_enum_v<T>> 설정하다(const col_key& col_key, const T& value) {
164 set<int64_t>(col_key, static_cast<int64_t>(value));
165 }
166 템플릿<typename T>
167 void 설정하다(const col_key& col_key, const std::optional<T>& value) {
168 if (value) {
169 설정하다(col_key, *value);
170 } 기타 {
171 set_null(col_key);
172 }
173 }
174
175 set_list_values (const col_key& col_key, const std::vector<obj_key>& values);
176 set_list_values (const col_key& col_key, const std::vector<std::string>& values);
177 set_list_values (const col_key& col_key, const std::vector<bool>& values);
178 set_list_values (const col_key& col_key, const std::vector<int64_t>& values);
179 set_list_values (const col_key& col_key, const std::vector<double>& values);
180 set_list_values (const col_key& col_key, const std::vector<internal::bridge::uuid>& values);
181 set_list_values (const col_key& col_key, const std::vector<internal::bridge::object_id>& values);
182 set_list_values (const col_key& col_key, const std::vector<internal::bridge::decimal128>& values);
183 set_list_values (const col_key& col_key, const std::vector<binary>& values);
184 set_list_values (const col_key& col_key, const std::vector<mixed>& values);
185 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 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 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 템플릿 <typename ValueType>
198 set_list_values (const col_key& col_key, const std::vector<ValueType>& values) {
199 std::vector<typename internal::type_info::type_info<ValueType, oid>::internal_type> v2;
200 for (auto v : values) {
201 만약 constexpr (std::is_pointer_v<ValueType>) {
203 만약 constexpr (managed<std::remove_pointer_t<ValueType>, oid >:: 스키마.HasPrimaryKeyProperty ) {
204 auto pk = (*v).*(managed<std::remove_pointer_t<ValueType>, 무효>:: 스키마.primary_key().ptr);
205 m_obj = this->get_table().create_object_with_primary_key(internal::bridge::mixed(serialize(pk.value)));
206 } 기타 {
207 m_obj = m_obj = this->get_table().create_object();
208 }
209 std:: 적용([&m_obj, &v](auto && ...p) {
210 (접근 자<typename std:: decay_t <decltype(p)>::Result, oid >:: 설정하다(
211 m_obj, m_obj.get_table().get_column_key(p.name),
212 (*v).*(std::decay_t<decltype(p)>::ptr)), ...);
213 }, managed<std::remove_pointer_t<ValueType>, oid>:: 스키마.ps);
214 v2.push_back(m_obj.get_key());
215 } 기타 {
216 v2.push_back(:: 영역::serialize(v));
217 }
218 }
219 set_list_values(col_key, v2);
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 무효 set_null(const col_key&);
227 obj create_and_set_linking_object(const col_key&);
228 table_view get_backlink_view(테이블, col_key);
229 oid 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 친구 인라인 Obj* get_obj(obj&);
235 템플릿 <typename T>
236 친구 T get(const obj&, const col_key& col_key);
237#ifdef CPPRALM_HAVE_GENERATED_BRIDGE_TYPES
238 저장::Obj m_obj[1];
239#else
240 std::shared_ptr<Obj> m_obj;
241#endif
242 };
243
244 구조체 그룹 {
245 그룹(영역&);
246 테이블 get_table(uint32_t table_key);
247 테이블 get_table(const std::string& table_key);
248 private:
249 std::reference_wrapper<realm> m_realm;
250 };
251
252 std::string table_name_for_object_type(const std::string&);
253}
254
255
256#endif //CPPREALM_BRIDGE_OBJ_HPP
정의: accessors.hpp:33
정의: types.hpp:75
정의: 바이너리.hpp:30
정의: col_key.hpp:28
정의: 십진수128.hpp:30
정의: lnklst.hpp:33
정의: obj_key.hpp:33
정의: object_id.hpp:31
정의: realm.hpp:67
정의: timestamp.hpp:30
정의: obj.hpp:62
정의: types.hpp:56
정의: types.hpp:35