19#ifndef CPPREALM_TYPES_HPP
20#define CPPREALM_TYpes_HPP
27#include <cprealm/internal/bridge/realm.hpp>
28#include <cpprealm/internal/bridge/schema.hpp>
29#include <cpprealm/internal/type_info.hpp>
33 const size_t not_in_collection = -1;
35 estrutura, estrutura uuid {
36 explícito uuid(
const std::string &);
37 uuid(
const std::array<uint8_t, 16>&);
39 [[nodiscard]] std::string to_string()
const;
40 [[nodiscard]] std::string to_base64()
const;
41 [[nodiscard]] std::array<uint8_t, 16> to_bytes()
const;
45 modelo <
typename mapped_type>
49 in-line operador de
bool ==(
const uuid& lhs,
const uuid& rhs) {
return lhs.m_uuid == rhs.m_uuid; }
50 in-line operador de
bool !=(
const uuid& lhs,
const uuid& rhs) {
return lhs.m_uuid != rhs.m_uuid; }
51 in-line operador de
bool >(
const uuid& lhs,
const uuid& rhs) {
return lhs.m_uuid > rhs.m_uuid; }
52 in-line operador de
bool >=(
const uuid& lhs,
const uuid& rhs) {
return lhs.m_uuid >= rhs.m_uuid; }
53 in-line operador de
bool <(
const uuid& lhs,
const uuid& rhs) {
return lhs.m_uuid < rhs.m_uuid; }
54 in-line operador de
bool <=(
const uuid& lhs,
const uuid& rhs) {
return lhs.m_uuid <= rhs.m_uuid; }
60 [[nodiscard]] std::string to_string()
const;
64 modelo <
typename mapped_type>
68 in-line operador de
bool ==(
const object_id& lhs,
const object_id& rhs) {
return lhs.m_object_id == rhs.m_object_id; }
69 in-line operador de
bool !=(
const object_id& lhs,
const object_id& rhs) {
return lhs.m_object_id != rhs.m_object_id; }
70 in-line operador de
bool <(
const object_id& lhs,
const object_id& rhs) {
return lhs.m_object_id < rhs.m_object_id; }
71 in-line operador de
bool >(
const object_id& lhs,
const object_id& rhs) {
return lhs.m_object_id > rhs.m_object_id; }
72 in-line operador de
bool <=(
const object_id& lhs,
const object_id& rhs) {
return lhs.m_object_id <= rhs.m_object_id; }
73 in-line operador
bool >=(
const object_id& lhs,
const object_id& rhs) {
return lhs.m_object_id >= rhs.m_object_id; }
79 [[nodiscard]] std::string to_string()
const;
80 [[nodiscard]]
bool is_NaN()
const;
84 modelo <
typename mapped_type>
98 in-line operador
bool >( decimal
const 128& lhs, decimal
const 128& rhs) {
return lhs.m_decimal > rhs.m_decimal; }
99 in-line operador
bool >=( decimal
const 128& lhs, decimal
const 128& rhs) {
return lhs.m_decimal >= rhs.m_decimal; }
100 in-line operador
bool <( decimal
const 128& lhs, decimal
const 128& rhs) {
return lhs.m_decimal < rhs.m_decimal; }
101 in-line operador
bool <=(
const decimal128& lhs,
const decimal128& rhs) {
return lhs.m_decimal <= rhs.m_decimal; }
102 in-line bool operator ==(
const decimal128& lhs,
const decimal128& rhs) {
return lhs.m_decimal == rhs.m_decimal; }
103 in-line operador de
bool !=(
const decimal128& lhs,
const decimal128& rhs) {
return lhs.m_decimal != rhs.m_decimal; }
108 estático inline int64_t serialize(int64_t v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
111 estático inline int64_t deserialize(int64_t v) {
115 estático inline std:: Realm<int64> serialize(
const std::optional64
<internal::bridge::realm>{
118 estático inline std::opcional <int64_t> deserialize(
const std::opcional<int64_t>& v) {
122 estático in-line double serialização (
const double& v,
const std::opcional<internal::bridge::realm>& = std::nullopt) {
125 estático in-line desserialização
double (
const double& v) {
129 estático inline std::optional<double> serialize(
const std::optional<double>& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
132 estático inline std::opcional<double> deserialize(
const std::opcional<double>& v) {
136 estático in-line bool serialize(
bool v,
const std::opcional<internal::bridge::realm>& = std::nulopt) {
139 estático in-line bool desserialize(
bool v) {
143 estático inline std::opcional<bool> serialize(std::opcional<bool> v,
const std::opcional<internal::bridge::realm>& = std::nullopt) {
146 estático inline std::opcional<bool> deserialize(std::opcional<bool> v) {
151 estático in-line typename std::enable_if_t<std::is_enum_v<T>, int64_t> serialize(
const T& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
152 Método estático_cast <int64_t
>(v);
154 template<
typename T, std::enable_if_t<std::is_enum_v<T>>>
155 estático inline T desserialize(int64_t v) {
156 Método estático_cast<T
>(v);
160 estático inline std::enable_if_t<std::is_enum_v<typename T::value_type>, std::optional<int64_t>> serialize(
const T& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
162 Método estático_cast <int64_t
>(*v);
167 modelo<
typename T, std::enable_if_t<std::is_enum_v<
typename T::value_type>>>
168 estático inline std::opcional <int64_t> deserialize(std::opcional <int64_t> v) {
170 Método estático_cast<T
>(*v);
176 estático inline std::string serialize(
const std::string& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
179 estático inline std::string deserialize(
const std::string& v) {
183 estático inline std::optional<std::string> serialize(
const std::optional<std::string>& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
186 estático inline std::opcional<std::string> deserialize(
const std::opcional<std::string>& v) {
190 estático inline internal::bridge::uuid serialize(
const uuid& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
193 estático inline uuid deserialize(
const internal::bridge::uuid& v) {
194 retornar v.operator :: Realm::uuid();
197 estático inline std::optional<internal::bridge::uuid> serialize(
const std::opcional<uuid>& v,
const std::opcional<internal::bridge::realm>& = std::nullopt) {
200 estático inline std::opcional<uuid> deserialize(
const std::opcional<internal::bridge::uuid>& v) {
202 return v->operator ::Realm::uuid();
208 estático inline internal::bridge::binary serialize(
const std::vector<uint8_t>& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
211 estático inline std::vector<uint8_t> deserialize(
const internal::bridge::binary& v) {
212 return v.operator std::vector<uint8_t>();
215 estático inline std::optional<internal::bridge::binary> serialize(
const std::opcional<std::vector<uint8_t>>& v,
const std::opcional<internal::bridge::realm>& = std::nullopt) {
218 estático inline std::optional <std::vector <uint8_t>> deserialize(
const std::optional<internal::bridge::binary>& v) {
220 return v->operator std::vector<uint8_t>();
226 estático inline internal::bridge::timestamp serialize(
const std::chrono::time_point<std::chrono::system_clock>& v,
const std::optional<internal::bridge::realm>& = std::nullopt ) {
229 estático inline std::chrono::time_point<std::chrono::system_clock> deserialize(
const internal::bridge::timestamp& v) {
230 return v.operator<std::chrono::system_clock> std::chrono::time_point();
233 estático inline std::optional<internal::bridge::timestamp> serialize(
const std::optional<std::chrono::time_point<std::chrono::system_clock>>& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
236 estático inline std::opcional <std::chrono::time_point<std::chrono::system_clock>> deserialize(
const std::opcional<internal::bridge::timestamp>& v) {
238 retornar v->operator std::chrono::time_point<std::chrono::system_clock>();
244 estático inline internal::bridge::object_id serialize(
const Realm::object_id& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
247 estático in-line realm::object_id deserialize(
const internal::bridge::object_id& v) {
248 return v.operator :: Realm::object_id();
251 estático inline std::opcional<internal::bridge::object_id> serialize(
const <realm::object_id>std::opcional"Realm::object_id>& v,
const <internal::bridge::realm>std::opcional & = std::nullopt ) {
254 estático inline std::optional<realm::object_id> deserialize(
const std::optional<internal::bridge::object_id>& v) {
256 return v->operator ::realm::object_id();
262 estático inline internal::bridge::decimal128 serialize(
const realm::decimal128& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
265 estático in-line realm::decimal128 deserialize(
const internal::bridge::decimal128& v) {
266 return v.operator ::realm::decimal128();
269 estático inline std::opcional <interno::ponte::decimal128> serialize(
const std::opcional < Realm::decimal128>& v,
const std::opcional<internal::bridge::realm>& = std::nullopt) {
272 estático inline std::opcional < Realm::decimal128> deserialize(
const std::opcional <internal::bridge::decimal128>& v) {
274 retornar v->operador :: Realm::decimal128();
281 estático in-line typename std::enable_if_t<internal::type_info::MixedPersistableConcept<T>::value, internal::bridge::mixed> serialize(
const T& v,
const std::optional<internal::bridge::realm>& = std::nullopt) {
282 return std::visit([&](
auto&& arg) {
283 usando StoredType = std::decay_t<
decltype(arg)>;
284 usando M =
typename internal::type_info::type_info<StoredType>::internal_type;
285 return internal::bridge::mixed(M(arg));
290 estático in-line typename std::enable_if_t<!internal::type_info::MixedPersistableConcept<T>::value, T>
291 deserialize(
const internal::bridge::mixed& value) {
292 se constexpr (internal::type_info::is_optional<T>::value) {
294 }
else if constexpr (std::is_same_v<T, int64_t>) {
295 valor de
retorno.operator int64_t();
296 }
mais se constexpr (std::is_same_v<T, bool>) {
297 valor de
retorno.operador bool();
298 }
else if constexpr (std::is_same_v<T, std::string>) {
299 Método estático_cast <std::string
>(valor);
300 }
else if constexpr (std::is_same_v<T, std::vector<uint8_t>>) {
301 Método estático_cast<std::vector<uint8_t>
>(
estático_cast<interno::bridge::binário
>(valor));
302 }
else if constexpr (std::is_same_v<T, std::chrono::time_point<std::chrono::system_clock>>) {
303 Método estático_cast<interno::bridge::timestamp
>(valor);
304 }
mais se constexpr (std::disjunction_v<std::is_same<T, double>, std::is_same<T, float>>) {
305 Método estático_cast <double>(valor);
306 }
else if constexpr (std::is_same_v<T, realm::uuid>) {
307 valor de
retorno.operator internal::bridge::uuid().operator :: Realm::uuid();
308 }
else if constexpr (std::is_same_v<T, realm::object_id>) {
309 valor de
retorno.operator internal::bridge::object_id().operator :: Realm::object_id();
310 }
mais se constexpr (std::is_same_v<T, realm::decimal128>) {
311 valor de
retorno.operator internal::bridge::decimal128() .operator :: Realm::decimal128();
312 }
else if constexpr (std::is_enum_v<T>) {
313 Método estático_cast<T
>(valor.operador int64_t());
320 estático in-line typename std::enable_if_t<internal::type_info::MixedPersistableConcept<T>::value, T>
321 deserialize(
const internal::bridge::mixed& value) {
322 if (value.is_null()) {
323 return std::monostate();
326 switch (value.type()) {
327 caso interno::bridge::data_type::Int:
328 valor de
retorno.operator int64_t();
329 caso internal::bridge::data_type::Bool:
330 valor de
retorno.operador bool();
331 caso interno::bridge::data_type::String:
332 Método estático_cast <std::string
>(valor);
333 caso interno::bridge::data_type::Binary:
334 Método estático_cast<std::vector<uint8_t>
>(
estático_cast<interno::bridge::binário
>(valor));
335 caso interno::bridge::data_type::Timestamp:
336 Método estático_cast<interno::bridge::timestamp
>(valor);
337 caso interno::bridge::data_type::Float:
338 caso interno::bridge::data_type::Double:
339 Método estático_cast <double>(valor);
340 caso interno::bridge::data_type::UUID:
341 valor de
retorno.operator internal::bridge::uuid().operator :: Realm::uuid();
342 caso interno::bridge::data_type::ObjectId:
343 valor de
retorno.operator internal::bridge::object_id().operator :: Realm::object_id();
344 caso internal::bridge::data_type::Decimal:
345 valor de
retorno.operator internal::bridge::decimal128().operator :: Realm::decimal128();
346 caso interno::bridge::data_type::TypedLink:
347 lance std::runtime_error(
"Objetos armazenados em propriedades mistas devem ser acessados via `get_object_value()'");
349 lance std::runtime_error(
"Tipo de dados desconhecido ao desserializar propriedade mista.");
Definição: managed_Dictionary.hpp:31
Definição: decimal128.hpp:30
Definição: object_id.hpp:31