Boost logo

Boost :

From: Jeff Garland (jeff_at_[hidden])
Date: 2006-03-26 15:22:52


On Sun, 26 Mar 2006 19:19:44 +0000 (UTC), george wrote
> hello!
>
> boost::gregorian::days size(1);
>
> boost::gregorian::date_period tmp(period.begin()+=size,period.end()
> -=size);
>
> period=tmp;
>
> is there any better way to increment/decrement the period object
>
> I want
> period.begin+=size;
> period.end()-=size
>
> to be permanent to period but it doesn't,it returns an object...
>
> any idea??

No there isn't an easy way to do this in the current release. However, I've
checked in a new function to boost/date_time/period.hpp called 'expand' which
provides this capability.

So you can now say:

date_period dp(.....);
dp.expand(days(2));

Of course, due to the wonders of generic programming this will now work for
time periods too :-)

time_period tp(.....);
tp.expand(minutes(10));

You can easily patch it in yourself or download a new period.hpp from cvs.
Basically in the period.hpp file add this:

  template<class point_rep, class duration_rep>
  class period : private
  //....
    void expand(const duration_rep& d);
  //...

Then later in the file

  /** Expands the size of the period by the duration on both ends.
   *
   *So before expand
   *@code
   *
   * [-------]
   * ^ ^ ^ ^ ^ ^ ^
   * 1 2 3 4 5 6 7
   *
   *@endcode
   * After expand(2)
   *@code
   *
   * [----------------------]
   * ^ ^ ^ ^ ^ ^ ^
   * 1 2 3 4 5 6 7
   *
   *@endcode
   */
  template<class point_rep, class duration_rep>
  inline
  void period<point_rep,duration_rep>::expand(const duration_rep& d)
  {
    begin_ = begin_ - d;
    last_ = last_ + d;
  }

Jeff


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk