On Tue, 19 Aug 2003 13:25:37 +1000, Chris Trengove wrote
> I have some concerns about the implementation of the "period" 
> concept, as given in period.hpp. First of all, the documentation 
> (for, say, date_period) talks of the constructor
> 
> date_period(date begin,date last)
> 
> as creating a period as [begin,last). But really what is meant here 
> is that the "last" parameter is actually going to become the "end" 
> of the period. This is clear from the implementation in period.hpp,
>  which is
> 
> template<class point_rep, class duration_rep>
>   inline
>   period<point_rep,duration_rep>::period(point_rep begin, point_rep 
> end) 

Yes, the function defintion is misleading.  In the function implementation
(shown above) it is clear that this is the end.

> I think there are two errors in the implementation of the period 
> class, perhaps caused by this confusion between "last" and "end".
> 
> 1) is_null() is implemented as
> 
>     return last_ <= begin;
> 
> which means that a period of length 1 is judged as being "null". The 
> correct implementation should be
> 
>     return end() <= begin;
> or
>     return last < begin;

Yep. Fixed in CVS.
 
> 2) operator<() is implemented as
> 
>     return (last_ <= rhs.begin_);
> 
> and this should be
> 
>     return (end() <= rhs.begin_);
> or
>     return (last_ < rhs.begin_);


Yep. Fixed in CVS.

> Also, I think that the implementation would be simpler and more 
> efficient if _end was chosen as the data member, rather than _last. 
>
>  ... detail omitted...

Probably true, I'll put this on the todo list to look at.

Thanks for the detailed comments.

Jeff
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to