Zivid C++ API 2.8.1+dd4dffea-1
Defining the Future of 3D Machine Vision
TypeTraits.h
Go to the documentation of this file.
1
2
3/*******************************************************************************
4
5 * This file is part of the Zivid 3D Camera API
6
7 *
8
9 * Copyright 2015-2022 (C) Zivid AS
10
11 * All rights reserved.
12
13 *
14
15 * Zivid Software License, v1.0
16
17 *
18
19 * Redistribution and use in source and binary forms, with or without
20
21 * modification, are permitted provided that the following conditions are met:
22
23 *
24
25 * 1. Redistributions of source code must retain the above copyright notice,
26
27 * this list of conditions and the following disclaimer.
28
29 *
30
31 * 2. Redistributions in binary form must reproduce the above copyright notice,
32
33 * this list of conditions and the following disclaimer in the documentation
34
35 * and/or other materials provided with the distribution.
36
37 *
38
39 * 3. Neither the name of Zivid AS nor the names of its contributors may be used
40
41 * to endorse or promote products derived from this software without specific
42
43 * prior written permission.
44
45 *
46
47 * 4. This software, with or without modification, must not be used with any
48
49 * other 3D camera than from Zivid AS.
50
51 *
52
53 * 5. Any software provided in binary form under this license must not be
54
55 * reverse engineered, decompiled, modified and/or disassembled.
56
57 *
58
59 * THIS SOFTWARE IS PROVIDED BY ZIVID AS "AS IS" AND ANY EXPRESS OR IMPLIED
60
61 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
62
63 * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
64
65 * DISCLAIMED. IN NO EVENT SHALL ZIVID AS OR CONTRIBUTORS BE LIABLE FOR ANY
66
67 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
68
69 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
70
71 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
72
73 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
74
75 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
76
77 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
78
79 *
80
81 * Contact: Zivid Customer Success Team <customersuccess@zivid.com>
82
83 * Info: http://www.zivid.com
84
85 ******************************************************************************/
86
87
88
89#pragma once
90
91#include <type_traits>
92#include <utility>
93
94namespace Zivid
95{
96#ifndef NO_DOC
98 namespace Detail
99 {
100 namespace TypeTraits
101 {
102 // This file is intended to be used in public headers only. Internally use
103 // Traits.h exclusively (the traits in this file are available via Traits.h)
104
105 template<typename T, typename...>
106 struct IsInList : std::false_type
107 {};
108
109 template<typename T, typename First, typename... Rest>
110 struct IsInList<T, First, Rest...>
111 : std::integral_constant<bool, std::is_same<T, First>::value || IsInList<T, Rest...>::value>
112 {};
113
114 template<typename T, typename Tuple>
115 struct IsInTuple;
116
117 template<typename T, typename... Ts>
118 struct IsInTuple<T, std::tuple<Ts...>> : IsInList<T, Ts...>
119 {};
120
121 template<typename Tuple, typename... Args>
122 struct AllArgsAreInTuple : std::true_type
123 {};
124
125 template<typename Tuple, typename Arg, typename... Args>
126 struct AllArgsAreInTuple<Tuple, Arg, Args...>
127 : std::integral_constant<bool, IsInTuple<Arg, Tuple>::value && AllArgsAreInTuple<Tuple, Args...>::value>
128 {};
129
130 template<typename... Args>
131 struct AllArgsDecayedAreUnique : std::true_type
132 {};
133
134 template<typename Head, typename... Tail>
135 struct AllArgsDecayedAreUnique<Head, Tail...>
136 : std::integral_constant<
137 bool,
138 !IsInList<typename std::decay<Head>::type, typename std::decay<Tail>::type...>::value
139 && AllArgsDecayedAreUnique<Tail...>::value>
140 {};
141
142 template<typename... Ts>
143 struct Concatenate;
144
145 template<typename... T1s, typename... T2s, typename... Rest>
146 struct Concatenate<std::tuple<T1s...>, std::tuple<T2s...>, Rest...>
147 : Concatenate<std::tuple<T1s..., T2s...>, Rest...>
148 {};
149
150 template<typename... T1s>
151 struct Concatenate<std::tuple<T1s...>>
152 {
153 using Type = std::tuple<T1s...>;
154 };
155
156 template<typename T>
157 struct TypeIdentity
158 {
159 using Type = T;
160 };
161 } // namespace TypeTraits
162 } // namespace Detail
163#endif
164} // namespace Zivid
The main Zivid namespace. All Zivid code is found here
Definition: Application.h:99