7#ifndef PXR_USD_USD_TIME_CODE_H
8#define PXR_USD_USD_TIME_CODE_H
11#include "pxr/usd/usd/api.h"
22PXR_NAMESPACE_OPEN_SCOPE
25#define USD_TIME_CODE_TOKENS \
79 : _value(sdfTimeCode.GetValue()) {}
103 return UsdTimeCode(std::numeric_limits<double>::lowest());
114 return UsdTimeCode(std::numeric_limits<double>::quiet_NaN());
126 static constexpr double
127 SafeStep(
double maxValue=1e6,
double maxCompression=10.0) {
128 return std::numeric_limits<double>::epsilon() *
129 maxValue * maxCompression * 2.0;
140 return IsNumeric() && (_value == std::numeric_limits<double>::lowest());
146 return std::isnan(_value);
159 _IssueGetValueOnDefaultError();
168 return lhs._value == rhs._value &&
169 lhs._isPreTime == rhs._isPreTime;
174 return !(lhs == rhs);
188 return lhs._value < rhs._value ||
189 (lhs._value == rhs._value &&
190 lhs._isPreTime && !rhs._isPreTime);
207 return !(lhs <= rhs);
216 constexpr UsdTimeCode(
double t,
bool isPreTime) noexcept
217 : _value(t), _isPreTime(isPreTime) {}
220 void _IssueGetValueOnDefaultError()
const;
223 bool _isPreTime =
false;
231std::istream& operator>>(std::istream& is,
UsdTimeCode& time);
234PXR_NAMESPACE_CLOSE_SCOPE
Value type that represents a time code.
static size_t Combine(Args &&... args)
Produce a hash code by combining the hash codes of several objects.
Represent a time value, which may be either numeric, holding a double value, or a sentinel value UsdT...
friend size_t hash_value(const UsdTimeCode &time)
Hash function.
static constexpr UsdTimeCode PreTime(const SdfTimeCode &timeCode) noexcept
Produces a UsdTimeCode representing a pre-time using SdfTimeCode timeCode.
static constexpr double SafeStep(double maxValue=1e6, double maxCompression=10.0)
Produce a safe step value such that for any numeric UsdTimeCode t in [-maxValue, maxValue],...
friend bool operator<=(const UsdTimeCode &lhs, const UsdTimeCode &rhs)
Less-equal.
static constexpr UsdTimeCode EarliestTime()
Produce a UsdTimeCode representing the lowest/earliest possible timeCode.
friend bool operator==(const UsdTimeCode &lhs, const UsdTimeCode &rhs)
Equality comparison.
bool IsPreTime() const
Return true if this timeCode represents a pre-value, false otherwise.
friend bool operator>=(const UsdTimeCode &lhs, const UsdTimeCode &rhs)
Greater-equal.
static constexpr UsdTimeCode Default()
Produce a UsdTimeCode representing the sentinel value for 'default'.
friend bool operator<(const UsdTimeCode &lhs, const UsdTimeCode &rhs)
Less-than.
friend bool operator>(const UsdTimeCode &lhs, const UsdTimeCode &rhs)
Greater-than.
double GetValue() const
Return the numeric value for this time.
bool IsDefault() const
Return true if this time represents the 'default' sentinel value, false otherwise.
bool IsNumeric() const
Return true if this time represents a numeric value, false otherwise.
static constexpr UsdTimeCode PreTime(double t) noexcept
Produces a UsdTimeCode representing a pre-time at t.
constexpr UsdTimeCode(double t=0.0) noexcept
Construct with optional time value. Impilicitly convert from double.
constexpr UsdTimeCode(const SdfTimeCode &sdfTimeCode) noexcept
Construct and implicitly cast from SdfTimeCode.
bool IsEarliestTime() const
Return true if this time represents the lowest/earliest possible timeCode, false otherwise.
friend bool operator!=(const UsdTimeCode &lhs, const UsdTimeCode &rhs)
Inequality comparison.
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].
This file defines some macros that are useful for declaring and using static TfTokens.
#define TF_DECLARE_PUBLIC_TOKENS(...)
Macro to define public tokens.