Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-09-03 14:07:59


"Jeff Garland" <jeff_at_[hidden]> writes:

> On Tue, 02 Sep 2003 19:00:42 -0400, David Abrahams wrote
>> The "fractional seconds" concept is undocumented. My guess it's
>> something like:
>>
>> x.fractional_seconds() == x.ticks() % seconds(1).ticks()
>>
>> This needs to be nailed down.
>
> Yep the docs don't say enough on this.
>
> Basically, time durations are represented as a count at a compile-time
> specified resolution. That is, a count of 1 can represent a millisecond,
> nanosecond, femtosecond (just to pick one ;-), or whatever. So fractional
> seconds is a generic way of handling the sub-second remainder of these without
> having to provide every possible combination.

Uh-huh. So is my formula above correct or not?

> That is, the fractional seconds provides the count of 'whatever time
> units' that are left over after stripping away the duration greater
> than a second.

I don't think you really mean "greater than". I suggest that instead
of plain English you try to document a formal definition, like I did.

> To really use fractional_seconds you call the resolution traits by
> calling:
>
> time_duration::rep_type::res_adjust()

Where is *that* documented?

> This method provides you with the count of fractional seconds used
> by the time duration. This little program might illustrate
> things...
>
> //print_resolution.cpp
> #include "boost/date_time/posix_time/posix_time.hpp"
> #include <iostream>
>
> //Must match with time_resolutions enum in date_time/time_defs.h
> const char* const resolution_names[] = {"Second", "Deci", "Centi", "Milli",
> "Ten_Thousanth", "Micro", "Nano"};
>
>
> int
> main()
> {
> using namespace boost::posix_time;
>
> std::cout << "Resolution: "
> << resolution_names[time_duration::rep_type::resolution()]
> << " -- Ticks per second: "
> << time_duration::rep_type::res_adjust() << std::endl;
>
> }
>
> //output
> Resolution: Micro -- Ticks per second: 1000000

I'm sorry, that's really nasty. Why wouldn't I just do

    seconds(1).ticks()

??

>> Also, the assymetry of those nice Construction by Count factories
>> down to nanosec(x) with the accessors which only include units down
>> to seconds() but not millisec()...nanosec() is disturbing and
>> frankly inconvenient.
>
> Ok, but I'm interested in your use case as once I have a
> time_duration I don't normally care about a particular sub-second
> resolution.

OK, well I do. I'm porting some Java code which uses times in whole
milliseconds, and when a time gets written to disk I need to write the
number of milliseconds to maintain a compatible format.

> But now that I think about it would seems like it might
> be possible to provide the inverse interface...

Yeah, easy even.

>> BTW, why plural hours, minutes, seconds, but singular millisec,
>> microsec, nanosec?
>
> Yikes! They probably all should be plural. Problem is the abbreviated
> 'millisecs' doesn't sound right to me, so perhaps that's the reason....

Well, abbrevs just don't sound right. Bite the bullet and use the
full names, please!

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

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