All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
schema.h
1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 #ifndef PXR_USD_SDF_SCHEMA_H
25 #define PXR_USD_SDF_SCHEMA_H
26 
27 #include "pxr/pxr.h"
28 #include "pxr/usd/sdf/api.h"
29 #include "pxr/usd/sdf/allowed.h"
30 #include "pxr/usd/sdf/types.h"
31 #include "pxr/usd/sdf/valueTypeName.h"
32 
33 #include "pxr/base/plug/notice.h"
34 #include "pxr/base/tf/hash.h"
35 #include "pxr/base/tf/hashmap.h"
36 #include "pxr/base/tf/singleton.h"
38 #include "pxr/base/tf/token.h"
39 #include "pxr/base/tf/type.h"
40 #include "pxr/base/tf/weakBase.h"
41 #include "pxr/base/vt/value.h"
42 
43 #include <memory>
44 #include <string>
45 #include <vector>
46 
47 PXR_NAMESPACE_OPEN_SCOPE
48 
49 class JsValue;
50 class SdfPath;
51 class SdfPayload;
52 class SdfReference;
53 class Sdf_ValueTypeRegistry;
54 
56 
62 class SdfSchemaBase : public TfWeakBase, public boost::noncopyable {
63 
64 protected:
65  class _SpecDefiner;
66 
67 public:
73  public:
75  const SdfSchemaBase& schema,
76  const TfToken& name,
77  const VtValue& fallbackValue);
78 
79  typedef std::vector< std::pair<TfToken, JsValue> > InfoVec;
80 
81  SDF_API const TfToken& GetName() const;
82  SDF_API const VtValue& GetFallbackValue() const;
83  SDF_API const InfoVec& GetInfo() const;
84 
85  SDF_API bool IsPlugin() const;
86  SDF_API bool IsReadOnly() const;
87  SDF_API bool HoldsChildren() const;
88 
92 
93  template <class T>
94  SdfAllowed IsValidValue(const T& value) const
95  {
96  return (_valueValidator ?
97  _valueValidator(_schema, VtValue(value)) :
98  SdfAllowed(true));
99  }
100 
101  template <class T>
102  SdfAllowed IsValidListValue(const T& value) const
103  {
104  return (_listValueValidator ?
105  _listValueValidator(_schema, VtValue(value)) :
106  SdfAllowed(true));
107  }
108 
109  template <class T>
110  SdfAllowed IsValidMapKey(const T& value) const
111  {
112  return (_mapKeyValidator ?
113  _mapKeyValidator(_schema, VtValue(value)) :
114  SdfAllowed(true));
115  }
116 
117  template <class T>
118  SdfAllowed IsValidMapValue(const T& value) const
119  {
120  return (_mapValueValidator ?
121  _mapValueValidator(_schema, VtValue(value)) :
122  SdfAllowed(true));
123  }
124 
126 
129 
130  FieldDefinition& FallbackValue(const VtValue& v);
131 
132  FieldDefinition& Plugin();
133  FieldDefinition& Children();
134  FieldDefinition& ReadOnly();
135  FieldDefinition& AddInfo(const TfToken& tok, const JsValue& val);
136 
137  using Validator =
138  SdfAllowed (*) (const SdfSchemaBase&, const VtValue&);
139  FieldDefinition& ValueValidator(Validator v);
140  FieldDefinition& ListValueValidator(Validator v);
141  FieldDefinition& MapKeyValidator(Validator v);
142  FieldDefinition& MapValueValidator(Validator v);
143 
145 
146  private:
147  const SdfSchemaBase& _schema;
148  TfToken _name;
149  VtValue _fallbackValue;
150  InfoVec _info;
151 
152  bool _isPlugin;
153  bool _isReadOnly;
154  bool _holdsChildren;
155 
156  Validator _valueValidator;
157  Validator _listValueValidator;
158  Validator _mapKeyValidator;
159  Validator _mapValueValidator;
160  };
161 
162  // Structure containing information about a field as it pertains to the
163  // spec this object defines.
164  struct _FieldInfo {
165  _FieldInfo(): required(false), metadata(false) { }
166  bool required;
167  bool metadata;
168  TfToken metadataDisplayGroup;
169  };
170 
171  class SpecDefinition;
172 
178  public:
180  SDF_API TfTokenVector GetFields() const;
181 
184  return _requiredFields;
185  }
186 
188  SDF_API TfTokenVector GetMetadataFields() const;
189 
191  SDF_API bool IsValidField(const TfToken& name) const;
192 
194  SDF_API bool IsMetadataField(const TfToken& name) const;
195 
199  SDF_API
200  TfToken GetMetadataFieldDisplayGroup(const TfToken& name) const;
201 
203  SDF_API bool IsRequiredField(const TfToken& name) const;
204 
205 
206  private:
207  typedef TfHashMap<TfToken, _FieldInfo, TfToken::HashFunctor>
208  _FieldMap;
209  _FieldMap _fields;
210 
211  // A separate vector of required field names from _fields. Access to
212  // these is in a hot path, so we cache them separately.
213  TfTokenVector _requiredFields;
214 
215  private:
216  friend class _SpecDefiner;
217  void _AddField(const TfToken& name, const _FieldInfo& fieldInfo);
218  };
219 
222  SDF_API
223  const FieldDefinition* GetFieldDefinition(const TfToken &fieldKey) const;
224 
227  inline const SpecDefinition* GetSpecDefinition(SdfSpecType specType) const {
228  return _specDefinitions[specType].second ?
229  &_specDefinitions[specType].first : nullptr;
230  }
231 
234 
237  SDF_API
238  bool IsRegistered(const TfToken &fieldKey, VtValue *fallback=NULL) const;
239 
242  SDF_API
243  bool HoldsChildren(const TfToken &fieldKey) const;
244 
247  SDF_API
248  const VtValue& GetFallback(const TfToken &fieldKey) const;
249 
251  SDF_API
252  VtValue CastToTypeOf(const TfToken &fieldKey, const VtValue &value) const;
253 
255  SDF_API
256  bool IsValidFieldForSpec(const TfToken &fieldKey, SdfSpecType specType) const;
257 
259  SDF_API TfTokenVector GetFields(SdfSpecType specType) const;
260 
262  SDF_API TfTokenVector GetMetadataFields(SdfSpecType specType) const;
263 
267  SDF_API
269  TfToken const &metadataField) const;
270 
272  SDF_API const TfTokenVector &GetRequiredFields(SdfSpecType specType) const;
273 
278  inline bool IsRequiredFieldName(const TfToken &fieldName) const {
279  for (size_t i = 0; i != _requiredFieldNames.size(); ++i) {
280  if (_requiredFieldNames[i] == fieldName)
281  return true;
282  }
283  return false;
284  }
285 
287 
292 
294  static SdfAllowed IsValidIdentifier(const std::string& name);
295  static SdfAllowed IsValidNamespacedIdentifier(const std::string& name);
296  static SdfAllowed IsValidInheritPath(const SdfPath& path);
297  static SdfAllowed IsValidPayload(const SdfPayload& payload);
298  static SdfAllowed IsValidReference(const SdfReference& ref);
299  static SdfAllowed IsValidRelationshipTargetPath(const SdfPath& path);
300  static SdfAllowed IsValidRelocatesPath(const SdfPath& path);
301  static SdfAllowed IsValidSpecializesPath(const SdfPath& path);
302  static SdfAllowed IsValidSubLayer(const std::string& sublayer);
303  static SdfAllowed IsValidVariantIdentifier(const std::string& name);
304 
306 
309 
315  SDF_API
316  SdfAllowed IsValidValue(const VtValue& value) const;
317 
319  std::vector<SdfValueTypeName> GetAllTypes() const;
320 
322  SDF_API
323  SdfValueTypeName FindType(const TfToken& typeName) const;
325  SDF_API
326  SdfValueTypeName FindType(const char *typeName) const;
328  SDF_API
329  SdfValueTypeName FindType(std::string const &typeName) const;
330 
332  SDF_API
333  SdfValueTypeName FindType(const TfType& type,
334  const TfToken& role = TfToken()) const;
335 
337  SDF_API
338  SdfValueTypeName FindType(const VtValue& value,
339  const TfToken& role = TfToken()) const;
340 
344  SDF_API
345  SdfValueTypeName FindOrCreateType(const TfToken& typeName) const;
346 
348 
349 protected:
354  class _SpecDefiner {
355  public:
358 
360  const TfToken& name, bool required = false);
361  _SpecDefiner& MetadataField(
362  const TfToken& name, bool required = false);
363  _SpecDefiner& MetadataField(
364  const TfToken& name, const TfToken& displayGroup,
365  bool required = false);
366 
367  _SpecDefiner &CopyFrom(const SpecDefinition &other);
368 
370  private:
371  friend class SdfSchemaBase;
372  explicit _SpecDefiner(SdfSchemaBase *schema, SpecDefinition *definition)
373  : _schema(schema)
374  , _definition(definition)
375  {}
376  SdfSchemaBase *_schema;
377  SpecDefinition *_definition;
378  };
379 
382  public:
383  explicit _ValueTypeRegistrar(Sdf_ValueTypeRegistry*);
384 
385  class Type
386  {
387  public:
388  ~Type();
389 
390  // Specify a type with the given name, default value, and default
391  // array value of VtArray<T>.
392  template <class T>
393  Type(const TfToken& name, const T& defaultValue)
394  : Type(name, VtValue(defaultValue), VtValue(VtArray<T>()))
395  { }
396  template <class T>
397  Type(char const *name, const T& defaultValue)
398  : Type(TfToken(name),
399  VtValue(defaultValue), VtValue(VtArray<T>()))
400  { }
401 
402  // Specify a type with the given name and underlying C++ type.
403  // No default value or array value will be registered.
404  Type(const TfToken& name, const TfType& type);
405 
406  // Set C++ type name string for this type. Defaults to type name
407  // from TfType.
408  Type& CPPTypeName(const std::string& cppTypeName);
409 
410  // Set shape for this type. Defaults to shapeless.
411  Type& Dimensions(const SdfTupleDimensions& dims);
412 
413  // Set default unit for this type. Defaults to dimensionless unit.
414  Type& DefaultUnit(TfEnum unit);
415 
416  // Set role for this type. Defaults to no role.
417  Type& Role(const TfToken& role);
418 
419  // Indicate that arrays of this type are not supported.
420  Type& NoArrays();
421 
422  private:
423  Type(const TfToken& name,
424  const VtValue& defaultValue,
425  const VtValue& defaultArrayValue);
426 
427  class _Impl;
428  std::unique_ptr<_Impl> _impl;
429 
430  friend class _ValueTypeRegistrar;
431  };
432 
434  void AddType(const Type& type);
435 
436  private:
437  Sdf_ValueTypeRegistry* _registry;
438  };
439 
440  SdfSchemaBase();
441 
444  class EmptyTag {};
446 
447  virtual ~SdfSchemaBase();
448 
456  template <class T>
458  const TfToken &fieldKey, const T &fallback, bool plugin = false)
459  {
460  return _CreateField(fieldKey, VtValue(fallback), plugin);
461  }
462 
466  // Mark the definition as valid and return a pointer to it.
467  _specDefinitions[type].second = true;
468  return _SpecDefiner(this, &_specDefinitions[type].first);
469  }
470 
473  _SpecDefiner _ExtendSpecDefinition(SdfSpecType specType);
474 
477 
480  void _RegisterPluginFields();
481 
483  void _RegisterStandardTypes();
484 
486  void _RegisterLegacyTypes();
487 
489  _ValueTypeRegistrar _GetTypeRegistrar() const;
490 
494  typedef std::function<VtValue(const std::string&, const JsValue&)>
496 
499  const std::vector<const SdfSchemaBase::FieldDefinition *>
500  _UpdateMetadataFromPlugins(const PlugPluginPtrVector& plugins,
501  const std::string& metadataTag =
502  std::string(),
503  const _DefaultValueFactoryFn& defFactory =
505 
506 private:
507  friend class _SpecDefiner;
508 
509  void _OnDidRegisterPlugins(const PlugNotice::DidRegisterPlugins& n);
510 
511  // Return a _SpecDefiner for an existing spec definition, \p local.
513  return _SpecDefiner(this, local);
514  }
515 
516  void _AddRequiredFieldName(const TfToken &name);
517 
518  const SpecDefinition* _CheckAndGetSpecDefinition(SdfSpecType type) const;
519 
520  friend struct Sdf_SchemaFieldTypeRegistrar;
521  FieldDefinition& _CreateField(
522  const TfToken &fieldKey, const VtValue &fallback, bool plugin = false);
523 
524  template <class T>
525  FieldDefinition& _DoRegisterField(const TfToken &fieldKey, const T &fallback)
526  {
527  return _DoRegisterField(fieldKey, VtValue(fallback));
528  }
529 
530  FieldDefinition& _DoRegisterField(
531  const TfToken &fieldKey, const VtValue &fallback);
532 
533 private:
534  typedef TfHashMap<TfToken, SdfSchemaBase::FieldDefinition,
536  _FieldDefinitionMap;
537  _FieldDefinitionMap _fieldDefinitions;
538 
539  // Pair of definition and flag indicating validity.
540  std::pair<SdfSchemaBase::SpecDefinition, bool>
541  _specDefinitions[SdfNumSpecTypes];
542 
543  std::unique_ptr<Sdf_ValueTypeRegistry> _valueTypeRegistry;
544  TfTokenVector _requiredFieldNames;
545 };
546 
552 class SdfSchema : public SdfSchemaBase {
553 public:
554  SDF_API
555  static const SdfSchema& GetInstance()
556  {
558  }
559 
560 private:
561  friend class TfSingleton<SdfSchema>;
562  SdfSchema();
563  virtual ~SdfSchema();
564 };
565 
566 SDF_API_TEMPLATE_CLASS(TfSingleton<SdfSchema>);
567 
571 #define SDF_FIELD_KEYS \
572  ((Active, "active")) \
573  ((AllowedTokens, "allowedTokens")) \
574  ((AssetInfo, "assetInfo")) \
575  ((ColorConfiguration, "colorConfiguration")) \
576  ((ColorManagementSystem, "colorManagementSystem")) \
577  ((ColorSpace, "colorSpace")) \
578  ((Comment, "comment")) \
579  ((ConnectionPaths, "connectionPaths")) \
580  ((Custom, "custom")) \
581  ((CustomData, "customData")) \
582  ((CustomLayerData, "customLayerData")) \
583  ((Default, "default")) \
584  ((DefaultPrim, "defaultPrim")) \
585  ((DisplayGroup, "displayGroup")) \
586  ((DisplayGroupOrder, "displayGroupOrder")) \
587  ((DisplayName, "displayName")) \
588  ((DisplayUnit, "displayUnit")) \
589  ((Documentation, "documentation")) \
590  ((EndTimeCode, "endTimeCode")) \
591  ((FramePrecision, "framePrecision")) \
592  ((FramesPerSecond, "framesPerSecond")) \
593  ((Hidden, "hidden")) \
594  ((HasOwnedSubLayers, "hasOwnedSubLayers")) \
595  ((InheritPaths, "inheritPaths")) \
596  ((Instanceable, "instanceable")) \
597  ((Kind, "kind")) \
598  ((PrimOrder, "primOrder")) \
599  ((NoLoadHint, "noLoadHint")) \
600  ((Owner, "owner")) \
601  ((Payload, "payload")) \
602  ((Permission, "permission")) \
603  ((Prefix, "prefix")) \
604  ((PrefixSubstitutions, "prefixSubstitutions")) \
605  ((PropertyOrder, "propertyOrder")) \
606  ((References, "references")) \
607  ((Relocates, "relocates")) \
608  ((SessionOwner, "sessionOwner")) \
609  ((Specializes, "specializes")) \
610  ((Specifier, "specifier")) \
611  ((StartTimeCode, "startTimeCode")) \
612  ((SubLayers, "subLayers")) \
613  ((SubLayerOffsets, "subLayerOffsets")) \
614  ((Suffix, "suffix")) \
615  ((SuffixSubstitutions, "suffixSubstitutions")) \
616  ((SymmetricPeer, "symmetricPeer")) \
617  ((SymmetryArgs, "symmetryArgs")) \
618  ((SymmetryArguments, "symmetryArguments")) \
619  ((SymmetryFunction, "symmetryFunction")) \
620  ((TargetPaths, "targetPaths")) \
621  ((TimeSamples, "timeSamples")) \
622  ((TimeCodesPerSecond, "timeCodesPerSecond")) \
623  ((TypeName, "typeName")) \
624  ((VariantSelection, "variantSelection")) \
625  ((Variability, "variability")) \
626  ((VariantSetNames, "variantSetNames")) \
627  \
628  /* XXX: These fields should move into Sd. See bug 123508. */ \
629  ((EndFrame, "endFrame")) \
630  ((StartFrame, "startFrame"))
631 
632 #define SDF_CHILDREN_KEYS \
633  ((ConnectionChildren, "connectionChildren")) \
634  ((ExpressionChildren, "expressionChildren")) \
635  ((MapperArgChildren, "mapperArgChildren")) \
636  ((MapperChildren, "mapperChildren")) \
637  ((PrimChildren, "primChildren")) \
638  ((PropertyChildren, "properties")) \
639  ((RelationshipTargetChildren, "targetChildren")) \
640  ((VariantChildren, "variantChildren")) \
641  ((VariantSetChildren, "variantSetChildren"))
642 
643 TF_DECLARE_PUBLIC_TOKENS(SdfFieldKeys, SDF_API, SDF_FIELD_KEYS);
644 TF_DECLARE_PUBLIC_TOKENS(SdfChildrenKeys, SDF_API, SDF_CHILDREN_KEYS);
645 
646 PXR_NAMESPACE_CLOSE_SCOPE
647 
648 #endif // PXR_USD_SDF_SCHEMA_H
TfTokenVector const & GetRequiredFields() const
Returns all value fields marked as required for this spec.
Definition: schema.h:183
Manage a single instance of an object.
void _RegisterPluginFields()
Registers plugin fields and sets up handling so that fields will be added when additional plugins are...
std::function< VtValue(const std::string &, const JsValue &)> _DefaultValueFactoryFn
Factory function for creating a default value for a metadata field.
Definition: schema.h:495
Manage a single instance of an object (see.
Definition: singleton.h:122
SDF_API bool IsValidField(const TfToken &name) const
Returns whether the given field is valid for this spec.
#define TF_DECLARE_WEAK_PTRS(type)
Define standard weak pointer types.
Definition: declarePtrs.h:62
void _RegisterLegacyTypes()
Registers legacy attribute value types.
Generic class that provides information about scene description fields but doesn&#39;t actually provide a...
Definition: schema.h:62
SDF_API bool IsRequiredField(const TfToken &name) const
Returns whether the given field is required for this spec.
SDF_API VtValue CastToTypeOf(const TfToken &fieldKey, const VtValue &value) const
Coerce value to the correct type for the specified field.
Class that defines fields for a spec type.
Definition: schema.h:354
SDF_API TfTokenVector GetMetadataFields(SdfSpecType specType) const
Returns all metadata fields registered for the given spec type.
An enum class that records both enum type and enum value.
Definition: enum.h:139
Functor to use for hash maps from tokens to other things.
Definition: token.h:166
_SpecDefiner & Field(const TfToken &name, bool required=false)
Functions for setting spec attributes during registration.
Represents a value type name, i.e.
Definition: valueTypeName.h:87
SDF_API bool IsValidFieldForSpec(const TfToken &fieldKey, SdfSpecType specType) const
Return whether the given field is valid for the given spec type.
SDF_API SdfAllowed IsValidValue(const VtValue &value) const
Scene description value types.
Basic Sdf data types.
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 ...
SDF_API bool HoldsChildren(const TfToken &fieldKey) const
Returns whether the given field is a &#39;children&#39; field – that is, it indexes certain children beneath ...
const SpecDefinition * GetSpecDefinition(SdfSpecType specType) const
Returns the spec definition for the given spec type.
Definition: schema.h:227
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:87
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:457
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...
std::vector< SdfValueTypeName > GetAllTypes() const
Returns all registered type names.
Class defining various attributes for a field.
Definition: schema.h:72
_ValueTypeRegistrar _GetTypeRegistrar() const
Returns a type registrar.
SDF_API bool IsRegistered(const TfToken &fieldKey, VtValue *fallback=NULL) const
Convenience functions for accessing specific field information.
Indicates if an operation is allowed and, if not, why not.
Definition: allowed.h:47
A discriminated union type for JSON values.
Definition: value.h:61
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:278
SdfAllowed IsValidValue(const T &value) const
Validation functions that return true if a given value passes the registered validator or if no valid...
Definition: schema.h:94
_SpecDefiner _ExtendSpecDefinition(SdfSpecType specType)
Returns a _SpecDefiner for the previously-defined spec type for specifying additional fields...
#define TF_DECLARE_PUBLIC_TOKENS(...)
Macro to define public tokens.
Definition: staticTokens.h:118
SDF_API const FieldDefinition * GetFieldDefinition(const TfToken &fieldKey) const
Returns the field definition for the given field.
Represents a payload and all its meta data.
Definition: payload.h:60
std::vector< TfToken > TfTokenVector
Convenience types.
Definition: token.h:442
Class representing fields and other information for a spec type.
Definition: schema.h:177
Represents an arbitrary dimensional rectangular container class.
Definition: array.h:229
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:288
static T & GetInstance()
Return a reference to an object of type T, creating it if necessary.
Definition: singleton.h:137
void AddType(const Type &type)
Register a value type and its corresponding array value type.
SDF_API TfTokenVector GetFields() const
Returns all fields for this spec.
A helper for registering value types.
Definition: schema.h:381
void _RegisterStandardTypes()
Registers standard attribute value types.
SDF_API TfToken GetMetadataFieldDisplayGroup(SdfSpecType specType, TfToken const &metadataField) const
Return the metadata field display group for metadata metadataField on specType.
static SdfAllowed IsValidAttributeConnectionPath(const SdfPath &path)
Specific validation functions for various fields.
Represents a reference and all its meta data.
Definition: reference.h:76
Defines an interface to registered plugins.
Definition: plugin.h:58
SDF_API SdfValueTypeName FindType(const TfToken &typeName) const
Return the type name object for the given type name token.
This file defines some macros that are useful for declaring and using static TfTokens.
void _RegisterStandardFields()
Registers the standard fields.
SdfSpecType
An enum that specifies the type of an object.
Definition: types.h:91
Notice sent after new plugins have been registered with the Plug registry.
Definition: notice.h:50
FieldDefinition & FallbackValue(const VtValue &v)
Functions for setting field attributes during registration.
_SpecDefiner _Define(SdfSpecType type)
Registers the given spec type with this schema and return a _SpecDefiner for specifying additional fi...
Definition: schema.h:465
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...
TfType represents a dynamic runtime type.
Definition: type.h:64
Represents the shape of a value type (or that of an element in an array).
Definition: valueTypeName.h:46
SDF_API const TfTokenVector & GetRequiredFields(SdfSpecType specType) const
Returns all required fields registered for the given spec type.
SDF_API TfTokenVector GetFields(SdfSpecType specType) const
Returns all fields registered for the given spec type.
SDF_API TfTokenVector GetMetadataFields() const
Returns all value fields marked as metadata for this spec.
Class that provides information about the various scene description fields.
Definition: schema.h:552
SDF_API TfToken GetMetadataFieldDisplayGroup(const TfToken &name) const
Returns the display group for this metadata field.
Enable a concrete base class for use with TfWeakPtr.
Definition: weakBase.h:141
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Definition: value.h:168
SDF_API bool IsMetadataField(const TfToken &name) const
Returns whether the given field is metadata for this spec.
TfToken class for efficient string referencing and hashing, plus conversions to and from stl string c...
Construct an SdfSchemaBase but does not populate it with standard fields and types.
Definition: schema.h:444