5#ifndef HAVE_TOM__DATES_HPP
6#define HAVE_TOM__DATES_HPP
8#include <tom-util/calendar.hpp>
12using tom::calendars::greg_year;
13using tom::calendars::greg_month;
14using tom::calendars::greg_day;
16class TOM_UTIL_API date_interval_observation;
24 typedef unsigned int value_type;
32 Date( greg_year y, greg_month m, greg_day d );
63 operator=(
const Date & rhs );
70 operator=( value_type t ) { m_value = t;
return *
this; }
75 print( std::ostream &os )
const;
84 typedef Date::value_type value_type;
119 get_calendar()
const = 0;
124 operator unsigned long int()
const
127 return get_calendar()( m_value.value_ ).days();
129 return m_value.value_;
139 print( std::ostream &os )
const;
145 scalar_type tmp = cast_observation_<Date::value_type>( rhs );
146 if ( tmp.is_normal() )
149 return m_value == tmp;
155 return ! ( *
this == rhs );
160template <
typename CalendarT>
164 typedef date_interval_observation::value_type value_type;
168 typedef CalendarT calendar_type;
194 template <
typename CalendarTp>
212 template <
typename CalendarTp>
217 operator=(
const Date & );
224 operator=(
const value_type &rhs );
231 get_calendar()
const {
return calendar_type::Instance(); }
279template <
typename CalendarT>
290template <
typename CalendarT>
291date_interval_scalar<CalendarT>::date_interval_scalar(
const observation & rhs )
293 m_value = cast_observation_<typename date_interval_scalar<CalendarT>::value_type> ( rhs );
294 if ( this->is_normal() )
298template <
typename CalendarT>
299date_interval_scalar<CalendarT>::date_interval_scalar(
const date_interval_scalar &rhs )
301 m_value = rhs.value();
303template <
typename CalendarT>
304template <
typename CalendarTp>
305date_interval_scalar<CalendarT>::date_interval_scalar(
const date_interval_scalar<CalendarTp> &rhs )
307 if ( rhs.is_normal() )
309 m_value = get_calendar()( rhs.get_calendar() ( rhs.value() ) );
311 m_value = rhs.value();
314template <
typename CalendarT>
316date_interval_scalar<CalendarT> &
317date_interval_scalar<CalendarT>::operator=(
const date_interval_scalar & rhs )
319 m_value = rhs.value();
323template <
typename CalendarT>
324template <
typename CalendarTp>
326date_interval_scalar<CalendarT> &
327date_interval_scalar<CalendarT>::operator=(
const date_interval_scalar<CalendarTp> & rhs)
329 if ( rhs.is_normal() )
330 m_value = get_calendar()( rhs.get_calendar()( rhs.value() ) );
332 m_value = rhs.value();
336template <
typename CalendarT>
338date_interval_scalar<CalendarT> &
341 m_value = get_calendar()( rhs );
344template <
typename CalendarT>
346date_interval_observation &
347date_interval_scalar<CalendarT>::operator=(
const observation &rhs )
352 m_value = rhs.operator value_type();
358template <
typename CalendarT>
360date_interval_scalar<CalendarT> &
361date_interval_scalar<CalendarT>::operator=(
const value_type &rhs )
369 this->Date::operator=( rhs );
372template <
typename CalendarT>
374date_interval_scalar<CalendarT> &
377 this->Date::operator=( t );
380template <
typename CalendarT>
382date_interval_scalar<CalendarT> &
383date_interval_scalar<CalendarT>::operator=(
const Date & rhs )
385 if ( rhs.is_normal() )
388 m_value = rhs.value();
392template <
typename CalendarT>
393const date_interval_scalar<CalendarT>
394date_interval_scalar<CalendarT>::HAS_NO_DATA( tom::value_type::no_data() );
396template <
typename CalendarT>
397const date_interval_scalar<CalendarT>
398date_interval_scalar<CalendarT>::HOLIDAY( tom::value_type::holiday() );
400template <
typename CalendarT>
401const date_interval_scalar<CalendarT>
402date_interval_scalar<CalendarT>::NON_CALC( tom::value_type::non_calc() );
Definition calendar.hpp:120
Definition calendar.hpp:47
Definition calendar.hpp:147
Definition observation.hpp:13
Definition value_types.hpp:381
Definition value_types.hpp:144
Definition value_types.hpp:324
Definition value_types.hpp:319
Definition value_types.hpp:329