*** date_parsing.hpp.orig Thu Aug 15 19:57:38 2002 --- date_parsing.hpp Thu Jul 31 20:31:12 2003 *************** *** 14,39 **** namespace date_time { //! Generic function to parse a delimited date (eg: 2002-02-10) template date_type parse_date(const std::string& s) { - typedef typename date_type::year_type year_type; - int pos = 0; - typename date_type::ymd_type ymd(year_type::min(),1,1); boost::tokenizer > tok(s); ! for(boost::tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){ ! int i = boost::lexical_cast(*beg); ! switch(pos) { ! case 0: ymd.year = i; break; ! case 1: ymd.month = i; break; ! case 2: ymd.day = i; break; ! }; ! pos++; ! } ! return date_type(ymd); } //! Generic function to parse undelimited date (eg: 20020201) --- 14,50 ---- namespace date_time { + namespace detail { + + //! Generic function to parse date + template + date_type + parse_date(const tokenizer& tok) + { + typedef typename date_type::year_type year_type; + typename date_type::ymd_type ymd(year_type::min(), 1, 1); + typedef typename tokenizer::const_iterator iterator; + iterator beg = tok.begin(), end = tok.end(); + if (beg == end) + return date_type(ymd); + ymd.year = boost::lexical_cast(*beg); + if (++beg == end) + return date_type(ymd); + ymd.month = boost::lexical_cast(*beg); + if (++beg == end) + return date_type(ymd); + ymd.day = boost::lexical_cast(*beg); + return date_type(ymd); + } + } // namespace detail //! Generic function to parse a delimited date (eg: 2002-02-10) template date_type parse_date(const std::string& s) { boost::tokenizer > tok(s); ! return detail::parse_date(tok); } //! Generic function to parse undelimited date (eg: 20020201) *************** *** 42,63 **** parse_undelimited_date(const std::string& s) { int offsets[] = {4,2,2}; - int pos = 0; - typedef typename date_type::year_type year_type; - typename date_type::ymd_type ymd(year_type::min(),1,1); boost::offset_separator osf(offsets, offsets+3); boost::tokenizer tok(s, osf); ! for(boost::tokenizer::iterator ti=tok.begin(); ti!=tok.end();++ti){ ! int i = boost::lexical_cast(*ti); ! // std::cout << i << std::endl; ! switch(pos) { ! case 0: ymd.year = i; break; ! case 1: ymd.month = i; break; ! case 2: ymd.day = i; break; ! }; ! pos++; ! } ! return date_type(ymd); } --- 53,61 ---- parse_undelimited_date(const std::string& s) { int offsets[] = {4,2,2}; boost::offset_separator osf(offsets, offsets+3); boost::tokenizer tok(s, osf); ! return detail::parse_date(tok); } *************** *** 65,86 **** date_type parse_date2(const std::string& s) { - //using namespace boost; - int pos = 0; - typedef typename date_type::year_type year_type; - typename date_type::ymd_type ymd(year_type::min(),1,1); boost::char_delimiters_separator delim("DT"); boost::tokenizer > tok(s); ! for(boost::tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){ ! int i = boost::lexical_cast(*beg); ! switch(pos) { ! case 0: ymd.year = i; break; ! case 1: ymd.month = i; break; ! case 2: ymd.day = i; break; ! }; ! pos++; ! } ! return date_type(ymd); } --- 63,71 ---- date_type parse_date2(const std::string& s) { boost::char_delimiters_separator delim("DT"); boost::tokenizer > tok(s); ! return detail::parse_date(tok); }