Loading...
Searching...
No Matches
timeCode.h
Go to the documentation of this file.
1//
2// Copyright 2026 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_BASE_GF_TIME_CODE_H
8#define PXR_BASE_GF_TIME_CODE_H
9
11
12#include "pxr/pxr.h"
13#include "pxr/base/gf/api.h"
14
15#include <algorithm>
16#include <functional>
17#include <iosfwd>
18
19PXR_NAMESPACE_OPEN_SCOPE
20
28{
29public:
33
37 constexpr GfTimeCode(double time = 0.0) noexcept : _time(time) {};
38
40
43
44 constexpr bool operator==(const GfTimeCode &rhs) const noexcept
45 { return _time == rhs._time; }
46 constexpr bool operator!=(const GfTimeCode &rhs) const noexcept
47 { return _time != rhs._time; }
48 constexpr bool operator<(const GfTimeCode &rhs) const noexcept
49 { return _time < rhs._time; }
50 constexpr bool operator>(const GfTimeCode &rhs) const noexcept
51 { return _time > rhs._time; }
52 constexpr bool operator<=(const GfTimeCode &rhs) const noexcept
53 { return _time <= rhs._time; }
54 constexpr bool operator>=(const GfTimeCode &rhs) const noexcept
55 { return _time >= rhs._time; }
56
57 constexpr GfTimeCode operator*(const GfTimeCode &rhs) const noexcept
58 { return GfTimeCode(_time * rhs._time); }
59 constexpr GfTimeCode operator/(const GfTimeCode &rhs) const noexcept
60 { return GfTimeCode(_time / rhs._time); }
61 constexpr GfTimeCode operator+(const GfTimeCode &rhs) const noexcept
62 { return GfTimeCode(_time + rhs._time); }
63 constexpr GfTimeCode operator-(const GfTimeCode &rhs) const noexcept
64 { return GfTimeCode(_time - rhs._time); }
65 constexpr GfTimeCode operator-() const noexcept
66 { return GfTimeCode(-_time); }
67
69 explicit constexpr operator double() const noexcept {return _time;}
70
72 size_t GetHash() const {
73 return std::hash<double>()(_time);
74 }
75
77 struct Hash
78 {
79 size_t operator()(const GfTimeCode &ap) const {
80 return ap.GetHash();
81 }
82 };
83
84 friend size_t hash_value(const GfTimeCode &ap) { return ap.GetHash(); }
85
87
90
92 constexpr double GetValue() const noexcept {
93 return _time;
94 }
95
97
98private:
99 friend inline void swap(GfTimeCode &lhs, GfTimeCode &rhs) {
100 std::swap(lhs._time, rhs._time);
101 }
102
103 double _time;
104};
105
110
111inline constexpr
112GfTimeCode operator*(double time, const GfTimeCode &timeCode) noexcept
113 { return GfTimeCode(time) * timeCode; }
114
115inline constexpr
116GfTimeCode operator/(double time, const GfTimeCode &timeCode) noexcept
117 { return GfTimeCode(time) / timeCode; }
118
119inline constexpr
120GfTimeCode operator+(double time, const GfTimeCode &timeCode) noexcept
121 { return GfTimeCode(time) + timeCode; }
122
123inline constexpr
124GfTimeCode operator-(double time, const GfTimeCode &timeCode) noexcept
125 { return GfTimeCode(time) - timeCode; }
126
127inline constexpr
128bool operator==(double time, const GfTimeCode &timeCode) noexcept
129 { return GfTimeCode(time) == timeCode; }
130
131inline constexpr
132bool operator!=(double time, const GfTimeCode &timeCode) noexcept
133 { return GfTimeCode(time) != timeCode; }
134
135inline constexpr
136bool operator<(double time, const GfTimeCode &timeCode) noexcept
137 { return GfTimeCode(time) < timeCode; }
138
139inline constexpr
140bool operator>(double time, const GfTimeCode &timeCode) noexcept
141 { return GfTimeCode(time) > timeCode; }
142
143inline constexpr
144bool operator<=(double time, const GfTimeCode &timeCode) noexcept
145 { return GfTimeCode(time) <= timeCode; }
146
147inline constexpr
148bool operator>=(double time, const GfTimeCode &timeCode) noexcept
149 { return GfTimeCode(time) >= timeCode; }
150
153GF_API std::ostream& operator<<(std::ostream& out, const GfTimeCode& ap);
154
156
157PXR_NAMESPACE_CLOSE_SCOPE
158
159#endif // PXR_BASE_GF_TIME_CODE_H
GF_API std::ostream & operator<<(std::ostream &out, const GfTimeCode &ap)
Stream insertion operator for the string representation of this time code.
Value type that represents a time code.
Definition timeCode.h:28
constexpr double GetValue() const noexcept
Return the time value.
Definition timeCode.h:92
size_t GetHash() const
Hash function.
Definition timeCode.h:72
constexpr GfTimeCode(double time=0.0) noexcept
Construct a time code with the given time.
Definition timeCode.h:37