#pragma once
#include <chrono>
#include <thread>
namespace a83 {
using TimePoint = std::chrono::time_point<std::chrono::high_resolution_clock>;
//! получить std::chrono время
TimePoint getTime() { return std::chrono::high_resolution_clock::now(); }
//! перевести время в наносекунды
template<class T> float time2ns(const T& t)
{ return std::chrono::duration<float, std::nano>(t).count(); } 
//! перевести время в микросекунды
template<class T> float time2mcs(const T& t)
{ return std::chrono::duration<float, std::micro>(t).count(); } 
//! перевести время в миллисекунды
template<class T> float time2ms(const T& t)
{ return std::chrono::duration<float, std::milli>(t).count(); }
//! перевести время в секунды
template<class T> float time2sec(const T& t) {
  using sec = std::ratio<1, 1>;
	return std::chrono::duration<float, sec>(t).count();
} 
//! подождать наносекунду
void delayNs(int ns)
{ std::this_thread::sleep_for(std::chrono::nanoseconds(ns)); }
//! подождать микросекунду
void delayMcs(int mcs)
{ std::this_thread::sleep_for(std::chrono::microseconds(mcs)); }
//! подождать миллисекунду
void delayMs(int ms)
{ std::this_thread::sleep_for(std::chrono::milliseconds(ms)); }
//! подождать секунду
void delaySec(int sec)
{ std::this_thread::sleep_for(std::chrono::seconds(sec)); }
using ld_ms = std::chrono::duration<long double, std::milli>;
using ld_ns = std::chrono::duration<long double, std::nano>;
} // endn ns