Files
botw/lib/sead/include/time/seadTickSpan.h
T
Léo Lam 18c60323a9 Switch to subrepos
git subrepo clone https://github.com/open-ead/sead lib/sead

subrepo:
  subdir:   "lib/sead"
  merged:   "1b66e825d"
upstream:
  origin:   "https://github.com/open-ead/sead"
  branch:   "master"
  commit:   "1b66e825d"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone (merge) https://github.com/open-ead/nnheaders lib/NintendoSDK

subrepo:
  subdir:   "lib/NintendoSDK"
  merged:   "9ee21399f"
upstream:
  origin:   "https://github.com/open-ead/nnheaders"
  branch:   "master"
  commit:   "9ee21399f"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone https://github.com/open-ead/agl lib/agl

subrepo:
  subdir:   "lib/agl"
  merged:   "7c063271b"
upstream:
  origin:   "https://github.com/open-ead/agl"
  branch:   "master"
  commit:   "7c063271b"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone https://github.com/open-ead/EventFlow lib/EventFlow

subrepo:
  subdir:   "lib/EventFlow"
  merged:   "c35d21b34"
upstream:
  origin:   "https://github.com/open-ead/EventFlow"
  branch:   "master"
  commit:   "c35d21b34"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"
2022-03-21 21:31:42 +01:00

121 lines
2.7 KiB
C++

#ifndef SEAD_TICKSPAN_H_
#define SEAD_TICKSPAN_H_
#include <climits>
#include <basis/seadRawPrint.h>
#include <basis/seadTypes.h>
namespace sead
{
/// A TickSpan represents a number of ticks.
class TickSpan
{
public:
TickSpan(s64 span = 0) : mSpan(span) {}
s64 toS64() const { return mSpan; }
s64 toTicks() const { return mSpan; }
s64 toNanoSeconds() const;
s64 toMicroSeconds() const { return toNanoSeconds() / 1000; }
s64 toMilliSeconds() const
{
if (u64(mSpan) + (LLONG_MAX / 1000) < u64(ULLONG_MAX / 1000) - 1)
return 1000 * mSpan / cFrequency;
return 1000 * (mSpan / cFrequency);
}
s64 toSeconds() const { return toMilliSeconds() / 1000; }
void setNanoSeconds(s64 nsec);
void setMicroSeconds(s64 usec)
{
SEAD_ASSERT(LLONG_MIN / cFrequency <= usec && usec < LLONG_MAX / cFrequency);
mSpan = usec * cFrequency / 1000 / 1000;
}
void setMilliSeconds(s64 msec)
{
SEAD_ASSERT(LLONG_MIN / cFrequency <= msec && msec < LLONG_MAX / cFrequency);
mSpan = msec * cFrequency / 1000;
}
void setSeconds(s64 sec)
{
SEAD_ASSERT(LLONG_MIN / cFrequency <= sec && sec < LLONG_MAX / cFrequency);
mSpan = sec * cFrequency;
}
const TickSpan& operator+=(TickSpan span)
{
mSpan += span.mSpan;
return *this;
}
const TickSpan& operator-=(TickSpan span)
{
mSpan -= span.mSpan;
return *this;
}
const TickSpan& operator*=(f32 x)
{
mSpan *= x;
return *this;
}
const TickSpan& operator/=(f32 x)
{
mSpan /= x;
return *this;
}
friend TickSpan operator+(TickSpan a, TickSpan b) { return a.mSpan + b.mSpan; }
friend TickSpan operator-(TickSpan a, TickSpan b) { return a.mSpan - b.mSpan; }
friend TickSpan operator*(TickSpan a, f32 x) { return a.mSpan * x; }
friend TickSpan operator*(f32 x, TickSpan a) { return a.mSpan * x; }
friend TickSpan operator/(TickSpan a, f32 x) { return a.mSpan / x; }
static TickSpan makeFromNanoSeconds(s64 nsec)
{
TickSpan span;
span.setNanoSeconds(nsec);
return span;
}
static TickSpan makeFromMicroSeconds(s64 usec)
{
TickSpan span;
span.setMicroSeconds(usec);
return span;
}
static TickSpan makeFromMilliSeconds(s64 msec)
{
TickSpan span;
span.setMilliSeconds(msec);
return span;
}
static TickSpan makeFromSeconds(s64 sec)
{
TickSpan span;
span.setSeconds(sec);
return span;
}
private:
s64 mSpan;
/// Number of ticks per second. This is platform specific.
static const s64 cFrequency;
};
} // namespace sead
#endif // SEAD_TICKSPAN_H_