fix path with string comparison
[kazan.git] / src / util / copy_cv_ref.h
1 /*
2 * Copyright 2017 Jacob Lifshay
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in all
12 * copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 * SOFTWARE.
21 *
22 */
23
24 #ifndef UTIL_COPY_CV_REF_H_
25 #define UTIL_COPY_CV_REF_H_
26
27 namespace vulkan_cpu
28 {
29 namespace util
30 {
31 template <typename Source, typename Dest>
32 struct copy_const
33 {
34 typedef Dest type;
35 };
36
37 template <typename Source, typename Dest>
38 struct copy_const<const Source, Dest>
39 {
40 typedef const Dest type;
41 };
42
43 template <typename Source, typename Dest>
44 using copy_const_t = typename copy_const<Source, Dest>::type;
45
46 template <typename Source, typename Dest>
47 struct copy_volatile
48 {
49 typedef Dest type;
50 };
51
52 template <typename Source, typename Dest>
53 struct copy_volatile<volatile Source, Dest>
54 {
55 typedef volatile Dest type;
56 };
57
58 template <typename Source, typename Dest>
59 using copy_volatile_t = typename copy_volatile<Source, Dest>::type;
60
61 template <typename Source, typename Dest>
62 struct copy_cv
63 {
64 typedef copy_const_t<Source, copy_volatile_t<Source, Dest>> type;
65 };
66
67 template <typename Source, typename Dest>
68 using copy_cv_t = typename copy_cv<Source, Dest>::type;
69
70 template <typename Source, typename Dest>
71 struct copy_ref
72 {
73 typedef Dest type;
74 };
75
76 template <typename Source, typename Dest>
77 struct copy_ref<Source &, Dest>
78 {
79 typedef Dest &type;
80 };
81
82 template <typename Source, typename Dest>
83 struct copy_ref<Source &&, Dest>
84 {
85 typedef Dest &&type;
86 };
87
88 template <typename Source, typename Dest>
89 using copy_ref_t = typename copy_ref<Source, Dest>::type;
90
91 template <typename Source, typename Dest>
92 struct copy_cv_ref
93 {
94 typedef copy_cv_t<Source, copy_ref_t<Source, Dest>> type;
95 };
96
97 template <typename Source, typename Dest>
98 using copy_cv_ref_t = typename copy_cv_ref<Source, Dest>::type;
99 }
100 }
101
102 #endif /* UTIL_COPY_CV_REF_H_ */