Skip to content

Commit 83991b9

Browse files
committed
added tuple.hlsl
1 parent 0b16307 commit 83991b9

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

include/nbl/builtin/hlsl/tuple.hlsl

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright (C) 2025 - DevSH Graphics Programming Sp. z O.O.
2+
// This file is part of the "Nabla Engine".
3+
// For conditions of distribution and use, see copyright notice in nabla.h
4+
#ifndef _NBL_BUILTIN_HLSL_TUPLE_INCLUDED_
5+
#define _NBL_BUILTIN_HLSL_TUPLE_INCLUDED_
6+
7+
#include "nbl/builtin/hlsl/type_traits.hlsl"
8+
9+
namespace nbl
10+
{
11+
namespace hlsl
12+
{
13+
14+
template<typename T0, typename T1=void, typename T2=void> // TODO: in the future use BOOST_PP to make this
15+
struct tuple
16+
{
17+
T0 t0;
18+
T1 t1;
19+
T2 t2;
20+
};
21+
22+
template<uint32_t N, typename Tuple>
23+
struct tuple_element;
24+
25+
template<typename T0>
26+
struct tuple<T0,void,void>
27+
{
28+
T0 t0;
29+
};
30+
31+
template<typename T0, typename T1>
32+
struct tuple<T0,T1,void>
33+
{
34+
T0 t0;
35+
T1 t1;
36+
};
37+
// specializations for less and less void elements
38+
39+
// base case
40+
template<typename Head, typename T1, typename T2>
41+
struct tuple_element<0,tuple<Head,T1,T2> >
42+
{
43+
using type = Head;
44+
};
45+
46+
template<typename T0, typename Head, typename T2>
47+
struct tuple_element<1,tuple<T0,Head,T2> >
48+
{
49+
using type = Head;
50+
};
51+
52+
template<typename T0, typename T1, typename Head>
53+
struct tuple_element<2,tuple<T0,T1,Head> >
54+
{
55+
using type = Head;
56+
};
57+
58+
}
59+
}
60+
61+
#endif

0 commit comments

Comments
 (0)