Jpp test-rotations-old-533-g2bdbdb559
the software that should make you happy
Loading...
Searching...
No Matches
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"
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 */
19namespace JMATH {}
20namespace JPP { using namespace JMATH; }
21
22namespace JMATH {
23
24 using JLANG::JClass;
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 */
40 value(getZero<T>())
41 {}
42
43
44 /**
45 * Constructor.
46 *
47 * \param value value
48 */
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
Base class for data structures with artithmetic capabilities.
Definition of zero value for any class.
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Template for generic class types.
Definition JClass.hh:80
JArgument< T >::argument_type argument_type
Definition JClass.hh:82
Template definition of auxiliary base class for comparison of data structures.
Auxiliary base class for aritmetic operations of derived class types.
Definition JMath.hh:347
Simple wrapper around template data type to ensure that zero is the default value.
JNumber(typename JClass< T >::argument_type value)
Constructor.
bool less(const JNumber &number) const
Less than.
JNumber()
Default constructor.
JNumber & sub(const JNumber &number)
Subtract number.
JNumber & mul(const double factor)
Scale number.
JNumber & negate()
Negate number.
friend std::ostream & operator<<(std::ostream &out, const JNumber &number)
Write number to output stream.
JNumber & add(const JNumber &number)
Add number.
friend std::ostream & operator>>(std::ostream &in, JNumber &number)
Read number from input stream.
JNumber & div(const double factor)
Scale number.