Code

Filters. Custom predefined filters update and new ABC filters.
[inkscape.git] / src / util / tuple.h
1 /*
2  * Inkscape::Util::Tuple - generic tuple type
3  *
4  * Authors:
5  *   MenTaLguY <mental@rydia.net>
6  *
7  * Copyright (C) 2004 MenTaLguY
8  *
9  * Released under GNU GPL, read the file 'COPYING' for more information
10  */
12 #ifndef SEEN_INKSCAPE_UTIL_TUPLE_H
13 #define SEEN_INKSCAPE_UTIL_TUPLE_H
15 #include "util/reference.h"
17 namespace Inkscape {
19 namespace Util {
21 template <typename A=void, typename B=void, typename C=void,
22           typename D=void, typename E=void, typename F=void>
23 struct Tuple {
24     Tuple() {}
25     Tuple(typename Traits::Reference<A>::RValue a_,
26           typename Traits::Reference<B>::RValue b_,
27           typename Traits::Reference<C>::RValue c_,
28           typename Traits::Reference<D>::RValue d_,
29           typename Traits::Reference<E>::RValue e_,
30           typename Traits::Reference<F>::RValue f_)
31     : a(a_), b(b_), c(c_), d(d_), e(e_), f(f_) {}
33     A a;
34     B b;
35     C c;
36     D d;
37     E e;
38     F f;
39 };
41 template <typename A, typename B, typename C,
42           typename D, typename E>
43 struct Tuple<A, B, C, D, E, void> {
44     Tuple() {}
45     Tuple(typename Traits::Reference<A>::RValue a_,
46           typename Traits::Reference<B>::RValue b_,
47           typename Traits::Reference<C>::RValue c_,
48           typename Traits::Reference<D>::RValue d_,
49           typename Traits::Reference<E>::RValue e_)
50     : a(a_), b(b_), c(c_), d(d_), e(e_) {}
52     A a;
53     B b;
54     C c;
55     D d;
56     E e;
57 };
59 template <typename A, typename B, typename C, typename D>
60 struct Tuple<A, B, C, D, void, void> {
61     Tuple() {}
62     Tuple(typename Traits::Reference<A>::RValue a_,
63           typename Traits::Reference<B>::RValue b_,
64           typename Traits::Reference<C>::RValue c_,
65           typename Traits::Reference<D>::RValue d_)
66     : a(a_), b(b_), c(c_), d(d_) {}
68     A a;
69     B b;
70     C c;
71     D d;
72 };
74 template <typename A, typename B, typename C>
75 struct Tuple<A, B, C, void, void, void> {
76     Tuple() {}
77     Tuple(typename Traits::Reference<A>::RValue a_,
78           typename Traits::Reference<B>::RValue b_,
79           typename Traits::Reference<C>::RValue c_)
80     : a(a_), b(b_), c(c_) {}
82     A a;
83     B b;
84     C c;
85 };
87 template <typename A, typename B>
88 struct Tuple<A, B, void, void, void, void> {
89     Tuple() {}
90     Tuple(typename Traits::Reference<A>::RValue a_,
91           typename Traits::Reference<B>::RValue b_)
92     : a(a_), b(b_) {}
94     A a;
95     B b;
96 };
98 template <typename A>
99 struct Tuple<A, void, void, void, void, void> {
100     Tuple() {}
101     Tuple(typename Traits::Reference<A>::RValue a_)
102     : a(a_) {}
104     A a;
105 };
107 template <> struct Tuple<void, void, void, void, void, void> {};
109 template <typename A, typename B, typename C,
110           typename D, typename E, typename F>
111 inline Tuple<A, B, C, D, E, F>
112 tuple(typename Traits::Reference<A>::RValue a,
113       typename Traits::Reference<B>::RValue b,
114       typename Traits::Reference<C>::RValue c,
115       typename Traits::Reference<D>::RValue d,
116       typename Traits::Reference<E>::RValue e,
117       typename Traits::Reference<F>::RValue f)
119     return Tuple<A, B, C, D, E, F>(a, b, c, d, e, f);
122 template <typename A, typename B, typename C, typename D, typename E>
123 inline Tuple<A, B, C, D, E>
124 tuple(typename Traits::Reference<A>::RValue a,
125       typename Traits::Reference<B>::RValue b,
126       typename Traits::Reference<C>::RValue c,
127       typename Traits::Reference<D>::RValue d,
128       typename Traits::Reference<E>::RValue e)
130     return Tuple<A, B, C, D, E>(a, b, c, d, e);
133 template <typename A, typename B, typename C, typename D>
134 inline Tuple<A, B, C, D>
135 tuple(typename Traits::Reference<A>::RValue a,
136       typename Traits::Reference<B>::RValue b,
137       typename Traits::Reference<C>::RValue c,
138       typename Traits::Reference<D>::RValue d)
140     return Tuple<A, B, C, D>(a, b, c, d);
143 template <typename A, typename B, typename C>
144 inline Tuple<A, B, C>
145 tuple(typename Traits::Reference<A>::RValue a,
146       typename Traits::Reference<B>::RValue b,
147       typename Traits::Reference<C>::RValue c)
149     return Tuple<A, B, C>(a, b, c);
152 template <typename A, typename B>
153 inline Tuple<A, B>
154 tuple(typename Traits::Reference<A>::RValue a,
155       typename Traits::Reference<B>::RValue b)
157     return Tuple<A, B>(a, b);
160 template <typename A>
161 inline Tuple<A>
162 tuple(typename Traits::Reference<A>::RValue a) {
163     return Tuple<A>(a);
166 inline Tuple<> tuple() { return Tuple<>(); }
172 #endif
173 /*
174   Local Variables:
175   mode:c++
176   c-file-style:"stroustrup"
177   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
178   indent-tabs-mode:nil
179   fill-column:99
180   End:
181 */
182 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :