Realm C++ SDK 버전 v2.2.0

utils.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_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#undef max // 이 헤더 파일 의 뒷부분에서 호출되는 numeric_limits::max와 충돌합니다.
35#undef min // 이 헤더 파일 에서 나중에 호출되는 numeric_limits::min과 충돌합니다.
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 템플릿 <typename 왼쪽, typename 오른쪽, typename = oid>
46 구조체 layoutCheck;
47 템플릿 <typename 왼쪽, typename 오른쪽>
48 구조체 ArrayCheck<Left, right, std::enable_if_t<(sizeof(Left) == sizeof(Right) && alignof(Left) == ignof(Right))>> : std::true_type {
49 };
50}
51
52namespace realm::internal {
53 template <typename... Typescript, typename... Us, size_t... Is>
54 자동 constexpr zip_tuple_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 자동 constexpr zip_tuples(const std::tuple<Ts...>& tuple1, const std::tuple<Us...>& tuple2) {
60 static_assert(sizeof...(Typescript) == sizeof...(Us), "튜플의 크기가 같아야 합니다");
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 자동 constexpr array_to_tuple_impl(const std:: 배열<T, N>& arr, std::index_sequence<Is...>) {
66 return std::make_tuple(arr[Is]...);
67 }
68
69 템플릿 <typename T, std::size_t N>
70 자동 constexpr array_to_tuple(const std:: 배열<T, N>& arr) {
71 return array_to_tuple_impl(arr, std::make_index_sequence<N>{});
72 }
73}
74
75#endif //CPPREALM_BRIDGE_UTILS_HPP