Provided by: libbobcat-dev_6.07.01-2_amd64 

NAME
FBB::*Clock - classes wrapping std::chrono::*_clock facilities
SYNOPSIS
#include <bobcat/fileclock>
#include <bobcat/highresolutionclock>
#include <bobcat/steadyclock>
#include <bobcat/systemclock>
Each of these files also includes the std::chrono header file.
DESCRIPTION
The C++ std::chrono namespace defines clock-types and their operations. The bobcat *Clock classes define
wrappers around the four standard C++ clock-types offering interfaces which are easier to handle than the
standard std::chrono clocks.
o FileClock wraps std::chrono::file_clock;
o HighResolutionClock wraps std::chrono::high_resolution_clock;
o SteadyClock wraps std::chrono::steady_clock;
o SystemClock wraps std::chrono::system_clock, and is the commonly used clock type.
Member names of the bobcat clock-classes don’t use underscores. Names consisting of multiple words are
`camel-cased’ (like timePoint).
Note:
The type std::chrono::file_clock (and therefore FileClock) is available since the C++-2a standard:
specify the --std=c++2a (or more recent) compiler option when using FileClock.
NAMESPACE
FBB
All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the
namespace FBB.
INHERITS FROM
FBB::ClockTypes
FBB::ClockBase
FBB::HighSysClock
these are internally used only classes; their facilities are covered in this man-page.
TYPEDEFS AND ENUMS
o The std::chrono types nanoseconds, microseconds, milliseconds, seconds, minutes and hours are also
available in the namespace FBB;
Clock Types:
o FBB::FileClock provides the std::chrono::file_clock facilities;
o FBB::HighResolutionClock provides the std::chrono::high_resolution_clock facilities;
o FBB::SteadyClock provides the std::chrono::steady_clock facilities;
o FBB::SystemClock provides the std::chrono::system_clock facilities.
Sub-types:
o Duration: each clock type defines the type Duration as std::chrono::duration<int64_t, std::nano>;
o Period: the sub-type period of the Duration type. In practice its subtypes den (DenType) and num
(NumType) are used;
o DenType: the denominator type of the ratio type used by the clock type (see also the static member
den);
o NumType: the numerator type of the ratio type used by the clock type (see also the static member
num);
CONSTRUCTORS
The constructors are illustrated for SystemClock but are also available for the other clock types.
o SystemClock(SystemClock::TimePoint = SystemClock::now()):
each clock-constructor can be initialized with a time point. By default the clock’s time point is
initialized by the time point returned by the clock type’s static now member;
o SystemClock(Clock const &otherClock):
each clock type can be initialized with another clock type object (except for a SteadyClock type
object): when constructed they refer to the same points in time.
Copy and move constructors (and assignment operators) are available.
OVERLOADED OPERATORS
Using DurationType to represent std::chrono::duration<int64_t, Ratio>, where Ratio is a std::ratio type
(for clocks Ratio equals nano).
o ClockType &operator+=(DurationType const &amount):
adds amount to the current clock’s TimePoint. E.g.,
SystemClock sc;
sc += 1h;
o ClockType &operator+=(int secs);:
adds secs seconds to the current clock’s TimePoint;
o ClockType &operator-=(DurationType const &amount);:
subtracts amount from the current clock’s TimePoint. Not available for SteadyClock;
o ClockType &operator-=(int secs);:
subtracts secs seconds from the current clock’s TimePoint;
o SteadyClock &operator-=(SteadyClock const &rhs):
only available for class SteadyClock: rhs.elapsed() is subtracted from the current object’s
time-point. See also the functions since and countSince below.
o std::ostream &operator<<(std::ostream &out, ClockType const &clock):
not available for SteadyClock; clock’s (UTC) TimePoint is inserted into out. E.g.,
cout << SystemClock{}; // could insert
// 2025-01-04 08:25:10.035509381
o ClockType operator+(Type1 const &lhs, Type2 const &rhs):
not available for SteadyClock. Either Type1 or Type2 must be an FBB Clock type (like SystemClock).
The other type can either be an int (representing number of seconds) or a DurationType (like
seconds, hours). A clock object of the same type as the Clock argument is returned, whose
TimePoint is initialized to the sum of the argument’s TimePoint and the value of the other
argument;
o ClockType operator-(ClockType const &lhs, Type const &rhs):
both argument types can be SteadyClock. As SteadyClock objects are used for timing purposes this
operator returns a SteadyClock object whose time specification is equal to the difference of the
lhs and rhs time specifications (see also the functions since and countSince below).
Otherwise the lhs argument must be an FBB Clock type (like SystemClock), and Type can either be an
int (representing number of seconds) or a DurationType (like seconds, hours), returning a clock
object whose TimePoint is initialized to the difference of the lhs’s TimePoint and the rhs value;
FREE FUNCTIONS
o auto toClock<DestClock>(ClockType const &clock):
returns the DestClock::TimePoint corresponding to the TimePoint of clock. It is not available for
conversions from or to the SteadyClock type. E.g.,
FileClock fc;
cout << toClock<SystemClock>(fc) << ’\n’;
o double toDouble<Duration>(ClockType const &src):
returns the double value corresponding to ClockType’s std::chrono::duration converted to the
Duration std::chrono::duration. E.g.,
toDouble<hours>(90min); // returns 1.5
o Dest toDuration(Src const &src):
returns src’s Duration converted to the (at least as precise) Dest duration. E.g.,
toDuration<seconds>(1min).count(); // returns 60
ADDITIONAL STEADYCLOCK FREE FUNCTIONS
The SteadyClock type is primarily used for timing purposes. The following two functions are available for
SteadyClock objects:
o SteadyClock::Duration since(SteadyClock const &time0):
The difference in nanoseconds (Durations) of a local SteadyClock object and time0 is returned.
E.g.,
SteadyClock start;
// do something
cout << "Elapsed time: " << since(start) << ’\n’;
o size_t countSince(SteadyClock const &time0):
Same as the previous function, but the number of nanoseconds are returned as a size_t value.
MEMBER FUNCTIONS
All of the following members are available for each of bobcat’s clock types:
o long int count():
returns timePoint’s value. The clock types have members timePoint(): this member returns the
number of nano seconds as an integral value since the beginning of the clock’s era. E.g.,
FileClock{}.clock(); // returns, e.g.,
// -4701673791896351066
o static long int ClockTypes::count(TimePoint const &timePoint):
returns timePoint’s value. This function can also be used for SteadyClock objects. E.g.,
ClockTypes::count(SteadyClock::now()); // returns, e.g.,
// 8310904806233
o static DenType::den():
returns the denominator of the ratio used by the clocks (= 1’000’000’000);
o Duration elapsed() const:
returns the Duration value of the current Clock object (= number of nano-seconds since the
beginning of the clock’s era). E.g.,
SystemClock{}.elapsed(); // returns, e.g.,
// 1735989478991599467ns
o static Duration ClockTypes::elapsed(TimePoint const &timePoint):
returns timePoint’s Duration. Clock types have members timePoint() returning the clock’s time
point;
o static TimePoint max():
returns the TimePoint of the used clock type corresponding to the clock’s maximum (UTC) time.
E.g.,
cout << SystemClock::max(); // inserts:
// 2262-04-11 23:47:16...
o static TimePoint min():
returns the TimePoint of the used clock type corresponding to the clock’s minimum (UTC) time;
o static TimePoint now():
returns the TimePoint of the used clock type corresponding to the current (UTC) time. E.g.,
cout << SystemClock::now() << ’\n’;
o static NumType::num():
returns the numerator of the ratio used by the clocks (= 1);
o static Period period():
returns the clock’s Period (having members den and num);
o TimePoint const &timePoint() const:
returns the object’s TimePoint;
o double toDouble<Dest>() const:
returns the double value corresponding to the object’s std::chrono::duration converted to the Dest
std::chrono::duration. E.g.,
SystemClock{}.toDouble<hours>(); // returns, e.g., 482221
o static Duration zero():
returns the clock’s Duration representing 0 nanoseconds;
ADDITIONAL SYSTEM / HIGHRESOLUTION CLOCK MEMBERS
Primarily for displaying the clock’s time the SystemClock and HighResolutionClock classes support these
members:
o std::time_t timeT() const:
returns the object’s TimePoint converted to time_t (cf. time(3));
o Clock &setTime(std::time_t seconds):
returns the current object after resetting its TimePoint to its time_t argument;
o Clock const &operator()(char const *putTime, bool localTime = true) const:
prepares the current object for the next insertion operator, using the putTime specification to
configure the std::put_time manipulator (cf. C++ Annotations, section 6.4.4 (The `put_time’
manipulator)). By default the time is displayed using the local time. When the 2nd argument is
false the time is displayed in UTC. When the current object is inserted into a std::ostream after
calling this member the put_time manipulator is used only once. By calling this member again
put_time is repeatedly used. E.g.,
SystemClock sc;
cout << // inserts, e.g.,
sc("%Y") << ’\n’ << // 2025
sc("%y") << ’\n’ << // 25
sc << ’\n’; // 2025-01-04 14:18:47...
EXAMPLE
#include <iostream>
#include <string>
#include <thread>
#include <bobcat/fileclock>
#include <bobcat/highresolutionclock>
#include <bobcat/steadyclock>
#include <bobcat/systemclock>
using namespace std;
using namespace FBB;
int main()
{
SystemClock sysNow{ };
cout << "system clock at " << sysNow << "\n"
"elapsed: " << sysNow.elapsed() << "\n\n";
// same timespec, elapsed ns.
FileClock fileNow{ sysNow }; // is clock-specific
cout << "file clock at " << fileNow << "\n"
"elapsed: " << fileNow.elapsed() << "\n\n";
SystemClock sysNow2{ fileNow };
cout << "system clock at " << sysNow2 << "\n"
"elapsed: " << sysNow2.elapsed() << "\n\n";
cout << sysNow2("%Y %b %d, %H:%M:%S") << "\n"
"\n"
"minimum time: " << sysNow2.min() << "\n"
"maximum time: " << SystemClock::max() << "\n\n";
// conversion to less precise time specification:
cout << "100 minutes is " << toDouble<hours>(100min) << " hours\n\n";
HighResolutionClock hrc{ fileNow };
cout << "high resolution clock at " << hrc << "\n\n";
SteadyClock sc0; // computing ’since’ itself takes several
auto passed = since(sc0); // (variable) hundred nano seconds
cout << "sc0 since: " << passed << ’\n’;
SteadyClock sc;
this_thread::sleep_for(1s);
cout <<
"ELAPSED: " << since(sc) << ’\n’ <<
"(small delay...)\n"
"as count: " << countSince(sc) << "\n\n";
}
FILES
bobcat/fileclock, - the FileClock class interface
bobcat/highresulutionclock - the HighResolutionClock class interface
bobcat/steadyclock - the SteadyClock class interface
bobcat/systemclock - the SystemClock class interface
SEE ALSO
bobcat(7), time(3),
BUGS
None Reported.
BOBCAT PROJECT FILES
o https://fbb-git.gitlab.io/bobcat/: gitlab project page;
Debian Bobcat project files:
o libbobcat6: debian package containing the shared library, changelog and copyright note;
o libbobcat-dev: debian package containing the static library, headers, manual pages, and developer
info;
BOBCAT
Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.
COPYRIGHT
This is free software, distributed under the terms of the GNU General Public License (GPL).
AUTHOR
Frank B. Brokken (f.b.brokken@rug.nl).
libbobcat-dev_6.07.01 2005-2025 FBB::*Clock(3bobcat)