Realm C++ SDK版本 v 2.2.0

utils.hpp

1
2//
3// 版权所有 2024 Realm Inc.
4//
5// 根据 Apache 许可证 2.0 版(“许可证”)获得许可;
6// 除非符合合规,否则不得使用此文件。
7// 您可以在以下网址获取许可证副本:
8//
9// http://www.apache.org/licenses/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 <WinSock 2 .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
44命名空间realm::internal::bridge {
45 template < typename Left, typename Right, typename = void >
47 template < typename Left, typename Right>
48 struct LayoutCheck <Left, Right, std::enable_if_t<(sizeof(Left) == sizeof(Right) && Alignof(Left) == Alignof(Right))>> : std::true_type {
49 };
50 }
51
52命名空间realm::internal {
53 template < typename ... Typescript , typename ... Us, size_t ... Is>
54 auto constexpr zip_tuples_impl( const std::tuple<Ts...>&tuple 1 , const std::tuple<Us...>&tuple 2 , std::index_sequence<Is...>) {
55 return std::make_tuple(std::make_pair(std::get<Is>(tuple 1 ), std::get<Is>(tuple 2 ))...);
56 }
57
58 template < typename ... Typescript , typename ... Us>
59 auto constexpr zip_tuples( const std::tuple<Ts...>&tuple 1 , const std::tuple<Us...>&tuple 2 ) {
60 static_assert ( sizeof ...( Typescript ) == sizeof ...(Us), "元组必须具有相同大小" );
61 return zip_tuples_impl(tuple 1 , tuple 2 , 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:: 大量<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:: 大量<T, N>& arr) {
71 return array_to_tuple_impl(arr, std::make_index_sequence<N>{});
72 }
73 }
74
75#endif //CPREALM_BRIDGE_UTILS_HPP
Definition: utils.hpp:46