Jpp  18.0.0-rc.2
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JMultiSet.hh
Go to the documentation of this file.
1 #ifndef __JTOOLS__JMULTISET__
2 #define __JTOOLS__JMULTISET__
3 
5 #include "JTools/JSet.hh"
6 
7 
8 /**
9  * \author mdejong
10  */
11 
12 namespace JTOOLS {}
13 namespace JPP { using namespace JTOOLS; }
14 
15 namespace JTOOLS {
16 
17 
18  /**
19  * Simple data structure for an abstract multidimensional map of equidistant elements.
20  *
21  * This class implements the JAbstractMultiMap interface.
22  */
23  template<unsigned int N, class JAbscissa_t>
24  struct JMultiSet :
25  public virtual JAbstractMultiMap<N, JAbscissa_t>,
26  public JMultiSet<N - 1, JAbscissa_t>
27  {
28  typedef JAbscissa_t abscissa_type;
30 
32 
33 
34  /**
35  * Default constructor.
36  */
38  JMultiSet<N - 1, JAbscissa_t>()
39  {}
40 
41 
42  /**
43  * Constructor.
44  *
45  * \param bounds bounds
46  */
48  JMultiSet<N - 1, JAbscissa_t>(bounds)
49  {
50  this->bounds = bounds;
51  }
52 
53 
54  /**
55  * Set bounds.
56  *
57  * \param index index of dimension
58  * \param bounds bounds
59  * \return true if correctly set; else false
60  */
61  bool set(unsigned int index, const JSet<abscissa_type>& bounds)
62  {
63  if (index == N - 1) {
64 
65  this->bounds = bounds;
66 
67  } else if (index < N - 1) {
68 
69  return static_cast<JMultiSet<N - 1, abscissa_type>&>(*this).set(index, bounds);
70  }
71 
72  return false;
73  }
74 
75 
76  /**
77  * Get abscissa values as a function of given key.
78  *
79  * \param key key
80  * \return abscissa values
81  */
82  virtual const JSet<abscissa_type>& operator()(const key_type& key) const override
83  {
84  return bounds;
85  }
86 
87  protected:
89  };
90 
91 
92  /**
93  * Terminator class of recursive class JMultiSet.
94  * This class provides for dummy implementations of interface methods.
95  */
96  template<class JAbscissa_t>
97  struct JMultiSet<0, JAbscissa_t>
98  {
99  protected:
100 
101  typedef JAbscissa_t abscissa_type;
102 
103  friend class JMultiSet<1, JAbscissa_t>;
104 
105 
106  /**
107  * Default constructor.
108  */
110  {}
111 
112 
113  /**
114  * Constructor.
115  *
116  * \param bounds bounds
117  */
119  {}
120 
121 
122  /**
123  * This method does nothing.
124  *
125  * \param index index
126  * \param bounds bounds
127  * \return false
128  */
129  bool set(unsigned int index, const JSet<abscissa_type>& bounds) const
130  {
131  return false;
132  }
133 
134 
135  /**
136  * Dummy operator.
137  */
138  void operator()() const
139  {}
140  };
141 
142 
143  /**
144  * Helper method for JMultiSet.
145  *
146  * \param bounds bounds
147  * \return multidimensional set
148  */
149  template<unsigned int N, class JAbscissa_t>
151  {
152  return JMultiSet<N, JAbscissa_t>(bounds);
153  }
154 }
155 
156 #endif
JAbscissa_t abscissa_type
Definition: JMultiSet.hh:28
JSet< JAbscissa_t > bounds
Definition: JMultiSet.hh:88
bool set(unsigned int index, const JSet< abscissa_type > &bounds) const
This method does nothing.
Definition: JMultiSet.hh:129
void operator()() const
Dummy operator.
Definition: JMultiSet.hh:138
JMultiKey< N-1, abscissa_type > key_type
Definition: JMultiSet.hh:29
Abstract interface for abscissa values of a multidimensional map.
bool set(unsigned int index, const JSet< abscissa_type > &bounds)
Set bounds.
Definition: JMultiSet.hh:61
Multidimensional key.
Definition: JMultiKey.hh:34
virtual const JSet< abscissa_type > & operator()(const key_type &key) const override
Get abscissa values as a function of given key.
Definition: JMultiSet.hh:82
JMultiSet()
Default constructor.
Definition: JMultiSet.hh:109
JMultiSet< N, JAbscissa_t > make_multiset(const JSet< JAbscissa_t > &bounds)
Helper method for JMultiSet.
Definition: JMultiSet.hh:150
JMultiSet(const JSet< abscissa_type > &bounds)
Constructor.
Definition: JMultiSet.hh:47
then usage $script< input file >[option[primary[working directory]]] nWhere option can be N
Definition: JMuonPostfit.sh:36
Simple data structure for an abstract multidimensional map of equidistant elements.
Definition: JMultiSet.hh:24
JMultiSet()
Default constructor.
Definition: JMultiSet.hh:37
JMultiSet(const JSet< abscissa_type > &bounds)
Constructor.
Definition: JMultiSet.hh:118
Simple data structure for an abstract collection of non-equidistant abscissa values.
Definition: JSet.hh:29