Jpp  19.1.0
the software that should make you happy
JMapList.hh
Go to the documentation of this file.
1 #ifndef __JTOOLS__JMAPLIST__
2 #define __JTOOLS__JMAPLIST__
3 
4 #include "JLang/JNullType.hh"
5 #include "JTools/JDistance.hh"
6 
7 
8 /**
9  * \author mdejong
10  */
11 
12 namespace JTOOLS {}
13 namespace JPP { using namespace JTOOLS; }
14 
15 namespace JTOOLS {
16 
17  using JLANG::JNullType;
18 
19 
20  /**
21  * Map list.
22  */
23  template<template<class, class, class> class JHead_t, class JTail_t = JNullType>
24  struct JMapList
25  {
27  typedef typename JTail_t::tail_type tail_type; //!< last map
28  };
29 
30 
31  /**
32  * Terminator class of map list.
33  */
34  template<template<class, class, class> class JHead_t>
35  struct JMapList<JHead_t, JNullType>
36  {
37  typedef JNullType head_list; //!< first N-1 maps
38  typedef JMapList<JHead_t> tail_type; //!< last map
39  };
40 
41 
42  /**
43  * Length of map list.
44  */
45  template<class JMaplist_t> struct JMapLength {};
46 
47 
48  /**
49  * Recursive length of map list.
50  */
51  template<template<class, class, class> class JHead_t, class JTail_t>
52  struct JMapLength< JMapList<JHead_t, JTail_t> >
53  {
54  enum { value = 1 + JMapLength<JTail_t>::value };
55  };
56 
57 
58  /**
59  * Terminator class of length of map list.
60  */
61  template<template<class, class, class> class JHead_t>
62  struct JMapLength< JMapList<JHead_t, JNullType> >
63  {
64  enum { value = 1 };
65  };
66 
67 
68  /**
69  * Auxiliary class for no map definition.
70  * This class can be used to terminate a map list, define a default template argument, etc.
71  */
72  template<class JKey_t,
73  class JValue_t,
74  class JDistance_t = JDistance<JKey_t> >
75  struct JNullMap {};
76 
77 
78  /**
79  * Auxiliary class for recursive map list generation.
80  * This class accepts up to 26 map types.
81  */
82  template<template<class, class, class> class A = JNullMap,
83  template<class, class, class> class B = JNullMap,
84  template<class, class, class> class C = JNullMap,
85  template<class, class, class> class D = JNullMap,
86  template<class, class, class> class E = JNullMap,
87  template<class, class, class> class F = JNullMap,
88  template<class, class, class> class G = JNullMap,
89  template<class, class, class> class H = JNullMap,
90  template<class, class, class> class I = JNullMap,
91  template<class, class, class> class J = JNullMap,
92  template<class, class, class> class K = JNullMap,
93  template<class, class, class> class L = JNullMap,
94  template<class, class, class> class M = JNullMap,
95  template<class, class, class> class N = JNullMap,
96  template<class, class, class> class O = JNullMap,
97  template<class, class, class> class P = JNullMap,
98  template<class, class, class> class Q = JNullMap,
99  template<class, class, class> class R = JNullMap,
100  template<class, class, class> class S = JNullMap,
101  template<class, class, class> class T = JNullMap,
102  template<class, class, class> class U = JNullMap,
103  template<class, class, class> class V = JNullMap,
104  template<class, class, class> class W = JNullMap,
105  template<class, class, class> class X = JNullMap,
106  template<class, class, class> class Y = JNullMap,
107  template<class, class, class> class Z = JNullMap>
108  struct JMAPLIST
109  {
111  };
112 
113 
114  /**
115  * Template specialisation to terminate recursive map list generation.
116  */
117  template<template<class, class, class> class A>
118  struct JMAPLIST<A,
119  JNullMap,
120  JNullMap,
121  JNullMap,
122  JNullMap,
123  JNullMap,
124  JNullMap,
125  JNullMap,
126  JNullMap,
127  JNullMap,
128  JNullMap,
129  JNullMap,
130  JNullMap,
131  JNullMap,
132  JNullMap,
133  JNullMap,
134  JNullMap,
135  JNullMap,
136  JNullMap,
137  JNullMap,
138  JNullMap,
139  JNullMap,
140  JNullMap,
141  JNullMap,
142  JNullMap,
143  JNullMap>
144  {
145  typedef JMapList<A> maplist; //!< Map list
146  };
147 }
148 
149 #endif
static const uint32_t K[64]
Definition: crypt.cc:77
static const double H
Planck constant [eV s].
static const double C
Physics constants.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Auxiliary classes and methods for multi-dimensional interpolations and histograms.
Auxiliary class for no type definition.
Definition: JNullType.hh:19
Auxiliary class for recursive map list generation.
Definition: JMapList.hh:109
JMapList< A, typename JMAPLIST< B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z >::maplist > maplist
Map list.
Definition: JMapList.hh:110
Length of map list.
Definition: JMapList.hh:45
JNullType head_list
first N-1 maps
Definition: JMapList.hh:37
JMapList< JHead_t > tail_type
last map
Definition: JMapList.hh:38
Map list.
Definition: JMapList.hh:25
JTail_t::tail_type tail_type
last map
Definition: JMapList.hh:27
JMapList< JHead_t, typename JTail_t::head_list > head_list
first N-1 maps
Definition: JMapList.hh:26
Auxiliary class for no map definition.
Definition: JMapList.hh:75