[DEV] first chrono version
This commit is contained in:
parent
e99c87f176
commit
715fd29b3c
1
authors.txt
Normal file
1
authors.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
MR Edouard DUPIN <yui.heero@gmail.com>
|
39
doxy_echrono.py
Normal file
39
doxy_echrono.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import os
|
||||||
|
import doxy.module as module
|
||||||
|
import doxy.debug as debug
|
||||||
|
import doxy.tools as tools
|
||||||
|
|
||||||
|
def create(target, module_name):
|
||||||
|
my_module = module.Module(__file__, module_name)
|
||||||
|
my_module.set_version("version.txt")
|
||||||
|
my_module.set_title("E-translate: Ewol runtime translate tool")
|
||||||
|
my_module.set_website("http://atria-soft.github.io/" + module_name)
|
||||||
|
my_module.set_website_sources("http://github.com/atria-soft/" + module_name)
|
||||||
|
"""
|
||||||
|
my_module.add_path([
|
||||||
|
module_name,
|
||||||
|
"doc"
|
||||||
|
])
|
||||||
|
my_module.add_sample_path([
|
||||||
|
"sample"
|
||||||
|
])
|
||||||
|
"""
|
||||||
|
my_module.add_depend([
|
||||||
|
'elog',
|
||||||
|
'etk',
|
||||||
|
'ejson',
|
||||||
|
])
|
||||||
|
my_module.add_exclude_symbols([
|
||||||
|
'*operator<<*',
|
||||||
|
])
|
||||||
|
my_module.add_exclude_file([
|
||||||
|
'debug.hpp',
|
||||||
|
])
|
||||||
|
my_module.add_file_patterns([
|
||||||
|
'*.hpp',
|
||||||
|
'*.md',
|
||||||
|
'*.py',
|
||||||
|
])
|
||||||
|
return my_module
|
||||||
|
|
168
echrono/Clock.cpp
Normal file
168
echrono/Clock.cpp
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <echrono/Clock.hpp>
|
||||||
|
#include <echrono/Steady.hpp>
|
||||||
|
#include <echrono/Duration.hpp>
|
||||||
|
#include <echrono/debug.hpp>
|
||||||
|
|
||||||
|
echrono::Clock::Clock() {
|
||||||
|
m_data = std::chrono::steady_clock::time_point(std::chrono::seconds(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Clock::Clock(int64_t _valNano) {
|
||||||
|
m_data = std::chrono::steady_clock::time_point(std::chrono::nanoseconds(_valNano));
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Clock::Clock(int64_t _valSec, int64_t _valNano) {
|
||||||
|
m_data = std::chrono::steady_clock::time_point(std::chrono::seconds(_valSec));
|
||||||
|
m_data += std::chrono::nanoseconds(_valNano);
|
||||||
|
}
|
||||||
|
echrono::Clock::Clock(const std::chrono::steady_clock::time_point& _val) {
|
||||||
|
m_data = _val;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Clock::Clock(const echrono::Steady& _val) {
|
||||||
|
m_data = _val.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Clock echrono::Clock::now() {
|
||||||
|
return echrono::Clock(std::chrono::steady_clock::now());
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Clock& echrono::Clock::operator= (const echrono::Clock& _obj) {
|
||||||
|
m_data = _obj.m_data;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Clock::operator== (const echrono::Clock& _obj) const {
|
||||||
|
return m_data == _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Clock::operator!= (const echrono::Clock& _obj) const {
|
||||||
|
return m_data != _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Clock::operator< (const echrono::Clock& _obj) const {
|
||||||
|
return m_data < _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Clock::operator<= (const echrono::Clock& _obj) const {
|
||||||
|
return m_data <= _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Clock::operator> (const echrono::Clock& _obj) const {
|
||||||
|
return m_data > _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Clock::operator>= (const echrono::Clock& _obj) const {
|
||||||
|
return m_data >= _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Clock& echrono::Clock::operator+= (const echrono::Duration& _obj) {
|
||||||
|
#if defined(__TARGET_OS__MacOs) || defined(__TARGET_OS__IOs)
|
||||||
|
std::chrono::microseconds ms = std::chrono::duration_cast<std::chrono::microseconds>(_obj.get());
|
||||||
|
m_data += ms;
|
||||||
|
#else
|
||||||
|
m_data += _obj.get();
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Clock echrono::Clock::operator+ (const echrono::Duration& _obj) const {
|
||||||
|
echrono::Clock time(m_data);
|
||||||
|
time += _obj;
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Clock& echrono::Clock::operator-= (const echrono::Duration& _obj) {
|
||||||
|
#if defined(__TARGET_OS__MacOs) || defined(__TARGET_OS__IOs)
|
||||||
|
std::chrono::microseconds ms = std::chrono::duration_cast<std::chrono::microseconds>(_obj.get());
|
||||||
|
m_data -= ms;
|
||||||
|
#else
|
||||||
|
m_data -= _obj.get();
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Clock echrono::Clock::operator- (const echrono::Duration& _obj) const {
|
||||||
|
echrono::Clock time(m_data);
|
||||||
|
time -= _obj;
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration echrono::Clock::operator- (const echrono::Clock& _obj) const {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(m_data.time_since_epoch());
|
||||||
|
std::chrono::nanoseconds ns2 = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.m_data.time_since_epoch());
|
||||||
|
echrono::Duration duration(ns);
|
||||||
|
echrono::Duration duration2(ns2);
|
||||||
|
return duration - duration2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void echrono::Clock::reset() {
|
||||||
|
m_data = std::chrono::steady_clock::time_point(std::chrono::seconds(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::ostream& echrono::operator <<(std::ostream& _os, const echrono::Clock& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
int64_t totalSecond = ns.count()/1000000000;
|
||||||
|
int64_t millisecond = (ns.count()%1000000000)/1000000;
|
||||||
|
int64_t microsecond = (ns.count()%1000000)/1000;
|
||||||
|
int64_t nanosecond = ns.count()%1000;
|
||||||
|
//_os << totalSecond << "s " << millisecond << "ms " << microsecond << "µs " << nanosecond << "ns";
|
||||||
|
int32_t second = totalSecond % 60;
|
||||||
|
int32_t minute = (totalSecond/60)%60;
|
||||||
|
int32_t hour = (totalSecond/3600)%24;
|
||||||
|
int32_t day = (totalSecond/(24*3600))%365;
|
||||||
|
int32_t year = totalSecond/(24*3600*365);
|
||||||
|
bool start = false;
|
||||||
|
if (year != 0) {
|
||||||
|
start = true;
|
||||||
|
_os << year << "y ";
|
||||||
|
}
|
||||||
|
if (day != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << day << "d ";
|
||||||
|
}
|
||||||
|
if (hour != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << hour << "h ";
|
||||||
|
}
|
||||||
|
if (minute != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << minute << ":";
|
||||||
|
}
|
||||||
|
if (second != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << second << "s ";
|
||||||
|
}
|
||||||
|
if (millisecond != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << millisecond << "ms ";
|
||||||
|
}
|
||||||
|
if (microsecond != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << microsecond << "us ";
|
||||||
|
}
|
||||||
|
_os << nanosecond << "ns ";
|
||||||
|
return _os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace etk {
|
||||||
|
template<> std::string to_string<echrono::Clock>(const echrono::Clock& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
return etk::to_string(ns.count());
|
||||||
|
}
|
||||||
|
#if __CPP_VERSION__ >= 2011
|
||||||
|
template<> std::u32string to_u32string<echrono::Clock>(const echrono::Clock& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
return etk::to_u32string(ns.count());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
49
echrono/Clock.hpp
Normal file
49
echrono/Clock.hpp
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <etk/types.hpp>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
namespace echrono {
|
||||||
|
class Duration;
|
||||||
|
class Steady;
|
||||||
|
/**
|
||||||
|
* @brief Clock is a compleate virtual clock that is used to virtualize the urrent clock used (can be non real-time, ex:for simulation)
|
||||||
|
*/
|
||||||
|
class Clock {
|
||||||
|
private:
|
||||||
|
std::chrono::steady_clock::time_point m_data;
|
||||||
|
public:
|
||||||
|
Clock();
|
||||||
|
//Clock(const echrono::Duration& _val) {}; //value in second
|
||||||
|
Clock(int64_t _valNano);
|
||||||
|
Clock(int64_t _valSec, int64_t _valNano);
|
||||||
|
Clock(const std::chrono::steady_clock::time_point& _val);
|
||||||
|
Clock(const echrono::Steady& _val);
|
||||||
|
~Clock() {};
|
||||||
|
const std::chrono::steady_clock::time_point& get() const {
|
||||||
|
return m_data;
|
||||||
|
}
|
||||||
|
static Clock now();
|
||||||
|
const Clock& operator= (const echrono::Clock& _obj );
|
||||||
|
bool operator== (const echrono::Clock& _obj) const;
|
||||||
|
bool operator!= (const echrono::Clock& _obj) const;
|
||||||
|
bool operator< (const echrono::Clock& _obj) const;
|
||||||
|
bool operator<= (const echrono::Clock& _obj) const;
|
||||||
|
bool operator> (const echrono::Clock& _obj) const;
|
||||||
|
bool operator>= (const echrono::Clock& _obj) const;
|
||||||
|
const Clock& operator+= (const echrono::Duration& _obj);
|
||||||
|
Clock operator+ (const echrono::Duration& _obj) const;
|
||||||
|
const Clock& operator-= (const echrono::Duration& _obj);
|
||||||
|
Clock operator- (const echrono::Duration& _obj) const;
|
||||||
|
Duration operator- (const echrono::Clock& _obj) const;
|
||||||
|
void reset();
|
||||||
|
};
|
||||||
|
std::ostream& operator <<(std::ostream& _os, const echrono::Clock& _obj);
|
||||||
|
}
|
||||||
|
|
198
echrono/Duration.cpp
Normal file
198
echrono/Duration.cpp
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <echrono/Time.hpp>
|
||||||
|
#include <echrono/Duration.hpp>
|
||||||
|
#include <echrono/debug.hpp>
|
||||||
|
|
||||||
|
echrono::Duration::Duration() {
|
||||||
|
m_data = std::chrono::nanoseconds(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration::Duration(int _val) {
|
||||||
|
m_data = std::chrono::nanoseconds(_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration::Duration(int64_t _valSec, int64_t _valNano) {
|
||||||
|
m_data = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::seconds(_valSec));
|
||||||
|
m_data += std::chrono::nanoseconds(_valNano);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration::Duration(int64_t _val) {
|
||||||
|
m_data = std::chrono::nanoseconds(_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration::Duration(double _val) {
|
||||||
|
m_data = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::seconds(int64_t(_val)));
|
||||||
|
m_data += std::chrono::nanoseconds(int64_t(((_val - int64_t(_val)) * 1000000000.0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration::Duration(echrono::nanoseconds _val) {
|
||||||
|
m_data = std::chrono::duration_cast<std::chrono::nanoseconds>(_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration::Duration(echrono::microseconds _val) {
|
||||||
|
m_data = std::chrono::duration_cast<std::chrono::nanoseconds>(_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration::Duration(echrono::milliseconds _val) {
|
||||||
|
m_data = std::chrono::duration_cast<std::chrono::nanoseconds>(_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration::Duration(echrono::seconds _val) {
|
||||||
|
m_data = std::chrono::duration_cast<std::chrono::nanoseconds>(_val);
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t echrono::Duration::count() const {
|
||||||
|
return m_data.count();
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Duration& echrono::Duration::operator= (const echrono::Duration& _obj) {
|
||||||
|
m_data = _obj.m_data;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
bool echrono::Duration::operator== (const echrono::Duration& _obj) const {
|
||||||
|
return _obj.m_data == m_data;
|
||||||
|
}
|
||||||
|
bool echrono::Duration::operator!= (const echrono::Duration& _obj) const {
|
||||||
|
return _obj.m_data != m_data;
|
||||||
|
}
|
||||||
|
bool echrono::Duration::operator< (const echrono::Duration& _obj) const {
|
||||||
|
return m_data < _obj.m_data;
|
||||||
|
}
|
||||||
|
bool echrono::Duration::operator<= (const echrono::Duration& _obj) const {
|
||||||
|
return m_data <= _obj.m_data;
|
||||||
|
}
|
||||||
|
bool echrono::Duration::operator> (const echrono::Duration& _obj) const {
|
||||||
|
return m_data > _obj.m_data;
|
||||||
|
}
|
||||||
|
bool echrono::Duration::operator>= (const echrono::Duration& _obj) const {
|
||||||
|
return m_data >= _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
float echrono::Duration::toSeconds() const {
|
||||||
|
return float(double(m_data.count()) * 0.0000000001);
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Duration& echrono::Duration::operator/= (float _value) {
|
||||||
|
m_data = std::chrono::nanoseconds(int64_t(double(m_data.count()) / _value));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
echrono::Duration echrono::Duration::operator/ (float _value) const {
|
||||||
|
echrono::Duration tmpp(int64_t(double(m_data.count()) / _value));
|
||||||
|
return tmpp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const echrono::Duration& echrono::Duration::operator*= (float _value) {
|
||||||
|
m_data = std::chrono::nanoseconds(int64_t(double(m_data.count()) * _value));
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
echrono::Duration echrono::Duration::operator* (float _value) const {
|
||||||
|
echrono::Duration tmpp(int64_t(double(m_data.count()) * _value));
|
||||||
|
return tmpp;
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Duration& echrono::Duration::operator+= (const echrono::Duration& _obj) {
|
||||||
|
m_data += _obj.m_data;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
echrono::Duration echrono::Duration::operator+ (const echrono::Duration& _obj) const {
|
||||||
|
echrono::Duration tmpp(m_data);
|
||||||
|
tmpp.m_data += _obj.m_data;
|
||||||
|
return tmpp;
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Duration& echrono::Duration::operator-= (const echrono::Duration& _obj) {
|
||||||
|
m_data -= _obj.m_data;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
echrono::Duration echrono::Duration::operator- (const echrono::Duration& _obj) const {
|
||||||
|
echrono::Duration tmpp(m_data);
|
||||||
|
tmpp.m_data -= _obj.m_data;
|
||||||
|
return tmpp;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration& echrono::Duration::operator++() {
|
||||||
|
m_data += std::chrono::nanoseconds(1);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
echrono::Duration echrono::Duration::operator++(int _unused) {
|
||||||
|
echrono::Duration result(m_data);
|
||||||
|
m_data += std::chrono::nanoseconds(1);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
echrono::Duration& echrono::Duration::operator--() {
|
||||||
|
m_data -= std::chrono::nanoseconds(1);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
echrono::Duration echrono::Duration::operator--(int _unused) {
|
||||||
|
m_data -= std::chrono::nanoseconds(1);
|
||||||
|
echrono::Duration result(m_data);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void echrono::Duration::reset() {
|
||||||
|
m_data = std::chrono::nanoseconds(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream& echrono::operator <<(std::ostream& _os, const echrono::Duration& _obj) {
|
||||||
|
int64_t totalSecond = _obj.count()/1000000000;
|
||||||
|
int64_t millisecond = (_obj.count()%1000000000)/1000000;
|
||||||
|
int64_t microsecond = (_obj.count()%1000000)/1000;
|
||||||
|
int64_t nanosecond = _obj.count()%1000;
|
||||||
|
//_os << totalSecond << "s " << millisecond << "ms " << microsecond << "µs " << nanosecond << "ns";
|
||||||
|
int32_t second = totalSecond % 60;
|
||||||
|
int32_t minute = (totalSecond/60)%60;
|
||||||
|
int32_t hour = (totalSecond/3600)%24;
|
||||||
|
int32_t day = (totalSecond/(24*3600))%365;
|
||||||
|
int32_t year = totalSecond/(24*3600*365);
|
||||||
|
bool start = false;
|
||||||
|
if (year != 0) {
|
||||||
|
start = true;
|
||||||
|
_os << year << "y ";
|
||||||
|
}
|
||||||
|
if (day != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << day << "d ";
|
||||||
|
}
|
||||||
|
if (hour != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << hour << "h ";
|
||||||
|
}
|
||||||
|
if (minute != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << minute << ":";
|
||||||
|
}
|
||||||
|
if (second != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << second << "s ";
|
||||||
|
}
|
||||||
|
if (millisecond != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << millisecond << "ms ";
|
||||||
|
}
|
||||||
|
if (microsecond != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << microsecond << "us ";
|
||||||
|
}
|
||||||
|
_os << nanosecond << "ns ";
|
||||||
|
return _os;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace etk {
|
||||||
|
template<> std::string to_string<echrono::Duration>(const echrono::Duration& _obj) {
|
||||||
|
return etk::to_string(_obj.count());
|
||||||
|
}
|
||||||
|
#if __CPP_VERSION__ >= 2011
|
||||||
|
template<> std::u32string to_u32string<echrono::Duration>(const echrono::Duration& _obj) {
|
||||||
|
return etk::to_u32string(_obj.count());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
59
echrono/Duration.hpp
Normal file
59
echrono/Duration.hpp
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <etk/types.hpp>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
namespace echrono {
|
||||||
|
using nanoseconds = std::chrono::nanoseconds;
|
||||||
|
using microseconds = std::chrono::microseconds;
|
||||||
|
using milliseconds = std::chrono::milliseconds;
|
||||||
|
using seconds = std::chrono::seconds;
|
||||||
|
|
||||||
|
class Duration {
|
||||||
|
private:
|
||||||
|
echrono::nanoseconds m_data;
|
||||||
|
public:
|
||||||
|
Duration();
|
||||||
|
Duration(int _val); //value in nanosecond
|
||||||
|
Duration(int64_t _val); //value in nanosecond
|
||||||
|
Duration(int64_t _valSec, int64_t _valNano); //value in second and nanosecond
|
||||||
|
Duration(double _val); //value in second
|
||||||
|
Duration(echrono::nanoseconds _val);
|
||||||
|
Duration(echrono::microseconds _val);
|
||||||
|
Duration(echrono::milliseconds _val);
|
||||||
|
Duration(echrono::seconds _val);
|
||||||
|
~Duration() { };
|
||||||
|
int64_t count() const;
|
||||||
|
const echrono::nanoseconds& get() const {
|
||||||
|
return m_data;
|
||||||
|
}
|
||||||
|
const Duration& operator= (const Duration& _obj);
|
||||||
|
bool operator== (const Duration& _obj) const;
|
||||||
|
bool operator!= (const Duration& _obj) const;
|
||||||
|
bool operator< (const echrono::Duration& _obj) const;
|
||||||
|
bool operator<= (const echrono::Duration& _obj) const;
|
||||||
|
bool operator> (const echrono::Duration& _obj) const;
|
||||||
|
bool operator>= (const echrono::Duration& _obj) const;
|
||||||
|
Duration operator/ (float _value) const;
|
||||||
|
const Duration& operator/= (float _value);
|
||||||
|
Duration operator* (float _value) const;
|
||||||
|
const Duration& operator*= (float _value);
|
||||||
|
const Duration& operator+= (const Duration& _obj);
|
||||||
|
Duration operator+ (const Duration& _obj) const;
|
||||||
|
const Duration& operator-= (const Duration& _obj);
|
||||||
|
Duration operator- (const Duration& _obj) const;
|
||||||
|
Duration& operator++();
|
||||||
|
Duration operator++(int _unused);
|
||||||
|
Duration& operator--();
|
||||||
|
Duration operator--(int _unused);
|
||||||
|
float toSeconds() const;
|
||||||
|
void reset();
|
||||||
|
};
|
||||||
|
std::ostream& operator <<(std::ostream& _os, const echrono::Duration& _obj);
|
||||||
|
}
|
||||||
|
|
162
echrono/Steady.cpp
Normal file
162
echrono/Steady.cpp
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <echrono/Steady.hpp>
|
||||||
|
#include <echrono/Duration.hpp>
|
||||||
|
#include <echrono/debug.hpp>
|
||||||
|
|
||||||
|
echrono::Steady::Steady() {
|
||||||
|
m_data = std::chrono::steady_clock::time_point(std::chrono::seconds(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Steady::Steady(int64_t _valNano) {
|
||||||
|
m_data = std::chrono::steady_clock::time_point(std::chrono::nanoseconds(_valNano));
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Steady::Steady(int64_t _valSec, int64_t _valNano) {
|
||||||
|
m_data = std::chrono::steady_clock::time_point(std::chrono::seconds(_valSec));
|
||||||
|
m_data += std::chrono::nanoseconds(_valNano);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Steady::Steady(const std::chrono::steady_clock::time_point& _val) {
|
||||||
|
m_data = _val;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Steady echrono::Steady::now() {
|
||||||
|
return echrono::Steady(std::chrono::steady_clock::now());
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Steady& echrono::Steady::operator= (const echrono::Steady& _obj) {
|
||||||
|
m_data = _obj.m_data;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Steady::operator== (const echrono::Steady& _obj) const {
|
||||||
|
return m_data == _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Steady::operator!= (const echrono::Steady& _obj) const {
|
||||||
|
return m_data != _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Steady::operator< (const echrono::Steady& _obj) const {
|
||||||
|
return m_data < _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Steady::operator<= (const echrono::Steady& _obj) const {
|
||||||
|
return m_data <= _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Steady::operator> (const echrono::Steady& _obj) const {
|
||||||
|
return m_data > _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Steady::operator>= (const echrono::Steady& _obj) const {
|
||||||
|
return m_data >= _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Steady& echrono::Steady::operator+= (const echrono::Duration& _obj) {
|
||||||
|
#if defined(__TARGET_OS__MacOs) || defined(__TARGET_OS__IOs)
|
||||||
|
std::chrono::microseconds ms = std::chrono::duration_cast<std::chrono::microseconds>(_obj.get());
|
||||||
|
m_data += ms;
|
||||||
|
#else
|
||||||
|
m_data += _obj.get();
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Steady echrono::Steady::operator+ (const echrono::Duration& _obj) const {
|
||||||
|
echrono::Steady time(m_data);
|
||||||
|
time += _obj;
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Steady& echrono::Steady::operator-= (const echrono::Duration& _obj) {
|
||||||
|
#if defined(__TARGET_OS__MacOs) || defined(__TARGET_OS__IOs)
|
||||||
|
std::chrono::microseconds ms = std::chrono::duration_cast<std::chrono::microseconds>(_obj.get());
|
||||||
|
m_data -= ms;
|
||||||
|
#else
|
||||||
|
m_data -= _obj.get();
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Steady echrono::Steady::operator- (const echrono::Duration& _obj) const {
|
||||||
|
echrono::Steady time(m_data);
|
||||||
|
time -= _obj;
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration echrono::Steady::operator- (const echrono::Steady& _obj) const {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(m_data.time_since_epoch());
|
||||||
|
std::chrono::nanoseconds ns2 = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.m_data.time_since_epoch());
|
||||||
|
echrono::Duration duration(ns);
|
||||||
|
echrono::Duration duration2(ns2);
|
||||||
|
return duration - duration2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void echrono::Steady::reset() {
|
||||||
|
m_data = std::chrono::steady_clock::time_point(std::chrono::seconds(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream& echrono::operator <<(std::ostream& _os, const echrono::Steady& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
int64_t totalSecond = ns.count()/1000000000;
|
||||||
|
int64_t millisecond = (ns.count()%1000000000)/1000000;
|
||||||
|
int64_t microsecond = (ns.count()%1000000)/1000;
|
||||||
|
int64_t nanosecond = ns.count()%1000;
|
||||||
|
//_os << totalSecond << "s " << millisecond << "ms " << microsecond << "µs " << nanosecond << "ns";
|
||||||
|
int32_t second = totalSecond % 60;
|
||||||
|
int32_t minute = (totalSecond/60)%60;
|
||||||
|
int32_t hour = (totalSecond/3600)%24;
|
||||||
|
int32_t day = (totalSecond/(24*3600))%365;
|
||||||
|
int32_t year = totalSecond/(24*3600*365);
|
||||||
|
bool start = false;
|
||||||
|
if (year != 0) {
|
||||||
|
start = true;
|
||||||
|
_os << year << "y ";
|
||||||
|
}
|
||||||
|
if (day != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << day << "d ";
|
||||||
|
}
|
||||||
|
if (hour != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << hour << "h ";
|
||||||
|
}
|
||||||
|
if (minute != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << minute << ":";
|
||||||
|
}
|
||||||
|
if (second != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << second << "s ";
|
||||||
|
}
|
||||||
|
if (millisecond != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << millisecond << "ms ";
|
||||||
|
}
|
||||||
|
if (microsecond != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << microsecond << "us ";
|
||||||
|
}
|
||||||
|
_os << nanosecond << "ns ";
|
||||||
|
return _os;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace etk {
|
||||||
|
template<> std::string to_string<echrono::Steady>(const echrono::Steady& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
return etk::to_string(ns.count());
|
||||||
|
}
|
||||||
|
#if __CPP_VERSION__ >= 2011
|
||||||
|
template<> std::u32string to_u32string<echrono::Steady>(const echrono::Steady& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
return etk::to_u32string(ns.count());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
47
echrono/Steady.hpp
Normal file
47
echrono/Steady.hpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <etk/types.hpp>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
namespace echrono {
|
||||||
|
class Duration;
|
||||||
|
/**
|
||||||
|
* @brief Steady is a Program start time clock
|
||||||
|
*/
|
||||||
|
class Steady {
|
||||||
|
private:
|
||||||
|
std::chrono::steady_clock::time_point m_data;
|
||||||
|
public:
|
||||||
|
Steady();
|
||||||
|
//Steady(const echrono::Duration& _val) {}; //value in second
|
||||||
|
Steady(int64_t _valNano);
|
||||||
|
Steady(int64_t _valSec, int64_t _valNano);
|
||||||
|
Steady(const std::chrono::steady_clock::time_point& _val);
|
||||||
|
~Steady() {};
|
||||||
|
const std::chrono::steady_clock::time_point& get() const {
|
||||||
|
return m_data;
|
||||||
|
}
|
||||||
|
static Steady now();
|
||||||
|
const Steady& operator= (const echrono::Steady& _obj );
|
||||||
|
bool operator== (const echrono::Steady& _obj) const;
|
||||||
|
bool operator!= (const echrono::Steady& _obj) const;
|
||||||
|
bool operator< (const echrono::Steady& _obj) const;
|
||||||
|
bool operator<= (const echrono::Steady& _obj) const;
|
||||||
|
bool operator> (const echrono::Steady& _obj) const;
|
||||||
|
bool operator>= (const echrono::Steady& _obj) const;
|
||||||
|
const Steady& operator+= (const echrono::Duration& _obj);
|
||||||
|
Steady operator+ (const echrono::Duration& _obj) const;
|
||||||
|
const Steady& operator-= (const echrono::Duration& _obj);
|
||||||
|
Steady operator- (const echrono::Duration& _obj) const;
|
||||||
|
Duration operator- (const echrono::Steady& _obj) const;
|
||||||
|
void reset();
|
||||||
|
};
|
||||||
|
std::ostream& operator <<(std::ostream& _os, const echrono::Steady& _obj);
|
||||||
|
}
|
||||||
|
|
164
echrono/Time.cpp
Normal file
164
echrono/Time.cpp
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <echrono/Time.hpp>
|
||||||
|
#include <echrono/Duration.hpp>
|
||||||
|
#include <echrono/debug.hpp>
|
||||||
|
|
||||||
|
echrono::Time::Time() {
|
||||||
|
m_data = std::chrono::system_clock::time_point(std::chrono::seconds(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Time::Time(int64_t _valNano) {
|
||||||
|
m_data = std::chrono::system_clock::time_point(std::chrono::nanoseconds(_valNano));
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Time::Time(int64_t _valSec, int64_t _valNano) {
|
||||||
|
m_data = std::chrono::system_clock::time_point(std::chrono::seconds(_valSec));
|
||||||
|
m_data += std::chrono::nanoseconds(_valNano);
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Time::Time(const std::chrono::system_clock::time_point& _val) {
|
||||||
|
m_data = _val;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Time echrono::Time::now() {
|
||||||
|
return echrono::Time(std::chrono::system_clock::now());
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Time& echrono::Time::operator= (const echrono::Time& _obj) {
|
||||||
|
m_data = _obj.m_data;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Time::operator== (const echrono::Time& _obj) const {
|
||||||
|
return m_data == _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Time::operator!= (const echrono::Time& _obj) const {
|
||||||
|
return m_data != _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Time::operator< (const echrono::Time& _obj) const {
|
||||||
|
return m_data < _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Time::operator<= (const echrono::Time& _obj) const {
|
||||||
|
return m_data <= _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Time::operator> (const echrono::Time& _obj) const {
|
||||||
|
return m_data > _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool echrono::Time::operator>= (const echrono::Time& _obj) const {
|
||||||
|
return m_data >= _obj.m_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Time& echrono::Time::operator+= (const echrono::Duration& _obj) {
|
||||||
|
#if defined(__TARGET_OS__MacOs) || defined(__TARGET_OS__IOs)
|
||||||
|
std::chrono::microseconds ms = std::chrono::duration_cast<std::chrono::microseconds>(_obj.get());
|
||||||
|
m_data += ms;
|
||||||
|
#else
|
||||||
|
m_data += _obj.get();
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Time echrono::Time::operator+ (const echrono::Duration& _obj) const {
|
||||||
|
echrono::Time time(m_data);
|
||||||
|
time += _obj;
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
const echrono::Time& echrono::Time::operator-= (const echrono::Duration& _obj) {
|
||||||
|
#if defined(__TARGET_OS__MacOs) || defined(__TARGET_OS__IOs)
|
||||||
|
std::chrono::microseconds ms = std::chrono::duration_cast<std::chrono::microseconds>(_obj.get());
|
||||||
|
m_data -= ms;
|
||||||
|
#else
|
||||||
|
m_data -= _obj.get();
|
||||||
|
#endif
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Time echrono::Time::operator- (const echrono::Duration& _obj) const {
|
||||||
|
echrono::Time time(m_data);
|
||||||
|
time -= _obj;
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
echrono::Duration echrono::Time::operator- (const echrono::Time& _obj) const {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(m_data.time_since_epoch());
|
||||||
|
std::chrono::nanoseconds ns2 = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.m_data.time_since_epoch());
|
||||||
|
echrono::Duration duration(ns);
|
||||||
|
echrono::Duration duration2(ns2);
|
||||||
|
return duration - duration2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void echrono::Time::reset() {
|
||||||
|
m_data = std::chrono::system_clock::time_point(std::chrono::seconds(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream& echrono::operator <<(std::ostream& _os, const echrono::Time& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
int64_t totalSecond = ns.count()/1000000000;
|
||||||
|
int64_t millisecond = (ns.count()%1000000000)/1000000;
|
||||||
|
int64_t microsecond = (ns.count()%1000000)/1000;
|
||||||
|
int64_t nanosecond = ns.count()%1000;
|
||||||
|
//_os << totalSecond << "s " << millisecond << "ms " << microsecond << "µs " << nanosecond << "ns";
|
||||||
|
int32_t second = totalSecond % 60;
|
||||||
|
int32_t minute = (totalSecond/60)%60;
|
||||||
|
int32_t hour = (totalSecond/3600)%24;
|
||||||
|
int32_t day = (totalSecond/(24*3600))%365;
|
||||||
|
int32_t year = totalSecond/(24*3600*365);
|
||||||
|
bool start = false;
|
||||||
|
if (year != 0) {
|
||||||
|
start = true;
|
||||||
|
_os << year << "y ";
|
||||||
|
}
|
||||||
|
if (day != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << day << "d ";
|
||||||
|
}
|
||||||
|
if (hour != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << hour << "h ";
|
||||||
|
}
|
||||||
|
if (minute != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << minute << ":";
|
||||||
|
}
|
||||||
|
if (second != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << second << "s ";
|
||||||
|
}
|
||||||
|
if (millisecond != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << millisecond << "ms ";
|
||||||
|
}
|
||||||
|
if (microsecond != 0 || start == true) {
|
||||||
|
start = true;
|
||||||
|
_os << microsecond << "us ";
|
||||||
|
}
|
||||||
|
_os << nanosecond << "ns ";
|
||||||
|
return _os;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace etk {
|
||||||
|
template<> std::string to_string<echrono::Time>(const echrono::Time& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
return etk::to_string(ns.count());
|
||||||
|
}
|
||||||
|
#if __CPP_VERSION__ >= 2011
|
||||||
|
template<> std::u32string to_u32string<echrono::Time>(const echrono::Time& _obj) {
|
||||||
|
std::chrono::nanoseconds ns = std::chrono::duration_cast<std::chrono::nanoseconds>(_obj.get().time_since_epoch());
|
||||||
|
return etk::to_u32string(ns.count());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
47
echrono/Time.hpp
Normal file
47
echrono/Time.hpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <etk/types.hpp>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
namespace echrono {
|
||||||
|
class Duration;
|
||||||
|
/**
|
||||||
|
* @brief Represent the earth clock (if computer is synchronized)
|
||||||
|
*/
|
||||||
|
class Time {
|
||||||
|
private:
|
||||||
|
std::chrono::system_clock::time_point m_data;
|
||||||
|
public:
|
||||||
|
Time();
|
||||||
|
//Time(const echrono::Duration& _val) {}; //value in second
|
||||||
|
Time(int64_t _valNano);
|
||||||
|
Time(int64_t _valSec, int64_t _valNano);
|
||||||
|
Time(const std::chrono::system_clock::time_point& _val);
|
||||||
|
~Time() {};
|
||||||
|
const std::chrono::system_clock::time_point& get() const {
|
||||||
|
return m_data;
|
||||||
|
}
|
||||||
|
static Time now();
|
||||||
|
const Time& operator= (const echrono::Time& _obj );
|
||||||
|
bool operator== (const echrono::Time& _obj) const;
|
||||||
|
bool operator!= (const echrono::Time& _obj) const;
|
||||||
|
bool operator< (const echrono::Time& _obj) const;
|
||||||
|
bool operator<= (const echrono::Time& _obj) const;
|
||||||
|
bool operator> (const echrono::Time& _obj) const;
|
||||||
|
bool operator>= (const echrono::Time& _obj) const;
|
||||||
|
const Time& operator+= (const echrono::Duration& _obj);
|
||||||
|
Time operator+ (const echrono::Duration& _obj) const;
|
||||||
|
const Time& operator-= (const echrono::Duration& _obj);
|
||||||
|
Time operator- (const echrono::Duration& _obj) const;
|
||||||
|
Duration operator- (const echrono::Time& _obj) const;
|
||||||
|
void reset();
|
||||||
|
};
|
||||||
|
std::ostream& operator <<(std::ostream& _os, const echrono::Time& _obj);
|
||||||
|
}
|
||||||
|
|
12
echrono/debug.cpp
Normal file
12
echrono/debug.cpp
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <echrono/debug.hpp>
|
||||||
|
|
||||||
|
int32_t echrono::getLogId() {
|
||||||
|
static int32_t g_val = elog::registerInstance("echrono");
|
||||||
|
return g_val;
|
||||||
|
}
|
38
echrono/debug.hpp
Normal file
38
echrono/debug.hpp
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <elog/log.hpp>
|
||||||
|
|
||||||
|
namespace echrono {
|
||||||
|
int32_t getLogId();
|
||||||
|
};
|
||||||
|
#define ECHRONO_BASE(info,data) ELOG_BASE(echrono::getLogId(),info,data)
|
||||||
|
|
||||||
|
#define ECHRONO_PRINT(data) ECHRONO_BASE(-1, data)
|
||||||
|
#define ECHRONO_CRITICAL(data) ECHRONO_BASE(1, data)
|
||||||
|
#define ECHRONO_ERROR(data) ECHRONO_BASE(2, data)
|
||||||
|
#define ECHRONO_WARNING(data) ECHRONO_BASE(3, data)
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define ECHRONO_INFO(data) ECHRONO_BASE(4, data)
|
||||||
|
#define ECHRONO_DEBUG(data) ECHRONO_BASE(5, data)
|
||||||
|
#define ECHRONO_VERBOSE(data) ECHRONO_BASE(6, data)
|
||||||
|
#define ECHRONO_TODO(data) ECHRONO_BASE(4, "TODO : " << data)
|
||||||
|
#else
|
||||||
|
#define ECHRONO_INFO(data) do { } while(false)
|
||||||
|
#define ECHRONO_DEBUG(data) do { } while(false)
|
||||||
|
#define ECHRONO_VERBOSE(data) do { } while(false)
|
||||||
|
#define ECHRONO_TODO(data) do { } while(false)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define ECHRONO_ASSERT(cond,data) \
|
||||||
|
do { \
|
||||||
|
if (!(cond)) { \
|
||||||
|
ECHRONO_CRITICAL(data); \
|
||||||
|
assert(!#cond); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
43
echrono/echrono.cpp
Normal file
43
echrono/echrono.cpp
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <echrono/debug.hpp>
|
||||||
|
#include <echrono/echrono.hpp>
|
||||||
|
#include <etk/stdTools.hpp>
|
||||||
|
|
||||||
|
static int32_t g_isInit = 0;
|
||||||
|
|
||||||
|
void echrono::init(int _argc, const char** _argv) {
|
||||||
|
if (g_isInit > 0) {
|
||||||
|
g_isInit++;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ECHRONO_INFO("E-chrono system init");
|
||||||
|
for (int32_t iii=0; iii<_argc ; ++iii) {
|
||||||
|
std::string data = _argv[iii];
|
||||||
|
if ( data == "-h"
|
||||||
|
|| data == "--help") {
|
||||||
|
ECHRONO_PRINT("e-chrono - help : ");
|
||||||
|
ECHRONO_PRINT(" -h/--help: Dispplay this help");
|
||||||
|
} else if (etk::start_with(data, "--echrono") == true) {
|
||||||
|
ECHRONO_ERROR("Can not parse the argument : '" << data << "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g_isInit++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void echrono::unInit() {
|
||||||
|
if (g_isInit >= 1) {
|
||||||
|
g_isInit--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (g_isInit == 1) {
|
||||||
|
ECHRONO_INFO("E-chrono system un-init");
|
||||||
|
g_isInit--;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ECHRONO_ERROR("E-chrono system un-init (already done before)");
|
||||||
|
}
|
19
echrono/echrono.hpp
Normal file
19
echrono/echrono.hpp
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/** @file
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @copyright 2016, Edouard DUPIN, all right reserved
|
||||||
|
* @license APACHE v2.0 (see license file)
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace echrono {
|
||||||
|
/**
|
||||||
|
* @brief Initialize echrono
|
||||||
|
* @param[in] _argc Number of argument list
|
||||||
|
* @param[in] _argv List of arguments
|
||||||
|
*/
|
||||||
|
void init(int _argc, const char** _argv);
|
||||||
|
/**
|
||||||
|
* @brief Un-Initialize echrono
|
||||||
|
*/
|
||||||
|
void unInit();
|
||||||
|
}
|
56
lutin_echrono.py
Normal file
56
lutin_echrono.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import lutin.debug as debug
|
||||||
|
import lutin.tools as tools
|
||||||
|
|
||||||
|
|
||||||
|
def get_type():
|
||||||
|
return "LIBRARY"
|
||||||
|
|
||||||
|
def get_desc():
|
||||||
|
return "E-chrono: Ewol chrono wrapper to simplify use of std::chrono (and permit to create a virtual clock)"
|
||||||
|
|
||||||
|
def get_licence():
|
||||||
|
return "APACHE-2"
|
||||||
|
|
||||||
|
def get_compagny_type():
|
||||||
|
return "com"
|
||||||
|
|
||||||
|
def get_compagny_name():
|
||||||
|
return "atria-soft"
|
||||||
|
|
||||||
|
def get_maintainer():
|
||||||
|
return "authors.txt"
|
||||||
|
|
||||||
|
def get_version():
|
||||||
|
return "version.txt"
|
||||||
|
|
||||||
|
def configure(target, my_module):
|
||||||
|
# add extra compilation flags:
|
||||||
|
my_module.add_extra_flags()
|
||||||
|
# add the file to compile:
|
||||||
|
my_module.add_src_file([
|
||||||
|
'echrono/echrono.cpp',
|
||||||
|
'echrono/debug.cpp',
|
||||||
|
'echrono/Duration.cpp',
|
||||||
|
'echrono/Time.cpp',
|
||||||
|
'echrono/Steady.cpp',
|
||||||
|
'echrono/Clock.cpp',
|
||||||
|
])
|
||||||
|
my_module.add_header_file([
|
||||||
|
'echrono/echrono.hpp',
|
||||||
|
'echrono/Duration.hpp',
|
||||||
|
'echrono/Time.hpp',
|
||||||
|
'echrono/Steady.hpp',
|
||||||
|
'echrono/Clock.hpp',
|
||||||
|
])
|
||||||
|
|
||||||
|
# name of the dependency
|
||||||
|
my_module.add_depend([
|
||||||
|
'elog',
|
||||||
|
'etk',
|
||||||
|
])
|
||||||
|
|
||||||
|
my_module.add_path(".")
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
1
version.txt
Normal file
1
version.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
0.1-dev
|
Loading…
x
Reference in New Issue
Block a user