Loading...
Searching...
No Matches
declare.h
Go to the documentation of this file.
1//
2// Copyright 2018 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7
8#ifndef PXR_USD_NDR_DECLARE_H
9#define PXR_USD_NDR_DECLARE_H
10
12
13#include "pxr/pxr.h"
14#include "pxr/usd/ndr/api.h"
15#include "pxr/base/tf/token.h"
16
17#include <memory>
18#include <string>
19#include <unordered_map>
20#include <unordered_set>
21#include <vector>
22
23PXR_NAMESPACE_OPEN_SCOPE
24
25class NdrNode;
26class NdrProperty;
28
32
35inline const std::string&
36NdrGetIdentifierString(const NdrIdentifier& id) { return id.GetString(); }
37typedef std::vector<NdrIdentifier> NdrIdentifierVec;
38typedef std::unordered_set<NdrIdentifier,
39 NdrIdentifierHashFunctor> NdrIdentifierSet;
40
41// Token
42typedef std::vector<TfToken> NdrTokenVec;
43typedef std::unordered_map<TfToken, std::string,
44 TfToken::HashFunctor> NdrTokenMap;
45
46// Property
48typedef NdrProperty const* NdrPropertyConstPtr;
49typedef std::unique_ptr<NdrProperty> NdrPropertyUniquePtr;
50typedef std::vector<NdrPropertyUniquePtr> NdrPropertyUniquePtrVec;
51typedef std::unordered_map<TfToken, NdrPropertyConstPtr,
52 TfToken::HashFunctor> NdrPropertyPtrMap;
53
54// Node
55typedef NdrNode* NdrNodePtr;
56typedef NdrNode const* NdrNodeConstPtr;
57typedef std::unique_ptr<NdrNode> NdrNodeUniquePtr;
58typedef std::vector<NdrNodeConstPtr> NdrNodeConstPtrVec;
59typedef std::vector<NdrNodeUniquePtr> NdrNodeUniquePtrVec;
60
61// Misc
62typedef std::vector<std::string> NdrStringVec;
63typedef std::pair<TfToken, TfToken> NdrOption;
64typedef std::vector<NdrOption> NdrOptionVec;
65typedef std::unordered_set<std::string> NdrStringSet;
66typedef std::pair<SdfValueTypeName, TfToken> NdrSdfTypeIndicator;
67
68// Version
69class NdrVersion {
70public:
72 NDR_API
73 NdrVersion() = default;
77 NDR_API
78 NdrVersion(int major, int minor = 0);
81 NDR_API
82 NdrVersion(const std::string& x);
83
86 NDR_API
87 NdrVersion GetAsDefault() const
88 {
89 return NdrVersion(*this, true);
90 }
91
93 NDR_API
94 int GetMajor() const { return _major; }
96 NDR_API
97 int GetMinor() const { return _minor; }
99 NDR_API
100 bool IsDefault() const { return _isDefault; }
101
103 NDR_API
104 std::string GetString() const;
105
107 NDR_API
108 std::string GetStringSuffix() const;
109
111 NDR_API
112 std::size_t GetHash() const
113 {
114 return (static_cast<std::size_t>(_major) << 32) +
115 static_cast<std::size_t>(_minor);
116 }
117
119 NDR_API
120 explicit operator bool() const
121 {
122 return !!*this;
123 }
124
126 NDR_API
127 bool operator!() const
128 {
129 return _major == 0 && _minor == 0;
130 }
131
133 NDR_API
134 friend bool operator==(const NdrVersion& lhs, const NdrVersion& rhs)
135 {
136 return lhs._major == rhs._major && lhs._minor == rhs._minor;
137 }
138
140 NDR_API
141 friend bool operator!=(const NdrVersion& lhs, const NdrVersion& rhs)
142 {
143 return !(lhs == rhs);
144 }
145
147 NDR_API
148 friend bool operator<(const NdrVersion& lhs, const NdrVersion& rhs)
149 {
150 return lhs._major < rhs._major ||
151 (lhs._major == rhs._major && lhs._minor < rhs._minor);
152 }
153
155 NDR_API
156 friend bool operator<=(const NdrVersion& lhs, const NdrVersion& rhs)
157 {
158 return lhs._major < rhs._major ||
159 (lhs._major == rhs._major && lhs._minor <= rhs._minor);
160 }
161
163 NDR_API
164 friend bool operator>(const NdrVersion& lhs, const NdrVersion& rhs)
165 {
166 return !(lhs <= rhs);
167 }
168
170 NDR_API
171 friend bool operator>=(const NdrVersion& lhs, const NdrVersion& rhs)
172 {
173 return !(lhs < rhs);
174 }
175
176private:
177 NdrVersion(const NdrVersion& x, bool)
178 : _major(x._major), _minor(x._minor), _isDefault(true) { }
179
180private:
181 int _major = 0, _minor = 0;
182 bool _isDefault = false;
183};
184
187 NdrVersionFilterDefaultOnly,
188 NdrVersionFilterAllVersions,
189 NdrNumVersionFilters
190};
191
192PXR_NAMESPACE_CLOSE_SCOPE
193
194#endif // PXR_USD_NDR_DECLARE_H
Represents an abstract node.
Definition: node.h:32
Represents a property (input or output) that is part of a NdrNode instance.
Definition: property.h:34
Represents a value type name, i.e.
Definition: valueTypeName.h:71
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:71
Functor to use for hash maps from tokens to other things.
Definition: token.h:149
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...
NdrVersionFilter
Enumeration used to select nodes by version.
Definition: declare.h:186