source: Sophya/trunk/SophyaExt/Blitz/blitz/array/multi.h@ 3572

Last change on this file since 3572 was 221, checked in by ansari, 26 years ago

Creation module DPC/Blitz (blitz 0.4) Reza 09/04/99

File size: 1.5 KB
Line 
1// Support for multicomponent arrays
2
3#ifndef BZ_ARRAYMULTI_H
4#define BZ_ARRAYMULTI_H
5
6#ifndef BZ_ARRAY_H
7 #error <blitz/array/multi.h> must be included via <blitz/array.h>
8#endif
9
10BZ_NAMESPACE(blitz)
11
12/*
13 * The multicomponent_traits class provides a mapping from multicomponent
14 * tuples to the element type they contain. For example:
15 *
16 * multicomponent_traits<complex<float> >::T_numtype is float,
17 * multicomponent_traits<TinyVector<int,3> >::T_numtype is int.
18 *
19 * This is used to support Array<T,N>::operator[], which extracts components
20 * from a multicomponent array.
21 */
22
23// By default, produce a harmless component type, and zero components.
24template<class T_component>
25struct multicomponent_traits {
26 typedef T_component T_element;
27 enum { numComponents = 0 };
28};
29
30// TinyVector
31template<class T_numtype, int N_rank>
32struct multicomponent_traits<TinyVector<T_numtype,N_rank> > {
33 typedef T_numtype T_element;
34 enum { numComponents = N_rank };
35};
36
37// complex<T>
38template<class T>
39struct multicomponent_traits<complex<T> > {
40 typedef T T_element;
41 enum { numComponents = 2 };
42};
43
44// This macro is provided so that users can register their own
45// multicomponent types.
46
47#define BZ_DECLARE_MULTICOMPONENT_TYPE(T_tuple,T,N) \
48 template<> \
49 struct multicomponent_traits<T_tuple > { \
50 typedef T T_element; \
51 enum { numComponents = N }; \
52 };
53
54BZ_NAMESPACE_END
55
56#endif // BZ_ARRAYMULTI_H
Note: See TracBrowser for help on using the repository browser.