00001 #ifndef __STDAIR_BAS_BASCOMPARSERHELPERTYPES_HPP
00002 #define __STDAIR_BAS_BASCOMPARSERHELPERTYPES_HPP
00003
00004
00005
00006
00007
00008 #include <string>
00009 #include <sstream>
00010
00011 #include <stdair/stdair_exceptions.hpp>
00012 #include <stdair/service/Logger.hpp>
00013
00014 namespace stdair {
00015
00016
00017
00018
00019
00020
00022 template <int MIN = 0, int MAX = 0>
00023 struct date_time_element {
00024 unsigned int _value;
00025
00026
00028 date_time_element () { }
00030 date_time_element (const date_time_element& t) : _value (t._value) { }
00032 date_time_element (int i) : _value (i) { }
00034 void check () const {
00035 if (_value < MIN || _value > MAX) {
00036 std::ostringstream oMessage;
00037 oMessage << "The value: " << _value << " is out of range ("
00038 << MIN << ", " << MAX << ")";
00039 throw stdair::ParserException (oMessage.str());
00040 }
00041 }
00042 };
00043
00045 template <int MIN, int MAX>
00046 inline date_time_element<MIN,
00047 MAX> operator*(const date_time_element<MIN, MAX>& o1,
00048 const date_time_element<MIN, MAX>& o2){
00049 return date_time_element<MIN, MAX> (o1._value * o2._value);
00050 }
00051
00053 template <int MIN, int MAX>
00054 inline date_time_element<MIN,
00055 MAX> operator+(const date_time_element<MIN, MAX>& o1,
00056 const date_time_element<MIN, MAX>& o2){
00057 return date_time_element<MIN, MAX> (o1._value + o2._value);
00058 }
00059
00061 typedef date_time_element<0, 23> hour_t;
00062 typedef date_time_element<0, 59> minute_t;
00063 typedef date_time_element<0, 59> second_t;
00064 typedef date_time_element<1900, 2100> year_t;
00065 typedef date_time_element<1, 12> month_t;
00066 typedef date_time_element<1, 31> day_t;
00067
00068 }
00069 #endif // __STDAIR_BAS_BASCOMPARSERHELPERTYPES_HPP