Jpp test-rotations-old
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.
Auxiliary classes and methods for mathematical operations.
Definition JEigen3D.hh:88
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.