1#ifndef HAVE_TOM__SCALAR_V2_HPP
2#define HAVE_TOM__SCALAR_V2_HPP
4#include <tom-util/observation.hpp>
14 public boost::arithmetic< scalar<T>,
15 boost::arithmetic< scalar<T>, T,
16 boost::incrementable< scalar<T>,
17 boost::decrementable< scalar<T> > > >
36 template <
typename Tp>
53 template <
typename Tp>
56 scalar &operator=(
const T & );
59 bool is_normal()
const;
62 virtual std::ostream &print( std::ostream & )
const;
70 virtual bool operator<(
const observation & )
const;
71 virtual bool operator<=(
const observation & )
const;
72 virtual bool operator>(
const observation & )
const;
73 virtual bool operator>=(
const observation & )
const;
75 virtual bool operator==(
const observation & )
const;
76 virtual bool operator!=(
const observation & )
const;
77 virtual bool operator==(
const scalar & rhs )
const {
return this->value() == rhs.value(); }
78 virtual bool operator!=(
const scalar & rhs )
const {
return ! ( *
this == rhs ); }
81 virtual operator unsigned char()
const;
83 virtual operator short int()
const;
84 virtual operator int()
const;
85 virtual operator long int()
const;
86 virtual operator unsigned short int()
const;
87 virtual operator unsigned int()
const;
88 virtual operator unsigned long int()
const;
89 virtual operator float()
const;
90 virtual operator double()
const;
92 virtual operator bool()
const;
94 scalar & operator+=(
const T & );
97 scalar & operator-=(
const T & );
100 scalar & operator*=(
const T & );
103 scalar & operator/=(
const T & );
106 scalar &operator++(){ ++m_value;
return *
this; }
107 scalar &operator--(){ --m_value;
return *
this; }
109 static const scalar HAS_NO_DATA;
110 static const scalar HOLIDAY;
111 static const scalar NON_CALC;
114 value()
const {
return m_value.value_; }
123operator<<( std::ostream &os,
const scalar<T> & rhs );
137 template <
typename T>
142 return static_cast<T
>( v );
150scalar<T>::scalar( ){ }
153scalar<T>::scalar(
const T &t )
161scalar<T>::~scalar(){ }
166template <
typename Tp>
167scalar<T>::scalar(
const scalar<Tp> &rhs )
169 m_value = cast_observation_<T> ( rhs );
172scalar<T>::scalar(
const scalar &rhs )
174 m_value = rhs.m_value;
177scalar<T>::scalar(
const observation & rhs )
179 m_value = cast_observation_<T>( rhs );
184scalar<T>::clone()
const
186 return *
new scalar<T>( *
this );
194scalar<T>::operator=(
const observation & rhs )
196 m_value = cast_observation_<T>( rhs );
203template <
typename Tp>
205scalar<T>::operator=(
const scalar<Tp> & rhs )
207 m_value = cast_observation_<T>( rhs );
212scalar<T>::operator=(
const scalar & rhs )
214 m_value = rhs.m_value;
219scalar<T>::operator=(
const T &v )
234scalar<T>::is_normal()
const
236 return m_value.is_normal();
241scalar<T>::print( std::ostream & os )
const
243 return os << m_value;
248scalar<T>::flag()
const
250 return m_value.get_value_type();
255scalar<T>::operator+=(
const observation & rhs )
257 m_value += cast_observation_<T>( rhs );
262scalar<T>::operator+=(
const scalar & rhs )
264 m_value += rhs.m_value;
269scalar<T>::operator+=(
const T &rhs )
276scalar<T>::operator-=(
const observation & rhs )
278 m_value -= cast_observation_<T>( rhs );
283scalar<T>::operator-=(
const scalar & rhs )
285 m_value -= rhs.m_value;
290scalar<T>::operator-=(
const T & rhs )
297scalar<T>::operator*=(
const observation & rhs )
299 m_value *= cast_observation_<T>( rhs );
304scalar<T>::operator*=(
const scalar & rhs )
306 m_value *= rhs.m_value;
311scalar<T>::operator*=(
const T & rhs )
318scalar<T>::operator/=(
const observation & rhs )
320 m_value /= cast_observation_<T>( rhs );
325scalar<T>::operator/=(
const scalar & rhs )
327 m_value /= rhs.m_value;
332scalar<T>::operator/=(
const T & rhs )
341scalar<T>::operator<(
const observation & rhs )
const
343 scalar_type tmp = cast_observation_<T>( rhs );
344 return m_value < tmp;
348scalar<T>::operator<=(
const observation & rhs )
const
350 scalar_type tmp = cast_observation_<T>( rhs );
351 return m_value <= tmp;
355scalar<T>::operator>(
const observation & rhs )
const
357 scalar_type tmp = cast_observation_<T>( rhs );
358 return m_value > tmp;
362scalar<T>::operator>=(
const observation & rhs )
const
364 scalar_type tmp = cast_observation_<T>( rhs );
365 return m_value >= tmp;
370scalar<T>::operator==(
const observation & rhs )
const
372 scalar_type tmp = cast_observation_<T>( rhs );
373 return m_value == tmp;
377scalar<T>::operator!=(
const observation & rhs )
const
379 scalar_type tmp = cast_observation_<T>( rhs );
380 return m_value != tmp;
386scalar<T>::operator
unsigned char()
const
398scalar<T>::operator
short int()
const
404scalar<T>::operator int()
const
410scalar<T>::operator
long int()
const
416scalar<T>::operator
unsigned short int()
const
422scalar<T>::operator
unsigned int()
const
428scalar<T>::operator
unsigned long int()
const
434scalar<T>::operator float()
const
440scalar<T>::operator double()
const
446scalar<T>::operator bool()
const
449 if ( tmp.is_normal() )
457operator<<( std::ostream &os,
const scalar<T> & rhs )
459 return rhs.print(os);
473template<
typename T,
typename Tp>
475operator+(
const scalar<T> &a,
const scalar<Tp> &b )
477 scalar<T> result( a );
485#include <tom-util/string.hpp>
486#include <tom-util/dates.hpp>
Definition observation.hpp:13
Definition value_types.hpp:381
Definition value_types.hpp:96
Definition value_types.hpp:144
Definition value_types.hpp:324
Definition value_types.hpp:319
Definition value_types.hpp:329
Definition value_types.hpp:772