Jpp  16.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 
47  */
49  JMultiSet<N - 1, JAbscissa_t>(bounds)
50  {
51  this->bounds = bounds;
52  }
53 
54 
55  /**
56  * Set bounds.
57  *
58  * \param index index of dimension
59  * \param bounds bounds
60  * \return true if correctly set; else false
61  */
62  bool set(unsigned int index, const JSet<abscissa_type>& bounds)
63  {
64  if (index == N - 1) {
65 
66  this->bounds = bounds;
67 
68  } else if (index < N - 1) {
69 
70  return static_cast<JMultiSet<N - 1, abscissa_type>&>(*this).set(index, bounds);
71  }
72 
73  return false;
74  }
75 
76 
77  /**
78  * Get abscissa values as a function of given key.
79  *
80  * \param key key
81  * \return abscissa values
82  */
83  virtual const JSet<abscissa_type>& operator()(const key_type& key) const override
84  {
85  return bounds;
86  }
87 
88  protected:
90  };
91 
92 
93  /**
94  * Terminator class of recursive class JMultiSet.
95  * This class provides for dummy implementations of interface methods.
96  */
97  template<class JAbscissa_t>
98  struct JMultiSet<0, JAbscissa_t>
99  {
100  protected:
101 
102  typedef JAbscissa_t abscissa_type;
103 
104  friend class JMultiSet<1, JAbscissa_t>;
105 
106 
107  /**
108  * Default constructor.
109  */
111  {}
112 
113 
114  /**
115  * Constructor.
116  *
117  * \param bounds bounds
118  */
120  {}
121 
122 
123  /**
124  * This method does nothing.
125  *
126  * \param index index
127  * \param bounds bounds
128  * \return false
129  */
130  bool set(unsigned int index, const JSet<abscissa_type>& bounds) const
131  {
132  return false;
133  }
134 
135 
136  /**
137  * Dummy operator.
138  */
139  void operator()() const
140  {}
141  };
142 
143 
144  /**
145  * Helper method for JMultiSet.
146  *
147  * \param bounds bounds
148  * \return multidimensional set
149  */
150  template<unsigned int N, class JAbscissa_t>
152  {
153  return JMultiSet<N, JAbscissa_t>(bounds);
154  }
155 }
156 
157 #endif
JAbscissa_t abscissa_type
Definition: JMultiSet.hh:28
JSet< JAbscissa_t > bounds
Definition: JMultiSet.hh:89
bool set(unsigned int index, const JSet< abscissa_type > &bounds) const
This method does nothing.
Definition: JMultiSet.hh:130
void operator()() const
Dummy operator.
Definition: JMultiSet.hh:139
then JShowerPostfit f $INPUT_FILE o $OUTPUT_FILE N
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:62
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:83
JMultiSet()
Default constructor.
Definition: JMultiSet.hh:110
JMultiSet< N, JAbscissa_t > make_multiset(const JSet< JAbscissa_t > &bounds)
Helper method for JMultiSet.
Definition: JMultiSet.hh:151
JMultiSet(const JSet< abscissa_type > &bounds)
Constructor.
Definition: JMultiSet.hh:48
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:119
Simple data structure for an abstract collection of non-equidistant abscissa values.
Definition: JSet.hh:29