v1
This commit is contained in:
129
Thirdparty/DBoW2/DUtils/Random.cpp
vendored
Normal file
129
Thirdparty/DBoW2/DUtils/Random.cpp
vendored
Normal file
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* File: Random.cpp
|
||||
* Project: DUtils library
|
||||
* Author: Dorian Galvez-Lopez
|
||||
* Date: April 2010
|
||||
* Description: manages pseudo-random numbers
|
||||
* License: see the LICENSE.txt file
|
||||
*
|
||||
*/
|
||||
|
||||
#include "Random.h"
|
||||
#include "Timestamp.h"
|
||||
#include <cstdlib>
|
||||
using namespace std;
|
||||
|
||||
bool DUtils::Random::m_already_seeded = false;
|
||||
|
||||
void DUtils::Random::SeedRand(){
|
||||
Timestamp time;
|
||||
time.setToCurrentTime();
|
||||
srand((unsigned)time.getFloatTime());
|
||||
}
|
||||
|
||||
void DUtils::Random::SeedRandOnce()
|
||||
{
|
||||
if(!m_already_seeded)
|
||||
{
|
||||
DUtils::Random::SeedRand();
|
||||
m_already_seeded = true;
|
||||
}
|
||||
}
|
||||
|
||||
void DUtils::Random::SeedRand(int seed)
|
||||
{
|
||||
srand(seed);
|
||||
}
|
||||
|
||||
void DUtils::Random::SeedRandOnce(int seed)
|
||||
{
|
||||
if(!m_already_seeded)
|
||||
{
|
||||
DUtils::Random::SeedRand(seed);
|
||||
m_already_seeded = true;
|
||||
}
|
||||
}
|
||||
|
||||
int DUtils::Random::RandomInt(int min, int max){
|
||||
int d = max - min + 1;
|
||||
return int(((double)rand()/((double)RAND_MAX + 1.0)) * d) + min;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
DUtils::Random::UnrepeatedRandomizer::UnrepeatedRandomizer(int min, int max)
|
||||
{
|
||||
if(min <= max)
|
||||
{
|
||||
m_min = min;
|
||||
m_max = max;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_min = max;
|
||||
m_max = min;
|
||||
}
|
||||
|
||||
createValues();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
DUtils::Random::UnrepeatedRandomizer::UnrepeatedRandomizer
|
||||
(const DUtils::Random::UnrepeatedRandomizer& rnd)
|
||||
{
|
||||
*this = rnd;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
int DUtils::Random::UnrepeatedRandomizer::get()
|
||||
{
|
||||
if(empty()) createValues();
|
||||
|
||||
DUtils::Random::SeedRandOnce();
|
||||
|
||||
int k = DUtils::Random::RandomInt(0, m_values.size()-1);
|
||||
int ret = m_values[k];
|
||||
m_values[k] = m_values.back();
|
||||
m_values.pop_back();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void DUtils::Random::UnrepeatedRandomizer::createValues()
|
||||
{
|
||||
int n = m_max - m_min + 1;
|
||||
|
||||
m_values.resize(n);
|
||||
for(int i = 0; i < n; ++i) m_values[i] = m_min + i;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void DUtils::Random::UnrepeatedRandomizer::reset()
|
||||
{
|
||||
if((int)m_values.size() != m_max - m_min + 1) createValues();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
DUtils::Random::UnrepeatedRandomizer&
|
||||
DUtils::Random::UnrepeatedRandomizer::operator=
|
||||
(const DUtils::Random::UnrepeatedRandomizer& rnd)
|
||||
{
|
||||
if(this != &rnd)
|
||||
{
|
||||
this->m_min = rnd.m_min;
|
||||
this->m_max = rnd.m_max;
|
||||
this->m_values = rnd.m_values;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
184
Thirdparty/DBoW2/DUtils/Random.h
vendored
Normal file
184
Thirdparty/DBoW2/DUtils/Random.h
vendored
Normal file
@@ -0,0 +1,184 @@
|
||||
/*
|
||||
* File: Random.h
|
||||
* Project: DUtils library
|
||||
* Author: Dorian Galvez-Lopez
|
||||
* Date: April 2010, November 2011
|
||||
* Description: manages pseudo-random numbers
|
||||
* License: see the LICENSE.txt file
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef __D_RANDOM__
|
||||
#define __D_RANDOM__
|
||||
|
||||
#include <cstdlib>
|
||||
#include <vector>
|
||||
|
||||
namespace DUtils {
|
||||
|
||||
/// Functions to generate pseudo-random numbers
|
||||
class Random
|
||||
{
|
||||
public:
|
||||
class UnrepeatedRandomizer;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Sets the random number seed to the current time
|
||||
*/
|
||||
static void SeedRand();
|
||||
|
||||
/**
|
||||
* Sets the random number seed to the current time only the first
|
||||
* time this function is called
|
||||
*/
|
||||
static void SeedRandOnce();
|
||||
|
||||
/**
|
||||
* Sets the given random number seed
|
||||
* @param seed
|
||||
*/
|
||||
static void SeedRand(int seed);
|
||||
|
||||
/**
|
||||
* Sets the given random number seed only the first time this function
|
||||
* is called
|
||||
* @param seed
|
||||
*/
|
||||
static void SeedRandOnce(int seed);
|
||||
|
||||
/**
|
||||
* Returns a random number in the range [0..1]
|
||||
* @return random T number in [0..1]
|
||||
*/
|
||||
template <class T>
|
||||
static T RandomValue(){
|
||||
return (T)rand()/(T)RAND_MAX;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a random number in the range [min..max]
|
||||
* @param min
|
||||
* @param max
|
||||
* @return random T number in [min..max]
|
||||
*/
|
||||
template <class T>
|
||||
static T RandomValue(T min, T max){
|
||||
return Random::RandomValue<T>() * (max - min) + min;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a random int in the range [min..max]
|
||||
* @param min
|
||||
* @param max
|
||||
* @return random int in [min..max]
|
||||
*/
|
||||
static int RandomInt(int min, int max);
|
||||
|
||||
/**
|
||||
* Returns a random number from a gaussian distribution
|
||||
* @param mean
|
||||
* @param sigma standard deviation
|
||||
*/
|
||||
template <class T>
|
||||
static T RandomGaussianValue(T mean, T sigma)
|
||||
{
|
||||
// Box-Muller transformation
|
||||
T x1, x2, w, y1;
|
||||
|
||||
do {
|
||||
x1 = (T)2. * RandomValue<T>() - (T)1.;
|
||||
x2 = (T)2. * RandomValue<T>() - (T)1.;
|
||||
w = x1 * x1 + x2 * x2;
|
||||
} while ( w >= (T)1. || w == (T)0. );
|
||||
|
||||
w = sqrt( ((T)-2.0 * log( w ) ) / w );
|
||||
y1 = x1 * w;
|
||||
|
||||
return( mean + y1 * sigma );
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
/// If SeedRandOnce() or SeedRandOnce(int) have already been called
|
||||
static bool m_already_seeded;
|
||||
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/// Provides pseudo-random numbers with no repetitions
|
||||
class Random::UnrepeatedRandomizer
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Creates a randomizer that returns numbers in the range [min, max]
|
||||
* @param min
|
||||
* @param max
|
||||
*/
|
||||
UnrepeatedRandomizer(int min, int max);
|
||||
~UnrepeatedRandomizer(){}
|
||||
|
||||
/**
|
||||
* Copies a randomizer
|
||||
* @param rnd
|
||||
*/
|
||||
UnrepeatedRandomizer(const UnrepeatedRandomizer& rnd);
|
||||
|
||||
/**
|
||||
* Copies a randomizer
|
||||
* @param rnd
|
||||
*/
|
||||
UnrepeatedRandomizer& operator=(const UnrepeatedRandomizer& rnd);
|
||||
|
||||
/**
|
||||
* Returns a random number not given before. If all the possible values
|
||||
* were already given, the process starts again
|
||||
* @return unrepeated random number
|
||||
*/
|
||||
int get();
|
||||
|
||||
/**
|
||||
* Returns whether all the possible values between min and max were
|
||||
* already given. If get() is called when empty() is true, the behaviour
|
||||
* is the same than after creating the randomizer
|
||||
* @return true iff all the values were returned
|
||||
*/
|
||||
inline bool empty() const { return m_values.empty(); }
|
||||
|
||||
/**
|
||||
* Returns the number of values still to be returned
|
||||
* @return amount of values to return
|
||||
*/
|
||||
inline unsigned int left() const { return m_values.size(); }
|
||||
|
||||
/**
|
||||
* Resets the randomizer as it were just created
|
||||
*/
|
||||
void reset();
|
||||
|
||||
protected:
|
||||
|
||||
/**
|
||||
* Creates the vector with available values
|
||||
*/
|
||||
void createValues();
|
||||
|
||||
protected:
|
||||
|
||||
/// Min of range of values
|
||||
int m_min;
|
||||
/// Max of range of values
|
||||
int m_max;
|
||||
|
||||
/// Available values
|
||||
std::vector<int> m_values;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
246
Thirdparty/DBoW2/DUtils/Timestamp.cpp
vendored
Normal file
246
Thirdparty/DBoW2/DUtils/Timestamp.cpp
vendored
Normal file
@@ -0,0 +1,246 @@
|
||||
/*
|
||||
* File: Timestamp.cpp
|
||||
* Author: Dorian Galvez-Lopez
|
||||
* Date: March 2009
|
||||
* Description: timestamping functions
|
||||
*
|
||||
* Note: in windows, this class has a 1ms resolution
|
||||
*
|
||||
* License: see the LICENSE.txt file
|
||||
*
|
||||
*/
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <cmath>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
|
||||
#ifdef _WIN32
|
||||
#ifndef WIN32
|
||||
#define WIN32
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#include <sys/timeb.h>
|
||||
#define sprintf sprintf_s
|
||||
#else
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
||||
#include "Timestamp.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
using namespace DUtils;
|
||||
|
||||
Timestamp::Timestamp(Timestamp::tOptions option)
|
||||
{
|
||||
if(option & CURRENT_TIME)
|
||||
setToCurrentTime();
|
||||
else if(option & ZERO)
|
||||
setTime(0.);
|
||||
}
|
||||
|
||||
Timestamp::~Timestamp(void)
|
||||
{
|
||||
}
|
||||
|
||||
bool Timestamp::empty() const
|
||||
{
|
||||
return m_secs == 0 && m_usecs == 0;
|
||||
}
|
||||
|
||||
void Timestamp::setToCurrentTime(){
|
||||
|
||||
#ifdef WIN32
|
||||
struct __timeb32 timebuffer;
|
||||
_ftime32_s( &timebuffer ); // C4996
|
||||
// Note: _ftime is deprecated; consider using _ftime_s instead
|
||||
m_secs = timebuffer.time;
|
||||
m_usecs = timebuffer.millitm * 1000;
|
||||
#else
|
||||
struct timeval now;
|
||||
gettimeofday(&now, NULL);
|
||||
m_secs = now.tv_sec;
|
||||
m_usecs = now.tv_usec;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
void Timestamp::setTime(const string &stime){
|
||||
string::size_type p = stime.find('.');
|
||||
if(p == string::npos){
|
||||
m_secs = atol(stime.c_str());
|
||||
m_usecs = 0;
|
||||
}else{
|
||||
m_secs = atol(stime.substr(0, p).c_str());
|
||||
|
||||
string s_usecs = stime.substr(p+1, 6);
|
||||
m_usecs = atol(stime.substr(p+1).c_str());
|
||||
m_usecs *= (unsigned long)pow(10.0, double(6 - s_usecs.length()));
|
||||
}
|
||||
}
|
||||
|
||||
void Timestamp::setTime(double s)
|
||||
{
|
||||
m_secs = (unsigned long)s;
|
||||
m_usecs = (s - (double)m_secs) * 1e6;
|
||||
}
|
||||
|
||||
double Timestamp::getFloatTime() const {
|
||||
return double(m_secs) + double(m_usecs)/1000000.0;
|
||||
}
|
||||
|
||||
string Timestamp::getStringTime() const {
|
||||
char buf[32];
|
||||
sprintf(buf, "%.6lf", this->getFloatTime());
|
||||
return string(buf);
|
||||
}
|
||||
|
||||
double Timestamp::operator- (const Timestamp &t) const {
|
||||
return this->getFloatTime() - t.getFloatTime();
|
||||
}
|
||||
|
||||
Timestamp& Timestamp::operator+= (double s)
|
||||
{
|
||||
*this = *this + s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Timestamp& Timestamp::operator-= (double s)
|
||||
{
|
||||
*this = *this - s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Timestamp Timestamp::operator+ (double s) const
|
||||
{
|
||||
unsigned long secs = (long)floor(s);
|
||||
unsigned long usecs = (long)((s - (double)secs) * 1e6);
|
||||
|
||||
return this->plus(secs, usecs);
|
||||
}
|
||||
|
||||
Timestamp Timestamp::plus(unsigned long secs, unsigned long usecs) const
|
||||
{
|
||||
Timestamp t;
|
||||
|
||||
const unsigned long max = 1000000ul;
|
||||
|
||||
if(m_usecs + usecs >= max)
|
||||
t.setTime(m_secs + secs + 1, m_usecs + usecs - max);
|
||||
else
|
||||
t.setTime(m_secs + secs, m_usecs + usecs);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
Timestamp Timestamp::operator- (double s) const
|
||||
{
|
||||
unsigned long secs = (long)floor(s);
|
||||
unsigned long usecs = (long)((s - (double)secs) * 1e6);
|
||||
|
||||
return this->minus(secs, usecs);
|
||||
}
|
||||
|
||||
Timestamp Timestamp::minus(unsigned long secs, unsigned long usecs) const
|
||||
{
|
||||
Timestamp t;
|
||||
|
||||
const unsigned long max = 1000000ul;
|
||||
|
||||
if(m_usecs < usecs)
|
||||
t.setTime(m_secs - secs - 1, max - (usecs - m_usecs));
|
||||
else
|
||||
t.setTime(m_secs - secs, m_usecs - usecs);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
bool Timestamp::operator> (const Timestamp &t) const
|
||||
{
|
||||
if(m_secs > t.m_secs) return true;
|
||||
else if(m_secs == t.m_secs) return m_usecs > t.m_usecs;
|
||||
else return false;
|
||||
}
|
||||
|
||||
bool Timestamp::operator>= (const Timestamp &t) const
|
||||
{
|
||||
if(m_secs > t.m_secs) return true;
|
||||
else if(m_secs == t.m_secs) return m_usecs >= t.m_usecs;
|
||||
else return false;
|
||||
}
|
||||
|
||||
bool Timestamp::operator< (const Timestamp &t) const
|
||||
{
|
||||
if(m_secs < t.m_secs) return true;
|
||||
else if(m_secs == t.m_secs) return m_usecs < t.m_usecs;
|
||||
else return false;
|
||||
}
|
||||
|
||||
bool Timestamp::operator<= (const Timestamp &t) const
|
||||
{
|
||||
if(m_secs < t.m_secs) return true;
|
||||
else if(m_secs == t.m_secs) return m_usecs <= t.m_usecs;
|
||||
else return false;
|
||||
}
|
||||
|
||||
bool Timestamp::operator== (const Timestamp &t) const
|
||||
{
|
||||
return(m_secs == t.m_secs && m_usecs == t.m_usecs);
|
||||
}
|
||||
|
||||
|
||||
string Timestamp::Format(bool machine_friendly) const
|
||||
{
|
||||
struct tm tm_time;
|
||||
|
||||
time_t t = (time_t)getFloatTime();
|
||||
|
||||
#ifdef WIN32
|
||||
localtime_s(&tm_time, &t);
|
||||
#else
|
||||
localtime_r(&t, &tm_time);
|
||||
#endif
|
||||
|
||||
char buffer[128];
|
||||
|
||||
if(machine_friendly)
|
||||
{
|
||||
strftime(buffer, 128, "%Y%m%d_%H%M%S", &tm_time);
|
||||
}
|
||||
else
|
||||
{
|
||||
strftime(buffer, 128, "%c", &tm_time); // Thu Aug 23 14:55:02 2001
|
||||
}
|
||||
|
||||
return string(buffer);
|
||||
}
|
||||
|
||||
string Timestamp::Format(double s) {
|
||||
int days = int(s / (24. * 3600.0));
|
||||
s -= days * (24. * 3600.0);
|
||||
int hours = int(s / 3600.0);
|
||||
s -= hours * 3600;
|
||||
int minutes = int(s / 60.0);
|
||||
s -= minutes * 60;
|
||||
int seconds = int(s);
|
||||
int ms = int((s - seconds)*1e6);
|
||||
|
||||
stringstream ss;
|
||||
ss.fill('0');
|
||||
bool b;
|
||||
if((b = (days > 0))) ss << days << "d ";
|
||||
if((b = (b || hours > 0))) ss << setw(2) << hours << ":";
|
||||
if((b = (b || minutes > 0))) ss << setw(2) << minutes << ":";
|
||||
if(b) ss << setw(2);
|
||||
ss << seconds;
|
||||
if(!b) ss << "." << setw(6) << ms;
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
|
||||
204
Thirdparty/DBoW2/DUtils/Timestamp.h
vendored
Normal file
204
Thirdparty/DBoW2/DUtils/Timestamp.h
vendored
Normal file
@@ -0,0 +1,204 @@
|
||||
/*
|
||||
* File: Timestamp.h
|
||||
* Author: Dorian Galvez-Lopez
|
||||
* Date: March 2009
|
||||
* Description: timestamping functions
|
||||
* License: see the LICENSE.txt file
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __D_TIMESTAMP__
|
||||
#define __D_TIMESTAMP__
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
namespace DUtils {
|
||||
|
||||
/// Timestamp
|
||||
class Timestamp
|
||||
{
|
||||
public:
|
||||
|
||||
/// Options to initiate a timestamp
|
||||
enum tOptions
|
||||
{
|
||||
NONE = 0,
|
||||
CURRENT_TIME = 0x1,
|
||||
ZERO = 0x2
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
/**
|
||||
* Creates a timestamp
|
||||
* @param option option to set the initial time stamp
|
||||
*/
|
||||
Timestamp(Timestamp::tOptions option = NONE);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
*/
|
||||
virtual ~Timestamp(void);
|
||||
|
||||
/**
|
||||
* Says if the timestamp is "empty": seconds and usecs are both 0, as
|
||||
* when initiated with the ZERO flag
|
||||
* @return true iif secs == usecs == 0
|
||||
*/
|
||||
bool empty() const;
|
||||
|
||||
/**
|
||||
* Sets this instance to the current time
|
||||
*/
|
||||
void setToCurrentTime();
|
||||
|
||||
/**
|
||||
* Sets the timestamp from seconds and microseconds
|
||||
* @param secs: seconds
|
||||
* @param usecs: microseconds
|
||||
*/
|
||||
inline void setTime(unsigned long secs, unsigned long usecs){
|
||||
m_secs = secs;
|
||||
m_usecs = usecs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the timestamp in seconds and microseconds
|
||||
* @param secs seconds
|
||||
* @param usecs microseconds
|
||||
*/
|
||||
inline void getTime(unsigned long &secs, unsigned long &usecs) const
|
||||
{
|
||||
secs = m_secs;
|
||||
usecs = m_usecs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the timestamp from a string with the time in seconds
|
||||
* @param stime: string such as "1235603336.036609"
|
||||
*/
|
||||
void setTime(const string &stime);
|
||||
|
||||
/**
|
||||
* Sets the timestamp from a number of seconds from the epoch
|
||||
* @param s seconds from the epoch
|
||||
*/
|
||||
void setTime(double s);
|
||||
|
||||
/**
|
||||
* Returns this timestamp as the number of seconds in (long) float format
|
||||
*/
|
||||
double getFloatTime() const;
|
||||
|
||||
/**
|
||||
* Returns this timestamp as the number of seconds in fixed length string format
|
||||
*/
|
||||
string getStringTime() const;
|
||||
|
||||
/**
|
||||
* Returns the difference in seconds between this timestamp (greater) and t (smaller)
|
||||
* If the order is swapped, a negative number is returned
|
||||
* @param t: timestamp to subtract from this timestamp
|
||||
* @return difference in seconds
|
||||
*/
|
||||
double operator- (const Timestamp &t) const;
|
||||
|
||||
/**
|
||||
* Returns a copy of this timestamp + s seconds + us microseconds
|
||||
* @param s seconds
|
||||
* @param us microseconds
|
||||
*/
|
||||
Timestamp plus(unsigned long s, unsigned long us) const;
|
||||
|
||||
/**
|
||||
* Returns a copy of this timestamp - s seconds - us microseconds
|
||||
* @param s seconds
|
||||
* @param us microseconds
|
||||
*/
|
||||
Timestamp minus(unsigned long s, unsigned long us) const;
|
||||
|
||||
/**
|
||||
* Adds s seconds to this timestamp and returns a reference to itself
|
||||
* @param s seconds
|
||||
* @return reference to this timestamp
|
||||
*/
|
||||
Timestamp& operator+= (double s);
|
||||
|
||||
/**
|
||||
* Substracts s seconds to this timestamp and returns a reference to itself
|
||||
* @param s seconds
|
||||
* @return reference to this timestamp
|
||||
*/
|
||||
Timestamp& operator-= (double s);
|
||||
|
||||
/**
|
||||
* Returns a copy of this timestamp + s seconds
|
||||
* @param s: seconds
|
||||
*/
|
||||
Timestamp operator+ (double s) const;
|
||||
|
||||
/**
|
||||
* Returns a copy of this timestamp - s seconds
|
||||
* @param s: seconds
|
||||
*/
|
||||
Timestamp operator- (double s) const;
|
||||
|
||||
/**
|
||||
* Returns whether this timestamp is at the future of t
|
||||
* @param t
|
||||
*/
|
||||
bool operator> (const Timestamp &t) const;
|
||||
|
||||
/**
|
||||
* Returns whether this timestamp is at the future of (or is the same as) t
|
||||
* @param t
|
||||
*/
|
||||
bool operator>= (const Timestamp &t) const;
|
||||
|
||||
/**
|
||||
* Returns whether this timestamp and t represent the same instant
|
||||
* @param t
|
||||
*/
|
||||
bool operator== (const Timestamp &t) const;
|
||||
|
||||
/**
|
||||
* Returns whether this timestamp is at the past of t
|
||||
* @param t
|
||||
*/
|
||||
bool operator< (const Timestamp &t) const;
|
||||
|
||||
/**
|
||||
* Returns whether this timestamp is at the past of (or is the same as) t
|
||||
* @param t
|
||||
*/
|
||||
bool operator<= (const Timestamp &t) const;
|
||||
|
||||
/**
|
||||
* Returns the timestamp in a human-readable string
|
||||
* @param machine_friendly if true, the returned string is formatted
|
||||
* to yyyymmdd_hhmmss, without weekday or spaces
|
||||
* @note This has not been tested under Windows
|
||||
* @note The timestamp is truncated to seconds
|
||||
*/
|
||||
string Format(bool machine_friendly = false) const;
|
||||
|
||||
/**
|
||||
* Returns a string version of the elapsed time in seconds, with the format
|
||||
* xd hh:mm:ss, hh:mm:ss, mm:ss or s.us
|
||||
* @param s: elapsed seconds (given by getFloatTime) to format
|
||||
*/
|
||||
static string Format(double s);
|
||||
|
||||
|
||||
protected:
|
||||
/// Seconds
|
||||
unsigned long m_secs; // seconds
|
||||
/// Microseconds
|
||||
unsigned long m_usecs; // microseconds
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user