Loading...
Searching...
No Matches
duration.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_DURATION_H
8#define PXR_BASE_GF_DURATION_H
9
11
12#include "pxr/pxr.h"
13#include "pxr/base/gf/api.h"
14
15#include <functional>
16#include <iosfwd>
17
18PXR_NAMESPACE_OPEN_SCOPE
19
27{
28public:
32
36 constexpr GfDuration(double duration = 0.0) noexcept : _duration(duration) {};
37
39
42
44 friend constexpr bool operator==(const GfDuration &lhs,
45 const GfDuration &rhs) noexcept
46 { return lhs._duration == rhs._duration; }
47 friend constexpr bool operator!=(const GfDuration &lhs,
48 const GfDuration &rhs) noexcept
49 { return lhs._duration != rhs._duration; }
50 friend constexpr bool operator<(const GfDuration &lhs,
51 const GfDuration &rhs) noexcept
52 { return lhs._duration < rhs._duration; }
53 friend constexpr bool operator>(const GfDuration &lhs,
54 const GfDuration &rhs) noexcept
55 { return lhs._duration > rhs._duration; }
56 friend constexpr bool operator<=(const GfDuration &lhs,
57 const GfDuration &rhs) noexcept
58 { return lhs._duration <= rhs._duration; }
59 friend constexpr bool operator>=(const GfDuration &lhs,
60 const GfDuration &rhs) noexcept
61 { return lhs._duration >= rhs._duration; }
62
65 friend constexpr
67 const double amount) noexcept
68 { return GfDuration(d._duration * amount); }
69 friend constexpr
70 GfDuration operator*(const double amount,
71 const GfDuration& d) noexcept
72 { return GfDuration(amount * d._duration); }
73 friend constexpr
74 GfDuration operator/(const GfDuration& d,
75 const double amount) noexcept
76 { return GfDuration(d._duration / amount); }
78
80 constexpr double operator/(const GfDuration &rhs) const noexcept
81 { return (_duration / rhs._duration); }
82
85 friend constexpr
87 const GfDuration& rhs) noexcept
88 { return GfDuration(lhs._duration + rhs._duration); }
89 friend constexpr
90 GfDuration operator-(const GfDuration& lhs,
91 const GfDuration& rhs) noexcept
92 { return GfDuration(lhs._duration - rhs._duration); }
93 constexpr GfDuration operator-() const noexcept
94 { return GfDuration(-_duration); }
96
98 explicit constexpr operator double() const noexcept {return _duration;}
99
102 size_t GetHash() const {
103 return std::hash<double>()(_duration);
104 }
105
107 struct Hash
108 {
109 size_t operator()(const GfDuration& ap) const {
110 return ap.GetHash();
111 }
112 };
113
114 friend size_t hash_value(const GfDuration& ap) { return ap.GetHash(); }
115
117 template <class HashState>
118 friend void TfHashAppend(HashState &h, const GfDuration& d)
119 {
120 // Delegate to TfHashAppend(HashState, double)
121 TfHashAppend(h, d._duration);
122 }
123
126
129
131 constexpr double GetValue() const noexcept {
132 return _duration;
133 }
134
136
137private:
138 friend inline void swap(GfDuration &lhs, GfDuration &rhs) {
139 std::swap(lhs._duration, rhs._duration);
140 }
141
142 double _duration;
143};
144
145
148GF_API std::ostream& operator<<(std::ostream& out, const GfDuration& duration);
149
150PXR_NAMESPACE_CLOSE_SCOPE
151
152#endif // PXR_BASE_GF_DURATION_H
Value type that represents a duration measured in time codes.
Definition duration.h:27
constexpr double GetValue() const noexcept
Return the duration value.
Definition duration.h:131
friend constexpr bool operator==(const GfDuration &lhs, const GfDuration &rhs) noexcept
Comparison operators.
Definition duration.h:44
friend constexpr GfDuration operator*(const GfDuration &d, const double amount) noexcept
Scale duration values by doubles.
Definition duration.h:66
friend constexpr GfDuration operator+(const GfDuration &lhs, const GfDuration &rhs) noexcept
Sum, difference, and negation of durations are durations.
Definition duration.h:86
size_t GetHash() const
Hash operations.
Definition duration.h:102
constexpr double operator/(const GfDuration &rhs) const noexcept
Ratio of two durations is a unitless double scale factor.
Definition duration.h:80
constexpr GfDuration(double duration=0.0) noexcept
Construct a duration with the given elapsed time.
Definition duration.h:36
friend void TfHashAppend(HashState &h, const GfDuration &d)
Enable TfHash for GfDuration.
Definition duration.h:118
GF_API std::ostream & operator<<(std::ostream &out, const GfDuration &duration)
Stream insertion operator for the string representation of this duration code.