Loading...
Searching...
No Matches
schema.h
1//
2// Copyright 2016 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_SCHEMA_H
8#define PXR_USD_SDF_SCHEMA_H
9
10#include "pxr/pxr.h"
11#include "pxr/usd/sdf/api.h"
12#include "pxr/usd/sdf/allowed.h"
13#include "pxr/usd/sdf/types.h"
14#include "pxr/usd/sdf/valueTypeName.h"
15
16#include "pxr/base/plug/notice.h"
17#include "pxr/base/tf/hash.h"
18#include "pxr/base/tf/hashmap.h"
21#include "pxr/base/tf/token.h"
22#include "pxr/base/tf/type.h"
24#include "pxr/base/vt/value.h"
25
26#include <memory>
27#include <string>
28#include <vector>
29
30PXR_NAMESPACE_OPEN_SCOPE
31
32class JsValue;
33class SdfPath;
34class SdfPayload;
35class SdfReference;
36class Sdf_ValueTypeRegistry;
37class VtValueRef;
38
40
46class SdfSchemaBase : public TfWeakBase {
47 SdfSchemaBase(const SdfSchemaBase&) = delete;
48 SdfSchemaBase& operator=(const SdfSchemaBase&) = delete;
49protected:
50 class _SpecDefiner;
51
52public:
58 public:
60 const SdfSchemaBase& schema,
61 const TfToken& name,
62 const VtValue& fallbackValue);
63
64 typedef std::vector< std::pair<TfToken, JsValue> > InfoVec;
65
66 SDF_API const TfToken& GetName() const;
67 SDF_API const VtValue& GetFallbackValue() const;
68 SDF_API const InfoVec& GetInfo() const;
69
70 SDF_API bool IsPlugin() const;
71 SDF_API bool IsReadOnly() const;
72 SDF_API bool HoldsChildren() const;
73
77
78 SDF_API SdfAllowed IsValidValue(const VtValueRef& value) const;
79 SDF_API SdfAllowed IsValidListValue(const VtValueRef& value) const;
80 SDF_API SdfAllowed IsValidMapKey(const VtValueRef& value) const;
81 SDF_API SdfAllowed IsValidMapValue(const VtValueRef& value) const;
82
84
87
89
90 FieldDefinition& Plugin();
91 FieldDefinition& Children();
92 FieldDefinition& ReadOnly();
93 FieldDefinition& AddInfo(const TfToken& tok, const JsValue& val);
94
95 using Validator =
96 SdfAllowed (*) (const SdfSchemaBase&, const VtValueRef&);
97 FieldDefinition& ValueValidator(Validator v);
98 FieldDefinition& ListValueValidator(Validator v);
99 FieldDefinition& MapKeyValidator(Validator v);
100 FieldDefinition& MapValueValidator(Validator v);
101
103
104 private:
105 const SdfSchemaBase& _schema;
106 TfToken _name;
107 VtValue _fallbackValue;
108 InfoVec _info;
109
110 bool _isPlugin;
111 bool _isReadOnly;
112 bool _holdsChildren;
113
114 Validator _valueValidator;
115 Validator _listValueValidator;
116 Validator _mapKeyValidator;
117 Validator _mapValueValidator;
118 };
119
120 // Structure containing information about a field as it pertains to the
121 // spec this object defines.
122 struct _FieldInfo {
123 _FieldInfo(): required(false), metadata(false) { }
124 bool required;
125 bool metadata;
126 TfToken metadataDisplayGroup;
127 };
128
129 class SpecDefinition;
130
136 public:
138 SDF_API TfTokenVector GetFields() const;
139
142 return _requiredFields;
143 }
144
147
149 SDF_API bool IsValidField(const TfToken& name) const;
150
152 SDF_API bool IsMetadataField(const TfToken& name) const;
153
157 SDF_API
159
161 SDF_API bool IsRequiredField(const TfToken& name) const;
162
163
164 private:
165 typedef TfHashMap<TfToken, _FieldInfo, TfToken::HashFunctor>
166 _FieldMap;
167 _FieldMap _fields;
168
169 // A separate vector of required field names from _fields. Access to
170 // these is in a hot path, so we cache them separately.
171 TfTokenVector _requiredFields;
172
173 private:
174 friend class _SpecDefiner;
175 void _AddField(const TfToken& name, const _FieldInfo& fieldInfo);
176 };
177
180 SDF_API
181 const FieldDefinition* GetFieldDefinition(const TfToken &fieldKey) const;
182
185 inline const SpecDefinition* GetSpecDefinition(SdfSpecType specType) const {
186 #ifdef PXR_PREFER_SAFETY_OVER_SPEED
187 if (ARCH_UNLIKELY(specType < SdfSpecTypeUnknown ||
188 specType >= SdfNumSpecTypes))
189 {
190 return _IssueErrorForInvalidSpecType(specType);
191 }
192 #endif // PXR_PREFER_SAFETY_OVER_SPEED
193
194 return _specDefinitions[specType].second ?
195 &_specDefinitions[specType].first : nullptr;
196 }
197
200
203 SDF_API
204 bool IsRegistered(const TfToken &fieldKey, VtValue *fallback=NULL) const;
205
208 SDF_API
209 bool HoldsChildren(const TfToken &fieldKey) const;
210
213 SDF_API
214 const VtValue& GetFallback(const TfToken &fieldKey) const;
215
217 SDF_API
218 VtValue CastToTypeOf(const TfToken &fieldKey, const VtValue &value) const;
219
221 SDF_API
222 bool IsValidFieldForSpec(const TfToken &fieldKey, SdfSpecType specType) const;
223
225 SDF_API TfTokenVector GetFields(SdfSpecType specType) const;
226
229
233 SDF_API
235 TfToken const &metadataField) const;
236
238 SDF_API const TfTokenVector &GetRequiredFields(SdfSpecType specType) const;
239
244 inline bool IsRequiredFieldName(const TfToken &fieldName) const {
245 for (TfToken const &fname: _requiredFieldNames) {
246 if (fname == fieldName) {
247 return true;
248 }
249 }
250 return false;
251 }
252
254
259
260 SDF_API
262 SDF_API
263 static SdfAllowed IsValidIdentifier(const std::string& name);
264 SDF_API
265 static SdfAllowed IsValidNamespacedIdentifier(const std::string& name);
266 SDF_API
267 static SdfAllowed IsValidInheritPath(const SdfPath& path);
268 SDF_API
269 static SdfAllowed IsValidPayload(const SdfPayload& payload);
270 SDF_API
271 static SdfAllowed IsValidReference(const SdfReference& ref);
272 SDF_API
273 static SdfAllowed IsValidRelationshipTargetPath(const SdfPath& path);
274 SDF_API
275 static SdfAllowed IsValidRelocatesSourcePath(const SdfPath& path);
276 SDF_API
277 static SdfAllowed IsValidRelocatesTargetPath(const SdfPath& path);
278 SDF_API
279 static SdfAllowed IsValidRelocate(const SdfRelocate& relocate);
280 SDF_API
281 static SdfAllowed IsValidSpecializesPath(const SdfPath& path);
282 SDF_API
283 static SdfAllowed IsValidSubLayer(const std::string& sublayer);
284 SDF_API
285 static SdfAllowed IsValidVariantIdentifier(const std::string& name);
286 SDF_API
287 static SdfAllowed IsValidVariantSelection(const std::string& sel);
288
290
293
299 SDF_API
300 SdfAllowed IsValidValue(const VtValue& value) const;
301
303 SDF_API
304 std::vector<SdfValueTypeName> GetAllTypes() const;
305
307 SDF_API
308 SdfValueTypeName FindType(const TfToken& typeName) const;
310 SDF_API
311 SdfValueTypeName FindType(const char *typeName) const;
313 SDF_API
314 SdfValueTypeName FindType(std::string const &typeName) const;
315
317 SDF_API
319 const TfToken& role = TfToken()) const;
320
322 SDF_API
324 const TfToken& role = TfToken()) const;
325
329 SDF_API
331
333
334protected:
340 public:
343
345 const TfToken& name, bool required = false);
346 _SpecDefiner& MetadataField(
347 const TfToken& name, bool required = false);
348 _SpecDefiner& MetadataField(
349 const TfToken& name, const TfToken& displayGroup,
350 bool required = false);
351
352 _SpecDefiner &CopyFrom(const SpecDefinition &other);
353
355 private:
356 friend class SdfSchemaBase;
357 explicit _SpecDefiner(SdfSchemaBase *schema, SpecDefinition *definition)
358 : _schema(schema)
359 , _definition(definition)
360 {}
361 SdfSchemaBase *_schema;
362 SpecDefinition *_definition;
363 };
364
367 public:
368 explicit _ValueTypeRegistrar(Sdf_ValueTypeRegistry*);
369
370 class Type
371 {
372 public:
373 ~Type();
374
375 // Specify a type with the given name, default value, and default
376 // array value of VtArray<T>.
377 template <class T>
378 Type(const TfToken& name, const T& defaultValue)
379 : Type(name, VtValue(defaultValue), VtValue(VtArray<T>()))
380 { }
381 template <class T>
382 Type(char const *name, const T& defaultValue)
383 : Type(TfToken(name),
384 VtValue(defaultValue), VtValue(VtArray<T>()))
385 { }
386
387 // Specify a type with the given name and underlying C++ type.
388 // No default value or array value will be registered.
389 Type(const TfToken& name, const TfType& type);
390
391 // Set C++ type name string for this type. Defaults to type name
392 // from TfType.
393 Type& CPPTypeName(const std::string& cppTypeName);
394
395 // Set shape for this type. Defaults to shapeless.
396 Type& Dimensions(const SdfTupleDimensions& dims);
397
398 // Set default unit for this type. Defaults to dimensionless unit.
399 Type& DefaultUnit(TfEnum unit);
400
401 // Set role for this type. Defaults to no role.
402 Type& Role(const TfToken& role);
403
404 // Indicate that arrays of this type are not supported.
405 Type& NoArrays();
406
407 private:
408 Type(const TfToken& name,
409 const VtValue& defaultValue,
410 const VtValue& defaultArrayValue);
411
412 class _Impl;
413 std::unique_ptr<_Impl> _impl;
414
415 friend class _ValueTypeRegistrar;
416 };
417
419 void AddType(const Type& type);
420
421 private:
422 Sdf_ValueTypeRegistry* _registry;
423 };
424
426
429 class EmptyTag {};
431
432 virtual ~SdfSchemaBase();
433
441 template <class T>
443 const TfToken &fieldKey, const T &fallback, bool plugin = false)
444 {
445 return _CreateField(fieldKey, VtValue(fallback), plugin);
446 }
447
451 // Mark the definition as valid and return a pointer to it.
452 _specDefinitions[type].second = true;
453 return _SpecDefiner(this, &_specDefinitions[type].first);
454 }
455
459
462
466
469
472
475
479 typedef std::function<VtValue(const std::string&, const JsValue&)>
481
484 const std::vector<const SdfSchemaBase::FieldDefinition *>
485 _UpdateMetadataFromPlugins(const PlugPluginPtrVector& plugins,
486 const std::string& metadataTag =
487 std::string(),
488 const _DefaultValueFactoryFn& defFactory =
490
491private:
492 friend class _SpecDefiner;
493
494 void _OnDidRegisterPlugins(const PlugNotice::DidRegisterPlugins& n);
495
496 // Return a _SpecDefiner for an existing spec definition, \p local.
498 return _SpecDefiner(this, local);
499 }
500
501 void _AddRequiredFieldName(const TfToken &name);
502
503 const SpecDefinition* _CheckAndGetSpecDefinition(SdfSpecType type) const;
504
505 SDF_API
506 const SpecDefinition* _IssueErrorForInvalidSpecType(SdfSpecType specType) const;
507
508 friend struct Sdf_SchemaFieldTypeRegistrar;
509 FieldDefinition& _CreateField(
510 const TfToken &fieldKey, const VtValue &fallback, bool plugin = false);
511
512 template <class T>
513 FieldDefinition& _DoRegisterField(const TfToken &fieldKey, const T &fallback)
514 {
515 return _DoRegisterField(fieldKey, VtValue(fallback));
516 }
517
518 FieldDefinition& _DoRegisterField(
519 const TfToken &fieldKey, const VtValue &fallback);
520
521private:
522 typedef TfHashMap<TfToken, SdfSchemaBase::FieldDefinition,
524 _FieldDefinitionMap;
525 _FieldDefinitionMap _fieldDefinitions;
526
527 // Pair of definition and flag indicating validity.
528 std::pair<SdfSchemaBase::SpecDefinition, bool>
529 _specDefinitions[SdfNumSpecTypes];
530
531 std::unique_ptr<Sdf_ValueTypeRegistry> _valueTypeRegistry;
532 TfTokenVector _requiredFieldNames;
533};
534
540class SdfSchema : public SdfSchemaBase {
541public:
542 SDF_API
543 static const SdfSchema& GetInstance()
544 {
546 }
547
548private:
549 friend class TfSingleton<SdfSchema>;
550 SdfSchema();
551 virtual ~SdfSchema();
552};
553
554SDF_API_TEMPLATE_CLASS(TfSingleton<SdfSchema>);
555
559#define SDF_FIELD_KEYS \
560 ((Active, "active")) \
561 ((AllowedTokens, "allowedTokens")) \
562 ((ArraySizeConstraint, "arraySizeConstraint")) \
563 ((AssetInfo, "assetInfo")) \
564 ((Clips, "clips")) \
565 ((ClipSets, "clipSets")) \
566 ((ColorConfiguration, "colorConfiguration")) \
567 ((ColorManagementSystem, "colorManagementSystem")) \
568 ((ColorSpace, "colorSpace")) \
569 ((Comment, "comment")) \
570 ((ConnectionPaths, "connectionPaths")) \
571 ((Custom, "custom")) \
572 ((CustomData, "customData")) \
573 ((CustomLayerData, "customLayerData")) \
574 ((Default, "default")) \
575 ((DefaultPrim, "defaultPrim")) \
576 ((DisplayGroup, "displayGroup")) \
577 ((DisplayGroupOrder, "displayGroupOrder")) \
578 ((DisplayName, "displayName")) \
579 ((DisplayUnit, "displayUnit")) \
580 ((Documentation, "documentation")) \
581 ((EndTimeCode, "endTimeCode")) \
582 ((ExpressionVariables, "expressionVariables")) \
583 ((FramePrecision, "framePrecision")) \
584 ((FramesPerSecond, "framesPerSecond")) \
585 ((Hidden, "hidden")) \
586 ((HasOwnedSubLayers, "hasOwnedSubLayers")) \
587 ((InheritPaths, "inheritPaths")) \
588 ((Instanceable, "instanceable")) \
589 ((Kind, "kind")) \
590 ((LayerRelocates, "layerRelocates")) \
591 ((Limits, "limits")) \
592 ((PrimOrder, "primOrder")) \
593 ((NoLoadHint, "noLoadHint")) \
594 ((Owner, "owner")) \
595 ((Payload, "payload")) \
596 ((Permission, "permission")) \
597 ((Prefix, "prefix")) \
598 ((PrefixSubstitutions, "prefixSubstitutions")) \
599 ((PropertyOrder, "propertyOrder")) \
600 ((References, "references")) \
601 ((Relocates, "relocates")) \
602 ((SessionOwner, "sessionOwner")) \
603 ((Specializes, "specializes")) \
604 ((Specifier, "specifier")) \
605 ((Spline, "spline")) \
606 ((StartTimeCode, "startTimeCode")) \
607 ((SubLayers, "subLayers")) \
608 ((SubLayerOffsets, "subLayerOffsets")) \
609 ((Suffix, "suffix")) \
610 ((SuffixSubstitutions, "suffixSubstitutions")) \
611 ((SymmetricPeer, "symmetricPeer")) \
612 ((SymmetryArgs, "symmetryArgs")) \
613 ((SymmetryArguments, "symmetryArguments")) \
614 ((SymmetryFunction, "symmetryFunction")) \
615 ((TargetPaths, "targetPaths")) \
616 ((TimeSamples, "timeSamples")) \
617 ((TimeCodesPerSecond, "timeCodesPerSecond")) \
618 ((TypeName, "typeName")) \
619 ((VariantSelection, "variantSelection")) \
620 ((Variability, "variability")) \
621 ((VariantSetNames, "variantSetNames")) \
622 \
623 /* XXX: These fields should move into Sd. See bug 123508. */ \
624 ((EndFrame, "endFrame")) \
625 ((StartFrame, "startFrame"))
626
627#define SDF_CHILDREN_KEYS \
628 ((ConnectionChildren, "connectionChildren")) \
629 ((ExpressionChildren, "expressionChildren")) \
630 ((MapperArgChildren, "mapperArgChildren")) \
631 ((MapperChildren, "mapperChildren")) \
632 ((PrimChildren, "primChildren")) \
633 ((PropertyChildren, "properties")) \
634 ((RelationshipTargetChildren, "targetChildren")) \
635 ((VariantChildren, "variantChildren")) \
636 ((VariantSetChildren, "variantSetChildren"))
637
638TF_DECLARE_PUBLIC_TOKENS(SdfFieldKeys, SDF_API, SDF_FIELD_KEYS);
639TF_DECLARE_PUBLIC_TOKENS(SdfChildrenKeys, SDF_API, SDF_CHILDREN_KEYS);
640
641PXR_NAMESPACE_CLOSE_SCOPE
642
643#endif // PXR_USD_SDF_SCHEMA_H
A discriminated union type for JSON values.
Definition value.h:47
Notice sent after new plugins have been registered with the Plug registry.
Definition notice.h:34
Defines an interface to registered plugins.
Definition plugin.h:40
Indicates if an operation is allowed and, if not, why not.
Definition allowed.h:29
A path value used to locate objects in layers or scenegraphs.
Definition path.h:281
Represents a payload and all its meta data.
Definition payload.h:41
Represents a reference and all its meta data.
Definition reference.h:58
Class that defines fields for a spec type.
Definition schema.h:339
_SpecDefiner & Field(const TfToken &name, bool required=false)
Functions for setting spec attributes during registration.
A helper for registering value types.
Definition schema.h:366
void AddType(const Type &type)
Register a value type and its corresponding array value type.
Class defining various attributes for a field.
Definition schema.h:57
FieldDefinition & FallbackValue(const VtValue &v)
Functions for setting field attributes during registration.
SDF_API SdfAllowed IsValidValue(const VtValueRef &value) const
Validation functions that return true if a given value passes the registered validator or if no valid...
Class representing fields and other information for a spec type.
Definition schema.h:135
SDF_API bool IsValidField(const TfToken &name) const
Returns whether the given field is valid for this spec.
TfTokenVector const & GetRequiredFields() const
Returns all value fields marked as required for this spec.
Definition schema.h:141
SDF_API TfTokenVector GetFields() const
Returns all fields for this spec.
SDF_API bool IsMetadataField(const TfToken &name) const
Returns whether the given field is metadata for this spec.
SDF_API bool IsRequiredField(const TfToken &name) const
Returns whether the given field is required for this spec.
SDF_API TfTokenVector GetMetadataFields() const
Returns all value fields marked as metadata for this spec.
SDF_API TfToken GetMetadataFieldDisplayGroup(const TfToken &name) const
Returns the display group for this metadata field.
Generic class that provides information about scene description fields but doesn't actually provide a...
Definition schema.h:46
void _RegisterPluginFields()
Registers plugin fields and sets up handling so that fields will be added when additional plugins are...
SDF_API std::vector< SdfValueTypeName > GetAllTypes() const
Returns all registered type names.
SDF_API TfToken GetMetadataFieldDisplayGroup(SdfSpecType specType, TfToken const &metadataField) const
Return the metadata field display group for metadata metadataField on specType.
SDF_API VtValue CastToTypeOf(const TfToken &fieldKey, const VtValue &value) const
Coerce value to the correct type for the specified field.
SDF_API const FieldDefinition * GetFieldDefinition(const TfToken &fieldKey) const
Returns the field definition for the given field.
SDF_API SdfValueTypeName FindType(const TfToken &typeName) const
Return the type name object for the given type name token.
bool IsRequiredFieldName(const TfToken &fieldName) const
Return true if fieldName is a required field name for at least one spec type, return false otherwise.
Definition schema.h:244
SDF_API bool HoldsChildren(const TfToken &fieldKey) const
Returns whether the given field is a 'children' field – that is, it indexes certain children beneath ...
SDF_API TfTokenVector GetMetadataFields(SdfSpecType specType) const
Returns all metadata fields registered for the given spec type.
SDF_API SdfValueTypeName FindType(const VtValue &value, const TfToken &role=TfToken()) const
Return the type name object for the value's type and optional role.
_SpecDefiner _ExtendSpecDefinition(SdfSpecType specType)
Returns a _SpecDefiner for the previously-defined spec type for specifying additional fields.
SDF_API bool IsRegistered(const TfToken &fieldKey, VtValue *fallback=NULL) const
Convenience functions for accessing specific field information.
SDF_API SdfValueTypeName FindOrCreateType(const TfToken &typeName) const
Return the type name object for the given type name string if it exists otherwise create a temporary ...
static SDF_API SdfAllowed IsValidAttributeConnectionPath(const SdfPath &path)
Specific validation functions for various fields.
SDF_API const VtValue & GetFallback(const TfToken &fieldKey) const
Return the fallback value for the specified fieldKey or the empty value if fieldKey is not registered...
void _RegisterStandardTypes()
Registers standard attribute value types.
void _RegisterStandardFields()
Registers the standard fields.
SDF_API SdfAllowed IsValidValue(const VtValue &value) const
Scene description value types.
SDF_API SdfValueTypeName FindType(std::string const &typeName) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
const std::vector< const SdfSchemaBase::FieldDefinition * > _UpdateMetadataFromPlugins(const PlugPluginPtrVector &plugins, const std::string &metadataTag=std::string(), const _DefaultValueFactoryFn &defFactory=_DefaultValueFactoryFn())
Registers all metadata fields specified in the given plugins under the given metadata tag.
const SpecDefinition * GetSpecDefinition(SdfSpecType specType) const
Returns the spec definition for the given spec type.
Definition schema.h:185
SDF_API bool IsValidFieldForSpec(const TfToken &fieldKey, SdfSpecType specType) const
Return whether the given field is valid for the given spec type.
SDF_API TfTokenVector GetFields(SdfSpecType specType) const
Returns all fields registered for the given spec type.
void _RegisterLegacyTypes()
Registers legacy attribute value types.
SDF_API SdfValueTypeName FindType(const TfType &type, const TfToken &role=TfToken()) const
Return the type name object for the given type and optional role.
_ValueTypeRegistrar _GetTypeRegistrar() const
Returns a type registrar.
std::function< VtValue(const std::string &, const JsValue &)> _DefaultValueFactoryFn
Factory function for creating a default value for a metadata field.
Definition schema.h:480
SDF_API SdfValueTypeName FindType(const char *typeName) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
_SpecDefiner _Define(SdfSpecType type)
Registers the given spec type with this schema and return a _SpecDefiner for specifying additional fi...
Definition schema.h:450
SDF_API const TfTokenVector & GetRequiredFields(SdfSpecType specType) const
Returns all required fields registered for the given spec type.
FieldDefinition & _RegisterField(const TfToken &fieldKey, const T &fallback, bool plugin=false)
Creates and registers a new field named fieldKey with the fallback value fallback.
Definition schema.h:442
Construct an SdfSchemaBase but does not populate it with standard fields and types.
Definition schema.h:429
Class that provides information about the various scene description fields.
Definition schema.h:540
Represents a value type name, i.e.
An enum class that records both enum type and enum value.
Definition enum.h:120
Manage a single instance of an object (see.
Definition singleton.h:107
static T & GetInstance()
Return a reference to an object of type T, creating it if necessary.
Definition singleton.h:122
Token for efficient comparison, assignment, and hashing of known strings.
Definition token.h:81
TfType represents a dynamic runtime type.
Definition type.h:48
Enable a concrete base class for use with TfWeakPtr.
Definition weakBase.h:124
Represents an arbitrary dimensional rectangular container class.
Definition array.h:213
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Definition value.h:90
A non-owning type-erased view of a value, interoperating with VtValue.
Definition valueRef.h:65
#define TF_DECLARE_WEAK_PTRS(type)
Define standard weak pointer types.
Definition declarePtrs.h:45
Manage a single instance of an object.
This file defines some macros that are useful for declaring and using static TfTokens.
#define TF_DECLARE_PUBLIC_TOKENS(...)
Macro to define public tokens.
Represents the shape of a value type (or that of an element in an array).
Functor to use for hash maps from tokens to other things.
Definition token.h:176
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...
std::vector< TfToken > TfTokenVector
Convenience types.
Definition token.h:489
Basic Sdf data types.
SdfSpecType
An enum that specifies the type of an object.
Definition types.h:73
std::pair< SdfPath, SdfPath > SdfRelocate
A single relocate specifying a source SdfPath and a target SdfPath for a relocation.
Definition types.h:276