Realm C++ SDK Versão C++ v2.2.0

obj.hpp

1
2//
3// Autores 2024 Realm Inc.
4//
5// Licenciado sob a Licença Apache, Versão 2.0 (a "Licença");
6// você não pode usar este arquivo, exceto em conformidade com a Licença.
7// Você pode obter uma cópia da Licença em
8//
9// http://www.apache.org/license/LICENSE-2.0
10//
11// A menos que exigido pela lei aplicável ou acordado por escrito, o software
12// distribuído sob a Licença é distribuído "Como está",
13// sem garantias ou condições de qualquer tipo, Express ou implícitas.
14// Consulte a Licença para obter as permissões específicas de domínio do idioma e
15// limitações da Licença.
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 <cprealm/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 <cprealm/internal/bridge/Dictionary.hpp>
34#include <cpprealm/internal/bridge/ objeto.hpp>
35#include <cpprealm/internal/bridge/object_id.hpp>
36#include <cprealm/internal/bridge/table.hpp>
37#include <cprealm/internal/bridge/utils.hpp>
38
39namespace Realm {
40 grupo de classe ;
41 classe Realm;
42 classe Timestamp;
43 classe Objeto;
44 classe ObjectSchema;
45 classe Obj;
46 class TableRef;
47 query de classe ;
48 struct ColKey;
49 classe LnkLst;
50 struct NotificationToken;
51
52 namespace interno::bridge {
53 estruturado obj_key;
54 estruturado obj_link;
55 }
56 namespace internal::type_info {
57 modelo <typename, typename>
58 estrutura, estrutura type_info;
59 }
60
61 modelo <typename, typename>
62 estrutura, estrutura managed;
63 modelo <typename, typename>
64 estrutura, estrutura acessador;
65}
66
67namespace realm::internal::bridge {
68 estrutura obj;
69 estrutura mista;
70 domínio estruturado ;
71 struct lnklst;
72 query de estrutura ;
73 estrutura object_schema;
74 carimbo de data/hora da estrutura ;
75 estruturado obj_key;
76 estruturado obj_link;
77 tabela estrutura ;
78 dicionário estruturado ;
79 estrutura, estrutura uuid;
80 estrutura, estrutura object_id;
81 estrutura, estrutura decimal128;
82 lista de estruturas ;
83 linha estrutura ;
84 estrutura table_view;
85
86 namespace {
87 modelo <typename T>
88 estrutura is_optional : std::false_type {
89 utilizando subjacente = T;
90 };
91
92 modelo <typename T>
93 estrutura is_optional<std::opcional<T>> : std::true_type {
94 utilizando subjacente = T;
95 };
96 }
97
98 modelo <typename T>
99 [[nodiscard]] T get(const obj&, const col_key& col_key);
100 modelo <>
101 [[nodiscard]] std::string get(const obj&, const col_key& col_key);
102 modelo <>
103 [[nodiscard]] uuid get(const obj&, const col_key& col_key);
104 modelo <>
105 [[nodiscard]] object_id get(const obj&, const col_key& col_key);
106 modelo <>
107 [[nodiscard]] decimal128 get(const obj&, const col_key& col_key);
108 modelo <>
109 [[nodiscard]] binary get(const obj&, const col_key& col_key);
110 modelo <>
111 [[nodiscard]] timestamp get(const obj&, const col_key& col_key);
112 modelo <>
113 [[nodiscard]] int64_t get(const obj&, const col_key& col_key);
114 modelo <>
115 [[nodiscard]] double get(const obj&, const col_key& col_key);
116 modelo <>
117 [[nodiscard]] bool get(const obj&, const col_key& col_key);
118 modelo <>
119 [[nodiscard]] mixed get(const obj&, const col_key& col_key);
120 modelo <>
121 [[nodiscard]] core_Dictionary get(const obj&, const col_key& col_key);
122
123 estrutura, estrutura obj {
124 obj();
125 obj(const obje outros);
126 obj& operator=(const obj& other) ;
127 obj(obj&& outro);
128 obj& operator=(obj&& other);
129 ~obj();
130 obj(const Obj&); //NOLINT google-explicit-constructor
131 operador Obj() const; //NOLINT google-explicit-constructor
132 [[nodiscard]] table get_table() const noexceto;
133 [[nodiscard]] table get_target_table(col_key) const noexceto;
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 modelo <typename T>
138 T get(const col_key& col_key) const {
139 return internal::bridge::get<T>(*this, col_key);
140 }
141
142 modelo <typename T>
143 std::optional<T> get_optional(const col_key& col_key) const {
144 se (is_null(col_key)) {
145 return std::nullopt;
146 }
147 return internal::bridge::get<T>(*this, col_key);
148 }
149
150 vazio set(const col_key& col_key, const int64_t& valor);
151 vazio set(const col_key& col_key, const double& value);
152 vazio set(const col_key& col_key, const std::string& valor);
153 vazio set(const col_key& col_key, const misto& valor);
154 vazio set(const col_key& col_key, const bool& value);
155 vazio set(const col_key& col_key, const timestamp& value);
156 vazio set(const col_key& col_key, const binary& value);
157 vazio set(const col_key& col_key, const uuid& value);
158 vazio set(const col_key& col_key, const object_id& value);
159 vazio set(const col_key& col_key, const decimal128& value);
160 vazio set(const col_key& col_key, const obj_key& value);
161 vazio set(const col_key& col_key, const std::chrono::time_point<std::chrono::system_clock>& value);
162 modelo<typename T>
163 std::enable_if_t<std::is_enum_v<T>> set(const col_key& col_key, const T& valor) {
164 set <int64_t>(col_key, static_cast <int64_t>(valor));
165 }
166 modelo<typename T>
167 vazio set(const col_key& col_key, const std::optional<T>& valor) {
168 se (valor) {
169 set(col_key, *value);
170 } mais {
171 set_null(col_key);
172 }
173 }
174
175 set_list_values (const col_key& col_key, const std::vector<obj_key>& valores);
176 set_list_values (const col_key& col_key, const std::vector<std::string>valores);
177 set_list_values (const col_key& col_key, const std::vector<bool>& valores);
178 set_list_values (const col_key& col_key, const std::vector<int64_t>& valores);
179 set_list_values (const col_key& col_key, const std::vector<double>& valores);
180 set_list_values (const col_key& col_key, const std::vector<internal::bridge::uuid>& valores);
181 set_list_values (const col_key& col_key, const std::vector<internal::bridge::object_id>& valores);
182 set_list_values nulos (const col_key& col_key, const std::vector<internal::bridge::decimal128>& valores);
183 set_list_values vazios ( valores const col_key& col_key, const std::vector<binary>&);
184 set_list_values vazios ( valores const col_key& col_key, const std::vector<mixed>&);
185 set_list_values (const col_key& col_key, const std::vector<timestamp>& valores);
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 vazias (const col_key& col_key, const std::vector <std::optional<double>> valores);
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 vazias (const col_key& col_key, const std::vector<std::optional<binary>>& valores);
195 void set_list_values(const col_key& col_key, const std::vector<std::optional<timestamp>>& values);
196
197 modelo <typename ValueType>
198 set_list_values nulos (const col_key& col_key, const std::vector<ValueType>& valores) {
199 std::vector<typename internal::type_info::type_info<ValueType, null>::internal_type> v2;
200 para ( valores v :automático ) {
201 se constexpr (std::is_pointer_v<ValueType>) {
203 se constexpr (managed <std::remove_pointer_t<ValueType>, null >:: schema.HasPrimaryKeyProperty ) {
204 auto pk = (*v).*(managed <std::remove_pointer_t<ValueType>, null >:: schema.primary_key ().ptr);
205 m_obj = esta->get_table().create_object_with_primary_key(internal::bridge::mixed(serialize(pk.value)));
206 } mais {
207 m_obj = m_obj = esta->get_table().create_object();
208 }
209 std::apply([&m_obj, &v](auto && ...p) {
210 (acessador<typename std::decay_t<decltype(p)>::Result, null>::set(
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>, null >:: schema.ps );
214 v2.push_back(m_obj.get_key());
215 } mais {
216 v2.push_back(:: Realm::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_linked_object(const col_key&);
228 table_view get_backlink_view(table, col_key);
229 to_json (std::ostream& out) const noexceto;
230 privado:
231 in-line const Obj* get_obj() const;
232 inline Obj* get_obj();
233 amigo in-line const Obj* get_obj(const obj&);
234 amigo inline Obj* get_obj(obj&);
235 modelo <typename T>
236 amigo T get(const obj&, const col_key& col_key);
237#ifdef CPPREALM_HVE_GENERATED_BRIDGE_TYPes
238 armazenamento::Obj m_obj[1];
239#else
240 std::shared_ptr<Obj> m_obj;
241#endif
242 };
243
244 estrutura, estrutura grupo {
245 grupo(Realm&);
246 tabela get_table(uint32_t table_key);
247 tabela get_table(const std::string& table_key);
248 privado:
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
Definição: accessors.hpp:33
Definição: tipos.hpp:75
Definição: binary.hpp:30
Definição: col_key.hpp:28
Definição: dictionary.hpp:106
Definição: decimal128.hpp:30
Definição: obj.hpp:244
Definição: lnklst.hpp:33
Definição: misto.hpp:69
Definição: obj_key.hpp:33
Definição: obj.hpp:123
Definição: object_id.hpp:31
Definição: realm.hpp:67
Definição: set.hpp:48
Definição: table.hpp:79
Definição: table.hpp:40
Definição: timestamp.hpp:30
Definição: uuid.hpp:32
Definição: obj.hpp:62
Definição: tipos.hpp:56
Definição: tipos.hpp:35