Realm C++ SDK 버전 v2.2.0

realm.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 CPPREALM_BRIDGE_REALM_HPP
20#define CPPREALM_BRIDGE_REALM_HPP
21
22#include <cpprealm/internal/bridge/utils.hpp>
23
24#include <functional>
25#include <map>
26#include <memory>
27#include <optional>
28#include <string>
29#include <vector>
30
31네임스페이스 영역 {
32 클래스 Realm;
33 구조체 RealmConfig;
34 struct SyncConfig;
35 구조체 스케줄러
36 클래스 SyncUser
37 네임스페이스 앱 {
38 클래스 사용자
39 }
40
41 열거형 클래스 client_reset_mode: uint8_t {
42 // 클라이언트 재설정 오류 발생
43 매뉴얼,
44 // 접근자를 방해하거나 Realm을 닫지 않고 동기화되지 않은 로컬 변경 사항을 삭제합니다.
45 폐기_비동기화,
46 // 동기화되지 않았지만 커밋된 변경 사항을 복구하려고 시도합니다.
47 복구,
48 // 복구를 시도하고 실패하면 로컬을 삭제합니다.
49 recover_or_discard,
50 };
51}
52
53namespace realm::internal::bridge {
54 템플릿<typename T> struct client_reset_mode_base;
55 구조체 그룹;
56 구조체 스키마;
57 struct object_schema;
58 구조체 테이블;
59 구조체 딕셔너리;
60 struct 스레드 안전 참조;
61 구조체 객체
62 구조체 객체
63 struct async_open_task;
64 struct sync_session;
65 struct sync_error;
66
67 구조체 영역 {
68 열거형 클래스 sync_session_stop_policy: uint8_t {
69 즉시, // 모든 Realms/세션이 범위를 벗어나는 즉시 세션을 중지 Go .
70 live_inlimitly, // 세션을 중지하지 않습니다.
71 after_changes_uploaded, Go 모든 Realms/세션이 범위를 벗어나면 업로드가 완료될 때까지 기다렸다가 중지합니다.
72 };
73
74 구조체 sync_config {
75
76 구조체 proxy_config {
77 사용 port_type = std::uint_fast16_t;
78 std::string 주소;
79 port_type 포트;
80 // 기본 권한 부여 의 경우.
81 std::optional<std::pair<std::string, std::string>> username_password;
82 };
83
84 구조체 flx_sync_enabled {};
85 sync_config() {}
86 sync_config(const std::shared_ptr<SyncUser> &user);
87 sync_config(const std::shared_ptr<SyncConfig> &);//NOLINT(google-explicit-constructor)
88 연산자 std::shared_ptr<SyncConfig>() const; //NOLINT(google-explicit-constructor)
89 set_stop_policy (sync_session_stop_policy &&);
90 oid set_error_handler(std::function< oid(const sync_session &, const sync_error &)> &&fn);
91
92 private:
93 std::shared_ptr<SyncConfig> m_config;
94 };
95
96 구조체 config {
97 // 다음이 있는 파일에서 호출되는 update_schema()를 처리하는 방법
98 // 이미 다른 스키마로 초기화됨
99 열거형 클래스 schema_mode : uint8_t {
100 // 스키마 버전이 상향 조정된 경우 모든 스키마 버전을 자동으로 적용합니다.
101 // 변경한 다음 마이그레이션 함수를 호출합니다.
102 //
103 // 스키마 버전이 변경되지 않은 경우 유일한
104 // 변경 사항은 새 테이블을 추가하고 인덱스를 추가하거나 제거한 다음
105 // 적용되는 경우 적용합니다. 마이그레이션 함수를 호출하지 않습니다.
106 //
107 // 이 모드는 다음이 아닌 테이블을 자동으로 제거하지 않습니다.
108 // 마이그레이션에서 수동으로 수행해야 하는 스키마에 있습니다.
109 // 다음을 사용하여 프로세스 간에 Realm 파일 공유를 지원하는 함수
110 // 다른 클래스 하위 집합.
111 //
112 // 이 모드를 사용하면 서로 다른 테이블 하위 집합과 함께 스키마타를 사용할 수 있습니다.
113 // 서로 다른 스레드에 있지만 공유되는 테이블은 다음과 같아야 합니다.
114 // 동일합니다.
115 자동,
116
117 // 파일을 변경할 수 없는 모드로 엽니다. 스키마 버전은 다음과 일치해야 합니다.
118 // 파일의 버전이며, 파일에 있는 모든 테이블은
119 // 인덱스를 제외하고 지정된 스키마와 정확히 일치합니다. 테이블
120 // 파일 에서 누락될 수 있습니다.
121 불변,
122
123 // 읽기 전용 모드에서 Realm을 엽니다. 트랜잭션은 다음을 수행할 수 없습니다.
124 // Realm 인스턴스에서 수행됩니다. 기존 Realm의 스키마
125 // file won't be changed through this Realm instance. 추가 테이블 및
126 // 기존 Realm 스키마 에서는 예비 속성이 허용됩니다. The
127 // 인덱스의 차이도 허용됩니다. 기타 스키마 차이점
128 // 그렇지 않으면 예외가 발생합니다. 이는 불변과는 다릅니다.
129 // 모드에서 동기화 Realm은 읽기 전용 모드로 열 수 있습니다. 변경 사항
130 // 쓰기 가능한 다른 Realm 인스턴스를 통해 Realm 파일에 만들 수 있습니다.
131 // 따라서 이 모드 에서도 알림 이 허용됩니다.
132 읽기 전용,
133
134 // 스키마 버전이 일치하고 스키마 변경 사항이 새로운 경우
135 // 테이블과 인덱스가 추가되거나 제거되면 변경 사항을 다음에 적용 합니다.
136 // 기존 파일.
137 // 그렇지 않으면 파일을 삭제하고 처음부터 다시 만듭니다.
138 // 마이그레이션 함수는 사용되지 않습니다.
139 //
140 // 이 모드를 사용하면 서로 다른 테이블 하위 집합과 함께 스키마타를 사용할 수 있습니다.
141 // 서로 다른 스레드에 있지만 공유되는 테이블은 다음과 같아야 합니다.
142 // 동일합니다.
143 soft_reset_file,
144
145 // 파일을 삭제하고 처음부터 다시 만듭니다.
146 // 마이그레이션 함수는 사용되지 않습니다.
147 hard_reset_file,
148
149 // 허용되는 유일한 변경 사항은 새 테이블을 추가하고 다음에 열을 추가하는 것입니다.
150 // 기존 테이블에서 인덱스를 추가하거나 제거합니다.
151 // 열. 스키마에 없는 추가 테이블은 무시됩니다.
152 // 인덱스는 다음과 같은 경우에만 기존 열에 추가되거나 제거됩니다.
153 // 스키마 버전이 기존 버전보다 큰 경우(다른 스키마 버전과 달리
154 // 모드에서는 스키마 버전이 기존
155 // 하나).
156 // 마이그레이션 함수는 사용되지 않습니다.
157 // 검색된 사용자 클래스를 포함할 때 사용해야 합니다.
158 // 이전에는 Additive라고 불림.
159 //
160 // 이 모드에서는 추가 변경 사항으로 스키마를 업데이트할 수도 있습니다.
161 // Realm이 이미 다른 스레드에서 열려 있는 경우.
162 additive_discovered,
163
164 // AdditiveDiscovered와 동일한 추가 속성을 제외하고는
165 // 이 모드에서는 스키마의 모든 클래스가 명시적으로
166 // 사용자가 포함합니다. 즉, 스키마 검사가 더욱 엄격해집니다.
167 // 포함된 객체 유형이 다음과 같을 때 오류가 발생하는 등의
168 // 최상위 객체 유형에서 연결되지 않은 것이 포함됩니다.
169 additive_explicit,
170
171 // 스키마 버전이 증가했는지 확인하고 마이그레이션을 호출합니다.
172 // 함수를 호출한 다음 스키마 가 일치하는지 확인합니다.
173 // 이 모드에서는 마이그레이션 함수가 필수입니다.
174 //
175 // 이 모드에서는 다음을 여는 모든 스레드와 프로세스가
176 // 파일이 동일한 스키마를 사용합니다.
177 매뉴얼
178 };
179 config();
180 config(const config& other);
181 config& 연산자=(const config& other);
182 config(config&& other);
183 config& 연산자=(config&& other);
184 ~config();
185 config(const RealmConfig&); //NOLINT(google-explicit-constructor)
186 config(const std::string& 경로,
187 const std::shared_ptr<struct scheduler>& 스케줄러);
188 [[nodiscard]] std::string path() const;
189 [[nodiscard]] struct sync_config sync_config() const;
190 [[nodiscard]] std::shared_ptr<struct scheduler> 스케줄러() const;
191 연산자 RealmConfig() const; //NOLINT(google-explicit-constructor)
192 set_path (const std::string&);
193 set_schema (const std::vector<object_schema>&);
194 set_schema_mode (schema_mode);
195 set_scheduler (const std::shared_ptr<struct scheduler>&);
196 set_sync_config(const std::optional<struct<struct sync_config>sync_config >&);
197 set_custom_http_headers (const std::map<std::string, std::string>& headers);
198 set_proxy_config (const sync_config::proxy_config&);
199 set_schema_version (uint64_t version);
200 set_encryption_key (const std::array<char, 64>&);
201 oid should_compact_on_launch (std::function<bool(uint64_t total_bytes, uint64_tused_bytes)>&& fn);
202 std::optional<schema> get_schema();
203
204 템플릿<typename T>
205 set_client_reset_handler (const client_reset_mode_base<T>& 핸들러) {
206 before_client_reset([fn = std::move(handler.m_before)](realm local_realm) {
207 fn(local_realm.freeze());
208 }),
209 after_client_reset([fn = std::move(handler.m_after)](realm local_realm, realm remote_realm) {
210 fn(local_realm.freeze(), remote_realm);
211 }),
212 set_client_reset_mode(handler.m_mode);
213 }
214 enum client_reset_mode get_client_reset_mode() const;
215 private:
216 void set_client_reset_mode(enum client_reset_mode mode);
217 before_client_reset(std::function< oid(영역 old_realm )> 콜백);
218 oid after_client_reset (std::function< oid(realm local_realm , realm remote_realm)> 콜백);
219 인라인 RealmConfig* get_config();
220 인라인 const RealmConfig* get_config() const;
221#ifdef CPPRALM_HAVE_GENERATED_BRIDGE_TYPES
222 storage::Realm_Config m_config[1];
223#else
224 std::shared_ptr<RealmConfig> m_config;
225#endif
226 };
227
228 Realm();
229 Realm(const config&); //NOLINT(google-explicit-constructor)
230 realm(std::shared_ptr<Realm>); //NOLINT(google-explicit-constructor)
231 realm(thread_safe_reference&& tsr, const std::optional<std::shared_ptr<scheduler>>&); //NOLINT(google-explicit-constructor)
232 연산자 std::shared_ptr<Realm>() const; //NOLINT(google-explicit-constructor)
233 그룹 read_group();
234 [[nodiscard]] config get_config() const;
235 [[nodiscard]] struct schema schema() const;
236 start_transaction() const 무효화 ;
237 commit_transaction() const 를 무효화 합니다.
238 테이블 table_for_object_type(const std::string& object_type);
239 테이블 get_table(const uint32_t &);
240 [[nodiscard]] std::shared_ptr<struct scheduler> 스케줄러() const;
241 static async_open_task get_synchronized_realm(const config&);
242 bool refresh();
243 bool is_frozen() const;
244 영역 동결(); // throws
245 Realm thaw(); // throws
246 voidclose ();
247 bool is_closed();
248 void 무효화();
249 obj import_copy_of(const obj&) const;
250 [[nodiscard]] std::optional<sync_session> get_sync_session() const;
251 private:
252 std::shared_ptr<Realm> m_realm;
253 친구 구조체 그룹;
254 };
255
256 템플릿<typename T>
258 보호됨:
259 std::function<oid(T local)> m_before;
260 std::function<oid(T local, T remote)> m_after;
261 ::realm::client_reset_mode m_mode;
262 친구 구조체 internal::bridge::realm::config;
263 };
264
265 템플릿 <typename T>
266 T resolve(const 영역&, thread_safe_reference&& tsr);
267 템플릿 <>
268 딕셔너리 resolve(const realm&, thread_safe_reference&& tsr);
269 템플릿 <>
270 object resolve(const realm&, thread_safe_reference&& tsr);
271
272 bool 연산자 ==(const 영역&, const 영역&);
273 bool 연산자 !=(const realm&, const realm&);
274}
275
276#endif //CPPREALM_BRIDGE_REALM_HPP
정의: async_open_task.hpp:31
정의: dictionary.hpp:138
정의: realm.hpp:67
정의: schema.hpp:32
정의: sync_error.hpp:40
정의: sync_session.hpp:33
정의: thread_safe_reference.hpp:32
정의: Scheduler.hpp:27
정의: app.hpp:92