Boost logo

Boost Users :

From: Jeff Garland (jeff_at_[hidden])
Date: 2002-11-29 06:54:34


Hi Luc -

> I was wondering, while looking at the source files, why the
> date_iterator doesn't provide an operator--() ???

A couple reasons.
1) I wasn't sure it would be needed, so to keep things simple I
   left it out.
2) See below...

> I've added this in the "date_iterator.hpp" file :
>
> //---------------------------------------------------------
> date_itr_base& operator--()
> {
> current_ = current_ - get_offset(current_);
> return *this;
> }
> //---------------------------------------------------------
>
> I've rebuilt the library and done this little test :
>
> //---------------------------------------------------------
> #include <iostream>
> #include <boost/date_time/gregorian/gregorian.hpp>
>
> int main(void)
> {
> using namespace boost::gregorian;
>
> date today = day_clock::local_day();
> day_iterator ditr(today, 1);
> int nbDaysToIterate = 360;
>
> for (;nbDaysToIterate != 0; --ditr, --nbDaysToIterate)
> {
> std::cout << to_iso_extended_string(*ditr) << std::endl;
> }
> }
> //---------------------------------------------------------
>
> Everything seems to run OK. I've checked the february month and it has a
> 28th... Now I wonder why wasn't it included in the release ???

It's true that this works fine for the day_iterator. If you try the
same test with the month and year iterators, they will fail. The reason
being that the functors that calculate 'add a month' and 'add a year'
are written assuming a forward iterator. That's not to say that they
couldn't be modified to support bi-directional iteration, just that
it is a tad harder in these cases.

Jeff


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net