Loading...
Searching...
No Matches
timeCode.h
Go to the documentation of this file.
1//
2// Copyright 2019 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7#ifndef PXR_USD_SDF_TIME_CODE_H
8#define PXR_USD_SDF_TIME_CODE_H
9
11
12#include "pxr/pxr.h"
13#include "pxr/usd/sdf/api.h"
14#include "pxr/base/vt/traits.h"
15
16#include <algorithm>
17#include <functional>
18#include <iosfwd>
19
20PXR_NAMESPACE_OPEN_SCOPE
21
29{
30public:
34
38 constexpr SdfTimeCode(double time = 0.0) noexcept : _time(time) {};
39
41
44
45 constexpr bool operator==(const SdfTimeCode &rhs) const noexcept
46 { return _time == rhs._time; }
47 constexpr bool operator!=(const SdfTimeCode &rhs) const noexcept
48 { return _time != rhs._time; }
49 constexpr bool operator<(const SdfTimeCode &rhs) const noexcept
50 { return _time < rhs._time; }
51 constexpr bool operator>(const SdfTimeCode &rhs) const noexcept
52 { return _time > rhs._time; }
53 constexpr bool operator<=(const SdfTimeCode &rhs) const noexcept
54 { return _time <= rhs._time; }
55 constexpr bool operator>=(const SdfTimeCode &rhs) const noexcept
56 { return _time >= rhs._time; }
57
58 constexpr SdfTimeCode operator*(const SdfTimeCode &rhs) const noexcept
59 { return SdfTimeCode(_time * rhs._time); }
60 constexpr SdfTimeCode operator/(const SdfTimeCode &rhs) const noexcept
61 { return SdfTimeCode(_time / rhs._time); }
62 constexpr SdfTimeCode operator+(const SdfTimeCode &rhs) const noexcept
63 { return SdfTimeCode(_time + rhs._time); }
64 constexpr SdfTimeCode operator-(const SdfTimeCode &rhs) const noexcept
65 { return SdfTimeCode(_time - rhs._time); }
66
68 explicit constexpr operator double() const noexcept {return _time;}
69
71 size_t GetHash() const {
72 return std::hash<double>()(_time);
73 }
74
76 struct Hash
77 {
78 size_t operator()(const SdfTimeCode &ap) const {
79 return ap.GetHash();
80 }
81 };
82
83 friend size_t hash_value(const SdfTimeCode &ap) { return ap.GetHash(); }
84
86
89
91 constexpr double GetValue() const noexcept {
92 return _time;
93 }
94
96
97private:
98 friend inline void swap(SdfTimeCode &lhs, SdfTimeCode &rhs) {
99 std::swap(lhs._time, rhs._time);
100 }
101
102 double _time;
103};
104
105// SdfTimeCode supports value transformations.
107
111
112inline constexpr
113SdfTimeCode operator*(double time, const SdfTimeCode &timeCode) noexcept
114 { return SdfTimeCode(time) * timeCode; }
115
116inline constexpr
117SdfTimeCode operator/(double time, const SdfTimeCode &timeCode) noexcept
118 { return SdfTimeCode(time) / timeCode; }
119
120inline constexpr
121SdfTimeCode operator+(double time, const SdfTimeCode &timeCode) noexcept
122 { return SdfTimeCode(time) + timeCode; }
123
124inline constexpr
125SdfTimeCode operator-(double time, const SdfTimeCode &timeCode) noexcept
126 { return SdfTimeCode(time) - timeCode; }
127
128inline constexpr
129bool operator==(double time, const SdfTimeCode &timeCode) noexcept
130 { return SdfTimeCode(time) == timeCode; }
131
132inline constexpr
133bool operator!=(double time, const SdfTimeCode &timeCode) noexcept
134 { return SdfTimeCode(time) != timeCode; }
135
136inline constexpr
137bool operator<(double time, const SdfTimeCode &timeCode) noexcept
138 { return SdfTimeCode(time) < timeCode; }
139
140inline constexpr
141bool operator>(double time, const SdfTimeCode &timeCode) noexcept
142 { return SdfTimeCode(time) > timeCode; }
143
144inline constexpr
145bool operator<=(double time, const SdfTimeCode &timeCode) noexcept
146 { return SdfTimeCode(time) <= timeCode; }
147
148inline constexpr
149bool operator>=(double time, const SdfTimeCode &timeCode) noexcept
150 { return SdfTimeCode(time) >= timeCode; }
151
153SDF_API std::ostream& operator<<(std::ostream& out, const SdfTimeCode& ap);
154
156
157PXR_NAMESPACE_CLOSE_SCOPE
158
159#endif // PXR_USD_SDF_TIME_CODE_H
#define VT_VALUE_TYPE_CAN_TRANSFORM(T)
A helper for specializing the above trait.
Definition: traits.h:150
Value type that represents a time code.
Definition: timeCode.h:29
constexpr double GetValue() const noexcept
Return the time value.
Definition: timeCode.h:91
constexpr SdfTimeCode(double time=0.0) noexcept
Construct a time code with the given time.
Definition: timeCode.h:38
size_t GetHash() const
Hash function.
Definition: timeCode.h:71
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].