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

utils.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_UTILS_HPP
20#define CPPREALM_BRIDGE_UTILS_HPP
21
22#include <functional>
23#include <memory>
24#include <string_view>
25#include <string>
26#include <type_traits>
27
28#ifdef _WIN32
29
30#include <WinSock2.h>
31#include <intrin.h>
32#include <BaseTsd.h>
33
34#undf max // colide com numeric_limits::max chamado mais tarde neste arquivo de cabeçalho
35#undef min // colide com numeric_limits::min chamado mais tarde neste arquivo de cabeçalho
36#include <safeint.h>
37
38#endif // _WIN32
39
40#if __has_include(<cpprealm/internal/bridge/bridge_types.hpp>)
41#include <cpprealm/internal/bridge/bridge_types.hpp>
42#endif
43
44namespace realm::internal::bridge {
45 template <typename Esquerda, typename Direita, typename = null>
46 estrutura, estrutura Verifique o layout;
47 modelo <typename à esquerda, typename à direita>
48 estrutura, estrutura layoutCheck<Left, Right, std::enable_if_t<(sizeof(Left) == sizeof(Right) && alineof(Left) == validatef(Right))>> : std::true_type {
49 };
50}
51
52namespace realm::internal {
53 template <typename... Typescript, typename... Us, size_t... Is>
54 auto constexpr zip_tuples_impl(const std::tuple<Ts...>& tuple1, const std::tuple<Us...>& tuple2, std::index_sequence<Is...>) {
55 return std::make_tuple(std::make_pair(std::get<Is>(tuple1), std::get<Is>(tuple2))...);
56 }
57
58 template <typename... Typescript, typename... Us>
59 auto constexpr zip_tuples(const std::tuple<Ts...>& tuple1, const std::tuple<Us...>& tuple2) {
60 estático_assert(sizeof...(Typescript) == sizeof...(Us), "Tuplas devem ter o mesmo tamanho");
61 return zip_tuples_impl(tuple1, tuple2, std::index_sequence_for<Ts...>());
62 }
63
64 template <typename T, std::size_t N, std::size_t... Is>
65 auto constexpr array_to_tuple_impl(const std::array<T, N>& arr, std::index_sequence<Is...>) {
66 return std::make_tuple(arr[Is]...);
67 }
68
69 template <typename T, std::size_t N>
70 auto constexpr array_to_tuple(const std::array<T, N>& arr) {
71 return array_to_tuple_impl(arr, std::make_index_sequence<N>{});
72 }
73}
74
75#endif //CPPrealm_BRIDGE_UTILS_HPP
Definition: utils.hpp:46