2016-03-25 13:28:07 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
#include "Library/Chrono/Timestamp.hpp"
|
|
|
|
#include "Library/Chrono/Timer.hpp"
|
2021-08-18 20:37:33 +02:00
|
|
|
#include "Library/Chrono/Time.hpp"
|
2016-06-04 21:33:34 +02:00
|
|
|
#include "Library/Chrono/Date.hpp"
|
2021-08-18 20:37:33 +02:00
|
|
|
#include "Library/Chrono/Datetime.hpp"
|
2016-03-25 13:28:07 +01:00
|
|
|
|
2021-08-18 20:37:33 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
#include <chrono>
|
|
|
|
|
2016-03-25 13:28:07 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
namespace SqMod {
|
|
|
|
|
2016-11-15 20:20:33 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
SQMOD_DECL_TYPENAME(Typename, _SC("SqTimestamp"))
|
2016-11-15 20:20:33 +01:00
|
|
|
|
2016-03-25 13:28:07 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
int32_t Timestamp::Cmp(const Timestamp & o) const
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
|
|
|
if (m_Timestamp == o.m_Timestamp)
|
2016-06-04 21:33:34 +02:00
|
|
|
{
|
2016-03-25 13:28:07 +01:00
|
|
|
return 0;
|
2016-06-04 21:33:34 +02:00
|
|
|
}
|
2016-03-25 13:28:07 +01:00
|
|
|
else if (m_Timestamp > o.m_Timestamp)
|
2016-06-04 21:33:34 +02:00
|
|
|
{
|
2016-03-25 13:28:07 +01:00
|
|
|
return 1;
|
2016-06-04 21:33:34 +02:00
|
|
|
}
|
2016-03-25 13:28:07 +01:00
|
|
|
else
|
2016-06-04 21:33:34 +02:00
|
|
|
{
|
2016-03-25 13:28:07 +01:00
|
|
|
return -1;
|
2016-06-04 21:33:34 +02:00
|
|
|
}
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
String Timestamp::ToString() const
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return fmt::format("{}", m_Timestamp);
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
void Timestamp::SetNow()
|
|
|
|
{
|
2016-06-04 18:17:42 +02:00
|
|
|
m_Timestamp = Chrono::GetCurrentSysTime();
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-09-10 20:27:28 +02:00
|
|
|
SQInteger Timestamp::GetMicroseconds() const
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-09-10 20:27:28 +02:00
|
|
|
return m_Timestamp;
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-09-10 20:27:28 +02:00
|
|
|
void Timestamp::SetMicroseconds(SQInteger amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-09-10 20:27:28 +02:00
|
|
|
m_Timestamp = amount;
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
2021-08-18 20:37:33 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-09-10 20:27:28 +02:00
|
|
|
Timestamp & Timestamp::AddMicroseconds(SQInteger amount) { m_Timestamp += amount; return *this; }
|
|
|
|
Timestamp & Timestamp::SubMicroseconds(SQInteger amount) { m_Timestamp -= amount; return *this; }
|
2021-08-18 20:37:33 +02:00
|
|
|
|
2016-03-25 13:28:07 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-09-10 20:27:28 +02:00
|
|
|
SQInteger Timestamp::GetMilliseconds() const
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-09-10 20:27:28 +02:00
|
|
|
return m_Timestamp / 1000L;
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-09-10 20:27:28 +02:00
|
|
|
void Timestamp::SetMilliseconds(SQInteger amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-09-10 20:27:28 +02:00
|
|
|
m_Timestamp = (amount * 1000L);
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
2021-08-18 20:37:33 +02:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-09-10 20:27:28 +02:00
|
|
|
Timestamp & Timestamp::AddMilliseconds(SQInteger amount) { m_Timestamp += (amount * 1000L); return *this; }
|
|
|
|
Timestamp & Timestamp::SubMilliseconds(SQInteger amount) { m_Timestamp -= (amount * 1000L); return *this; }
|
2021-08-18 20:37:33 +02:00
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Time Timestamp::GetTime() const
|
|
|
|
{
|
|
|
|
return Time(m_Timestamp);
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
void Timestamp::SetTime(const Time & t)
|
|
|
|
{
|
|
|
|
SetHoursI(t.GetHour());
|
|
|
|
AddMinutesI(t.GetMinute());
|
|
|
|
AddSecondsI(t.GetSecond());
|
|
|
|
AddMillisecondsRaw(t.GetMillisecond());
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Timestamp & Timestamp::AddTime(const Time & t)
|
|
|
|
{
|
|
|
|
AddHoursI(t.GetHour());
|
|
|
|
AddMinutesI(t.GetMinute());
|
|
|
|
AddSecondsI(t.GetSecond());
|
|
|
|
AddMillisecondsRaw(t.GetMillisecond());
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Timestamp & Timestamp::SubTime(const Time & t)
|
|
|
|
{
|
|
|
|
SubMillisecondsRaw(t.GetMillisecond());
|
|
|
|
SubSecondsI(t.GetSecond());
|
|
|
|
SubMinutesI(t.GetMinute());
|
|
|
|
SubHoursI(t.GetHour());
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Date Timestamp::GetDate() const
|
|
|
|
{
|
|
|
|
return Date(m_Timestamp);
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
void Timestamp::SetDate(const Date & d)
|
|
|
|
{
|
|
|
|
SetYearsI(d.GetYear());
|
|
|
|
AddDaysF(d.GetMonth() * 30.4167);
|
|
|
|
AddDaysI(d.GetDay());
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Timestamp & Timestamp::AddDate(const Date & d)
|
|
|
|
{
|
|
|
|
AddYearsI(d.GetYear());
|
|
|
|
AddDaysF(d.GetMonth() * 30.4167);
|
|
|
|
AddDaysI(d.GetDay());
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Timestamp & Timestamp::SubDate(const Date & d)
|
|
|
|
{
|
|
|
|
SubDaysI(d.GetDay());
|
|
|
|
SubDaysF(d.GetMonth() * 30.4167);
|
|
|
|
SubYearsI(d.GetYear());
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Datetime Timestamp::GetDatetime() const
|
|
|
|
{
|
|
|
|
return Datetime(m_Timestamp);
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
void Timestamp::SetDatetime(const Datetime & dt)
|
|
|
|
{
|
|
|
|
SetYearsI(dt.GetYear());
|
|
|
|
AddDaysF(dt.GetMonth() * 30.4167);
|
|
|
|
AddDaysI(dt.GetDay());
|
|
|
|
AddHoursI(dt.GetHour());
|
|
|
|
AddMinutesI(dt.GetMinute());
|
|
|
|
AddSecondsI(dt.GetSecond());
|
|
|
|
AddMillisecondsRaw(dt.GetMillisecond());
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Timestamp & Timestamp::AddDatetime(const Datetime & dt)
|
|
|
|
{
|
|
|
|
AddYearsI(dt.GetYear());
|
|
|
|
AddDaysF(dt.GetMonth() * 30.4167);
|
|
|
|
AddDaysI(dt.GetDay());
|
|
|
|
AddHoursI(dt.GetHour());
|
|
|
|
AddMinutesI(dt.GetMinute());
|
|
|
|
AddSecondsI(dt.GetSecond());
|
|
|
|
AddMillisecondsRaw(dt.GetMillisecond());
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
Timestamp & Timestamp::SubDatetime(const Datetime & dt)
|
|
|
|
{
|
|
|
|
SubMillisecondsRaw(dt.GetMillisecond());
|
|
|
|
SubSecondsI(dt.GetSecond());
|
|
|
|
SubMinutesI(dt.GetMinute());
|
|
|
|
SubHoursI(dt.GetHour());
|
|
|
|
SubDaysI(dt.GetDay());
|
|
|
|
SubDaysF(dt.GetMonth() * 30.4167);
|
|
|
|
SubYearsI(dt.GetYear());
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
std::time_t Timestamp::ToTimeT() const
|
|
|
|
{
|
|
|
|
return std::chrono::system_clock::to_time_t(std::chrono::time_point< std::chrono::system_clock >{std::chrono::microseconds{m_Timestamp}});
|
|
|
|
}
|
|
|
|
|
2016-03-25 13:28:07 +01:00
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
static Timestamp SqGetEpochTimeNow()
|
|
|
|
{
|
2016-06-04 18:17:42 +02:00
|
|
|
return Timestamp(Chrono::GetEpochTimeMicro());
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
static Timestamp SqGetMicrosecondsRaw(int64_t amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return Timestamp(amount);
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-09-10 20:27:28 +02:00
|
|
|
static Timestamp SqGetMicroseconds(SQInteger amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return Timestamp(amount);
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
static Timestamp SqGetMilliseconds(SQInteger amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return Timestamp(int64_t(int64_t(amount) * 1000L));
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
static Timestamp SqGetSeconds(SQFloat amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return Timestamp(int64_t(double(amount) * 1000000L));
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
static Timestamp SqGetMinutes(SQFloat amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return Timestamp(int64_t((double(amount) * 60000000L)));
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
static Timestamp SqGetHours(SQFloat amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return Timestamp(int64_t(double(amount) * 3600000000LL));
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
static Timestamp SqGetDays(SQFloat amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return Timestamp(int64_t(double(amount) * 86400000000LL));
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
2021-01-30 07:51:39 +01:00
|
|
|
static Timestamp SqGetYears(SQFloat amount)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2021-01-30 07:51:39 +01:00
|
|
|
return Timestamp(int64_t(double(amount) * 31557600000000LL));
|
2016-03-25 13:28:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// ================================================================================================
|
2016-03-26 17:18:41 +01:00
|
|
|
void Register_ChronoTimestamp(HSQUIRRELVM vm, Table & /*cns*/)
|
2016-03-25 13:28:07 +01:00
|
|
|
{
|
2016-11-15 20:55:03 +01:00
|
|
|
RootTable(vm).Bind(Typename::Str,
|
|
|
|
Class< Timestamp >(vm, Typename::Str)
|
2016-03-25 13:28:07 +01:00
|
|
|
// Constructors
|
|
|
|
.Ctor()
|
|
|
|
.Ctor< const Timestamp & >()
|
2016-06-03 20:26:19 +02:00
|
|
|
// Core Meta-methods
|
2016-11-15 20:20:33 +01:00
|
|
|
.SquirrelFunc(_SC("_typename"), &Typename::Fn)
|
2016-03-25 13:28:07 +01:00
|
|
|
.Func(_SC("_tostring"), &Timestamp::ToString)
|
2016-11-15 20:48:23 +01:00
|
|
|
.Func(_SC("cmp"), &Timestamp::Cmp)
|
2016-06-03 20:26:19 +02:00
|
|
|
// Meta-methods
|
2016-03-25 13:28:07 +01:00
|
|
|
.Func< Timestamp (Timestamp::*)(const Timestamp &) const >(_SC("_add"), &Timestamp::operator +)
|
|
|
|
.Func< Timestamp (Timestamp::*)(const Timestamp &) const >(_SC("_sub"), &Timestamp::operator -)
|
|
|
|
.Func< Timestamp (Timestamp::*)(const Timestamp &) const >(_SC("_mul"), &Timestamp::operator *)
|
|
|
|
.Func< Timestamp (Timestamp::*)(const Timestamp &) const >(_SC("_div"), &Timestamp::operator /)
|
|
|
|
// Properties
|
|
|
|
.Prop(_SC("Microseconds"), &Timestamp::GetMicroseconds, &Timestamp::SetMicroseconds)
|
|
|
|
.Prop(_SC("MicrosecondsRaw"), &Timestamp::GetMicrosecondsRaw, &Timestamp::SetMicrosecondsRaw)
|
|
|
|
.Prop(_SC("Milliseconds"), &Timestamp::GetMilliseconds, &Timestamp::SetMilliseconds)
|
|
|
|
.Prop(_SC("MillisecondsRaw"), &Timestamp::GetMillisecondsRaw, &Timestamp::SetMillisecondsRaw)
|
|
|
|
.Prop(_SC("SecondsF"), &Timestamp::GetSecondsF, &Timestamp::SetSecondsF)
|
|
|
|
.Prop(_SC("SecondsI"), &Timestamp::GetSecondsI, &Timestamp::SetSecondsI)
|
|
|
|
.Prop(_SC("MinutesF"), &Timestamp::GetMinutesF, &Timestamp::SetMinutesF)
|
|
|
|
.Prop(_SC("MinutesI"), &Timestamp::GetMinutesI, &Timestamp::SetMinutesI)
|
|
|
|
.Prop(_SC("HoursF"), &Timestamp::GetHoursF, &Timestamp::SetHoursF)
|
|
|
|
.Prop(_SC("HoursI"), &Timestamp::GetHoursI, &Timestamp::SetHoursI)
|
|
|
|
.Prop(_SC("DaysF"), &Timestamp::GetDaysF, &Timestamp::SetDaysF)
|
|
|
|
.Prop(_SC("DaysI"), &Timestamp::GetDaysI, &Timestamp::SetDaysI)
|
|
|
|
.Prop(_SC("YearsF"), &Timestamp::GetYearsF, &Timestamp::SetYearsF)
|
|
|
|
.Prop(_SC("YearsI"), &Timestamp::GetYearsI, &Timestamp::SetYearsI)
|
2021-08-18 20:37:33 +02:00
|
|
|
.Prop(_SC("Time"), &Timestamp::GetTime, &Timestamp::SetTime)
|
|
|
|
.Prop(_SC("Date"), &Timestamp::GetDate, &Timestamp::SetDate)
|
|
|
|
.Prop(_SC("Datetime"), &Timestamp::GetDatetime, &Timestamp::SetDatetime)
|
2016-03-25 13:28:07 +01:00
|
|
|
// Member Methods
|
|
|
|
.Func(_SC("SetNow"), &Timestamp::SetNow)
|
2021-08-18 20:37:33 +02:00
|
|
|
// Properties
|
|
|
|
.Func(_SC("AddMicroseconds"), &Timestamp::AddMicroseconds)
|
|
|
|
.Func(_SC("SubMicroseconds"), &Timestamp::SubMicroseconds)
|
|
|
|
.Func(_SC("AddMicrosecondsRaw"), &Timestamp::AddMicrosecondsRaw)
|
|
|
|
.Func(_SC("SubMicrosecondsRaw"), &Timestamp::SubMicrosecondsRaw)
|
|
|
|
.Func(_SC("AddMilliseconds"), &Timestamp::AddMilliseconds)
|
|
|
|
.Func(_SC("SubMilliseconds"), &Timestamp::SubMilliseconds)
|
|
|
|
.Func(_SC("AddMillisecondsRaw"), &Timestamp::AddMillisecondsRaw)
|
|
|
|
.Func(_SC("SubMillisecondsRaw"), &Timestamp::SubMillisecondsRaw)
|
|
|
|
.Func(_SC("AddSecondsF"), &Timestamp::AddSecondsF)
|
|
|
|
.Func(_SC("SubSecondsF"), &Timestamp::SubSecondsF)
|
|
|
|
.Func(_SC("AddSecondsI"), &Timestamp::AddSecondsI)
|
|
|
|
.Func(_SC("SubSecondsI"), &Timestamp::SubSecondsI)
|
|
|
|
.Func(_SC("AddMinutesF"), &Timestamp::AddMinutesF)
|
|
|
|
.Func(_SC("SubMinutesF"), &Timestamp::SubMinutesF)
|
|
|
|
.Func(_SC("AddMinutesI"), &Timestamp::AddMinutesI)
|
|
|
|
.Func(_SC("SubMinutesI"), &Timestamp::SubMinutesI)
|
|
|
|
.Func(_SC("AddHoursF"), &Timestamp::AddHoursF)
|
|
|
|
.Func(_SC("SubHoursF"), &Timestamp::SubHoursF)
|
|
|
|
.Func(_SC("AddHoursI"), &Timestamp::AddHoursI)
|
|
|
|
.Func(_SC("SubHoursI"), &Timestamp::SubHoursI)
|
|
|
|
.Func(_SC("AddDaysF"), &Timestamp::AddDaysF)
|
|
|
|
.Func(_SC("SubDaysF"), &Timestamp::SubDaysF)
|
|
|
|
.Func(_SC("AddDaysI"), &Timestamp::AddDaysI)
|
|
|
|
.Func(_SC("SubDaysI"), &Timestamp::SubDaysI)
|
|
|
|
.Func(_SC("AddYearsF"), &Timestamp::AddYearsF)
|
|
|
|
.Func(_SC("SubYearsF"), &Timestamp::SubYearsF)
|
|
|
|
.Func(_SC("AddYearsI"), &Timestamp::AddYearsI)
|
|
|
|
.Func(_SC("SubYearsI"), &Timestamp::SubYearsI)
|
|
|
|
.Func(_SC("AddTime"), &Timestamp::AddTime)
|
|
|
|
.Func(_SC("SubTime"), &Timestamp::SubTime)
|
|
|
|
.Func(_SC("AddDate"), &Timestamp::AddDate)
|
|
|
|
.Func(_SC("SubDate"), &Timestamp::SubDate)
|
|
|
|
.Func(_SC("AddDatetime"), &Timestamp::AddDatetime)
|
|
|
|
.Func(_SC("SubDatetime"), &Timestamp::SubDatetime)
|
2016-03-25 13:28:07 +01:00
|
|
|
// Static Functions
|
|
|
|
.StaticFunc(_SC("GetNow"), &SqGetEpochTimeNow)
|
|
|
|
.StaticFunc(_SC("GetMicrosRaw"), &SqGetMicrosecondsRaw)
|
|
|
|
.StaticFunc(_SC("GetMicrosecondsRaw"), &SqGetMicrosecondsRaw)
|
|
|
|
.StaticFunc(_SC("GetMicros"), &SqGetMicroseconds)
|
|
|
|
.StaticFunc(_SC("GetMicroseconds"), &SqGetMicroseconds)
|
|
|
|
.StaticFunc(_SC("GetMillis"), &SqGetMilliseconds)
|
|
|
|
.StaticFunc(_SC("GetMilliseconds"), &SqGetMilliseconds)
|
|
|
|
.StaticFunc(_SC("GetSeconds"), &SqGetSeconds)
|
|
|
|
.StaticFunc(_SC("GetMinutes"), &SqGetMinutes)
|
|
|
|
.StaticFunc(_SC("GetHours"), &SqGetHours)
|
|
|
|
.StaticFunc(_SC("GetDays"), &SqGetDays)
|
|
|
|
.StaticFunc(_SC("GetYears"), &SqGetYears)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
} // Namespace:: SqMod
|