Jpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JMath/JNumber.hh
Go to the documentation of this file.
1 #ifndef __JMATH__JNUMBER__
2 #define __JMATH__JNUMBER__
3 
4 #include <istream>
5 #include <ostream>
6 
7 #include "JLang/JClass.hh"
8 #include "JLang/JComparable.hh"
9 #include "JMath/JZero.hh"
10 #include "JMath/JMath.hh"
11 
12 
13 /**
14  * \file
15  *
16  * Definition of number value for any class.
17  * \author mdejong
18  */
19 namespace JMATH {}
20 namespace JPP { using namespace JMATH; }
21 
22 namespace JMATH {
23 
24  using JLANG::JClass;
25  using JLANG::JComparable;
26 
27 
28  /**
29  * Simple wrapper around template data type to ensure that zero is the default value.
30  */
31  template<class T>
32  struct JNumber :
33  public JMath < JNumber<T> >,
34  public JComparable< JNumber<T> >
35  {
36  /**
37  * Default constructor.
38  */
39  JNumber() :
40  value(getZero<T>())
41  {}
42 
43 
44  /**
45  * Constructor.
46  *
47  * \param value value
48  */
50  value(value)
51  {}
52 
53 
54  /**
55  * Type conversion.
56  *
57  * \return value
58  */
59  inline operator const T&() const
60  {
61  return value;
62  }
63 
64 
65  /**
66  * Type conversion.
67  *
68  * \return value
69  */
70  inline operator T&()
71  {
72  return value;
73  }
74 
75 
76  /**
77  * Negate number.
78  *
79  * \return this number
80  */
82  {
83  value = -value;
84 
85  return *this;
86  }
87 
88 
89  /**
90  * Add number.
91  *
92  * \param number number
93  * \return this number
94  */
95  JNumber& add(const JNumber& number)
96  {
97  value += number.value;
98 
99  return *this;
100  }
101 
102 
103  /**
104  * Subtract number.
105  *
106  * \param number number
107  * \return this number
108  */
109  JNumber& sub(const JNumber& number)
110  {
111  value -= number.value;
112 
113  return *this;
114  }
115 
116 
117  /**
118  * Scale number.
119  *
120  * \param factor multiplication factor
121  * \return this number
122  */
123  JNumber& mul(const double factor)
124  {
125  value *= factor;
126 
127  return *this;
128  }
129 
130 
131  /**
132  * Scale number.
133  *
134  * \param factor division factor
135  * \return this number
136  */
137  JNumber& div(const double factor)
138  {
139  value /= factor;
140 
141  return *this;
142  }
143 
144 
145  /**
146  * Less than.
147  *
148  * \param number number
149  * \return true if number is less than given number; else false
150  */
151  bool less(const JNumber& number) const
152  {
153  return value < number.value;
154  }
155 
156 
157  /**
158  * Read number from input stream.
159  *
160  * \param in input stream
161  * \param number number
162  * \return input stream
163  */
164  friend inline std::ostream& operator>>(std::ostream& in, JNumber& number)
165  {
166  return in >> number.value;
167  }
168 
169 
170  /**
171  * Write number to output stream.
172  *
173  * \param out output stream
174  * \param number number
175  * \return output stream
176  */
177  friend inline std::ostream& operator<<(std::ostream& out, const JNumber& number)
178  {
179  return out << number.value;
180  }
181 
182 
184  };
185 }
186 
187 #endif
JNumber & add(const JNumber &number)
Add number.
Auxiliary base class for aritmetic operations of derived class types.
Definition: JMath.hh:26
JNumber & negate()
Negate number.
Simple wrapper around template data type to ensure that zero is the default value.
friend std::ostream & operator<<(std::ostream &out, const JNumber &number)
Write number to output stream.
JNumber()
Default constructor.
esac print_variable DETECTOR INPUT_FILE OUTPUT_FILE CDF for TYPE in
Definition: JSirene.sh:45
Definition of zero value for any class.
JNumber & mul(const double factor)
Scale number.
T getZero()
Get zero value for a given data type.
Definition: JZero.hh:26
JArgument< T >::argument_type argument_type
Definition: JClass.hh:82
do set_variable OUTPUT_DIRECTORY $WORKDIR T
Template definition of auxiliary base class for comparison of data structures.
Definition: JComparable.hh:24
JNumber & sub(const JNumber &number)
Subtract number.
Template for generic class types.
Definition: JClass.hh:80
JNumber(typename JClass< T >::argument_type value)
Constructor.
Base class for data structures with artithmetic capabilities.
friend std::ostream & operator>>(std::ostream &in, JNumber &number)
Read number from input stream.
bool less(const JNumber &number) const
Less than.
JNumber & div(const double factor)
Scale number.