aimstil  5.0.5
is_traits.h
Go to the documentation of this file.
1 #ifndef TIL_ISTRAITS_H_
2 #define TIL_ISTRAITS_H_
3 
4 // includes from TIL
5 #include "til/ext_declarations.h"
6 #include "til/til_declarations.h"
7 
8 
9 namespace til {
10 
11 #define TIL_DECLARE_IS(typeM) TIL_DECLARE_IS_VALUE_TEMPLATE(typeM, 0, typename T)
12 #define TIL_DECLARE_IS_VALUE(typeM, valueM) TIL_DECLARE_IS_VALUE_TEMPLATE(typeM, valueM, typename T)
13 // The following macro does not rely on TIL_DECLARE_IS_VALUE_TEMPLATE because
14 // TIL_COMMA, sometimes used in the tplM argument, cannot be carried over: it is
15 // interpreted straight away, and then TIL_DECLARE_IS_VALUE_TEMPLATE receives more
16 // arguments than it should.
17 #define TIL_DECLARE_IS_TEMPLATE(typeM, tplM) \
18 template < tplM > \
19 struct is_##typeM \
20 { \
21  enum { value = 0 }; \
22 };
23 #define TIL_DECLARE_IS_VALUE_TEMPLATE(typeM, valM, tplM) \
24 template < tplM > \
25 struct is_##typeM \
26 { \
27  enum { value = valM }; \
28 };
29 
30 #define TIL_DECLARE_IS_SPEC(typeM, cnameM) TIL_DECLARE_IS_SPEC_T(typeM, , cnameM)
31 #define TIL_DECLARE_IS_SPEC_T(typeM, templateArgsM, cnameM) \
32 template < templateArgsM > \
33 struct is_##typeM < cnameM > \
34 { \
35  enum { value = 1 }; \
36 };
37 
38 #define TIL_COMMA ,
39 
41 
43 TIL_DECLARE_IS(3DPoint);
44 
45 //TIL_DECLARE_IS_SPEC_T(3DPoint, typename T TIL_COMMA typename TStorage, Point<T TIL_COMMA 3 TIL_COMMA TStorage>);
46 //TIL_DECLARE_IS_SPEC_T(3DPoint, typename T, AimsVector<T TIL_COMMA 3>);
48 
50 
52 // NB: by default, it takes the value of is_3DPoint, because a 3D Point
53 // is also a 3D vector. So things that were already specified for 3D Points
54 // do not need to be added again.
55 TIL_DECLARE_IS_VALUE(3DVector, is_3DPoint<T>::value);
56 //TIL_DECLARE_IS_SPEC_T(3DVector, typename T TIL_COMMA typename TStorage, Vector<T TIL_COMMA 3 TIL_COMMA TStorage>);
57 
58 
60 
62 TIL_DECLARE_IS_TEMPLATE(BoostArray_N, typename T TIL_COMMA std::size_t N);
63 TIL_DECLARE_IS_SPEC_T(BoostArray_N, typename T TIL_COMMA std::size_t N, boost::array<T TIL_COMMA N> TIL_COMMA N);
64 
66 
68 TIL_DECLARE_IS(mesh);
69 TIL_DECLARE_IS_SPEC_T(mesh, typename TParam, Mesh<TParam>);
70 //TIL_DECLARE_IS_SPEC_T(Mesh, class TMesh TIL_COMMA typename TParam, detail::AddNeighborIndexAttribute<TMesh TIL_COMMA TParam>);
71 
73 
75 TIL_DECLARE_IS(container);
76 TIL_DECLARE_IS_SPEC_T(container, typename T TIL_COMMA typename A, std::vector<T TIL_COMMA A>);
77 TIL_DECLARE_IS_SPEC_T(container, typename T TIL_COMMA typename A, std::list<T TIL_COMMA A>);
78 TIL_DECLARE_IS_SPEC_T(container, typename K TIL_COMMA typename P TIL_COMMA typename A, std::set<K TIL_COMMA P TIL_COMMA A>);
79 TIL_DECLARE_IS_SPEC_T(container, typename K TIL_COMMA typename T TIL_COMMA typename P TIL_COMMA typename A, std::map<K TIL_COMMA T TIL_COMMA P TIL_COMMA A>);
80 TIL_DECLARE_IS_SPEC_T(container, typename T TIL_COMMA typename BaselinePolicy, til::sparse_vector<T TIL_COMMA BaselinePolicy>);
81 
83 
85 TIL_DECLARE_IS(map);
86 TIL_DECLARE_IS_SPEC_T(map, typename TKey TIL_COMMA typename TValue TIL_COMMA typename TCompare TIL_COMMA typename TAlloc, std::map<TKey TIL_COMMA TValue TIL_COMMA TCompare TIL_COMMA TAlloc>);
87 TIL_DECLARE_IS_SPEC_T(map, typename TKey TIL_COMMA typename TValue TIL_COMMA typename TCompare TIL_COMMA typename TAlloc, std::multimap<TKey TIL_COMMA TValue TIL_COMMA TCompare TIL_COMMA TAlloc>);
88 
90 
91 TIL_DECLARE_IS(pointer)
92 TIL_DECLARE_IS_SPEC_T(pointer, typename T, T*);
93 TIL_DECLARE_IS_SPEC_T(pointer, typename T, boost::shared_ptr<T>);
94 
95 
96 // undef all local macros
97 #undef TIL_DECLARE_IS
98 #undef TIL_DECLARE_IS_VALUE
99 #undef TIL_DECLARE_IS_TEMPLATE
100 #undef TIL_DECLARE_IS_VALUE_TEMPLATE
101 // To allow others to use it
102 //#undef TIL_DECLARE_IS_SPEC_T
103 #undef TIL_DECLARE_IS_SPEC
104 #undef TIL_COMMA
105 
106 } // namespace til
107 
108 #endif //_ISTRAITS_H_
109 
TIL_DECLARE_IS_SPEC_T(3DPoint, typename T, boost::array< T TIL_COMMA 3 >)
Belongs to package Box Do not include directly, include til/Box.h instead.
Definition: Accumulator.h:10
TIL_DECLARE_IS(3DPoint)
True if type implements a 3D Point.
This file contains forward declarations of classes defined in the TIL library.
A class that mimic the behavior of std::vector but with a storage policy focused on sparse data...
TIL_DECLARE_IS_TEMPLATE(BoostArray_N, typename T TIL_COMMA std::size_t N)
True if type is boost::array of size N.
TIL_DECLARE_IS_VALUE(3DVector, is_3DPoint< T >::value)
True if type implements a 3D Vector.
#define TIL_COMMA
Definition: is_traits.h:38