7 #ifndef PXR_USD_SDF_ABSTRACT_DATA_H
8 #define PXR_USD_SDF_ABSTRACT_DATA_H
23 #include <type_traits>
33 #define SDF_DATA_TOKENS \
34 ((TimeSamples, "timeSamples"))
116 virtual bool Equals(
const SdfAbstractDataRefPtr &rhs)
const;
211 const TfToken& fieldName)
const = 0;
222 virtual std::type_info
const &
253 const T& defaultValue =
T())
const;
330 virtual std::set<double>
334 virtual std::set<double>
340 double* tUpper)
const = 0;
350 double* tLower,
double* tUpper)
const = 0;
367 double* tPrevious)
const;
372 VtValue *optionalValue = NULL)
const = 0;
402 const TfToken& field,
const T& defaultVal)
const
423 using Type = std::remove_cv_t<std::remove_reference_t<T>>;
425 if constexpr (std::is_same_v<Type, VtValue>) {
426 return _StoreVtValue(std::forward<T>(
v));
431 if constexpr (std::is_same_v<Type, SdfValueBlock>) {
436 *
static_cast<Type*
>(
value) = std::forward<T>(
v);
488 return v.UncheckedRemove<
T>();
491 template <
class Value>
492 bool _StoreVtValueImpl(
Value &&
v) {
495 if (
ARCH_LIKELY(std::forward<Value>(
v).
template IsHolding<T>())) {
496 *
static_cast<T*
>(
value) = _Get(std::forward<Value>(
v));
497 if (std::is_same_v<T, SdfValueBlock>) {
503 if (std::forward<Value>(
v).template IsHolding<SdfValueBlock>()) {
514 _StoreVtValue(
const VtValue&
v)
override {
515 return _StoreVtValueImpl(v);
519 _StoreVtValue(
VtValue &&
v)
override {
520 return _StoreVtValueImpl(
v);
537 *v = *
static_cast<const T*
>(
value);
550 const std::type_info& valueType_)
590 const T& _GetValue()
const
592 return *
static_cast<const T*
>(
value);
603 typedef char CharArray[
N];
639 #endif // PXR_USD_SDF_ABSTRACT_DATA_H
virtual bool GetValue(VtValue *v) const
virtual SDF_API bool IsEmpty() const
virtual SDF_API std::vector< TfToken > ListDictKeys(const SdfPath &path, const TfToken &fieldName, const TfToken &keyPath) const
SdfAbstractDataConstTypedValue(const CharArray *value)
PXR_NAMESPACE_OPEN_SCOPE TF_DECLARE_WEAK_AND_REF_PTRS(SdfAbstractData)
virtual SDF_API bool Has(const SdfPath &path, const TfToken &fieldName, SdfAbstractDataValue *value) const =0
T const & UncheckedGet() const &
virtual SDF_API size_t GetNumTimeSamplesForPath(const SdfPath &path) const =0
virtual SDF_API void CopyFrom(const SdfAbstractDataConstPtr &source)
SdfAbstractDataConstValue(const void *value_, const std::type_info &valueType_)
virtual SDF_API void CreateSpec(const SdfPath &path, SdfSpecType specType)=0
virtual SDF_API bool HasSpecAndField(const SdfPath &path, const TfToken &fieldName, SdfAbstractDataValue *value, SdfSpecType *specType) const
GT_API const UT_StringHolder time
GLsizei const GLchar *const * string
GLsizei const GLfloat * value
GLsizei const GLchar *const * path
virtual SDF_API ~SdfAbstractData()
virtual SDF_API bool HasDictKey(const SdfPath &path, const TfToken &fieldName, const TfToken &keyPath, SdfAbstractDataValue *value) const
const std::type_info & valueType
virtual SDF_API std::set< double > ListAllTimeSamples() const =0
virtual bool IsEqual(const VtValue &value) const =0
virtual SDF_API bool GetBracketingTimeSamplesForPath(const SdfPath &path, double time, double *tLower, double *tUpper) const =0
virtual SDF_API std::set< double > ListTimeSamplesForPath(const SdfPath &path) const =0
virtual SDF_API void WriteToStream(std::ostream &out) const
virtual SDF_API void EraseSpec(const SdfPath &path)=0
virtual SDF_API std::vector< TfToken > List(const SdfPath &path) const =0
Return the names of all the fields that are set at path.
T GetAs(const SdfPath &path, const TfToken &fieldName, const T &defaultValue=T()) const
SDF_API void VisitSpecs(SdfAbstractDataSpecVisitor *visitor) const
virtual SDF_API VtValue Get(const SdfPath &path, const TfToken &fieldName) const =0
virtual SDF_API VtValue GetDictValueByKey(const SdfPath &path, const TfToken &fieldName, const TfToken &keyPath) const
SdfAbstractDataValue(void *value_, const std::type_info &valueType_)
virtual SDF_API void Erase(const SdfPath &path, const TfToken &fieldName)=0
Remove the field at path and fieldName, if one exists.
A generic, discriminated value, whose type may be queried dynamically.
SdfAbstractDataTypedValue(T *value)
TF_DECLARE_PUBLIC_TOKENS(SdfDataTokens, SDF_API, SDF_DATA_TOKENS)
virtual SDF_API bool VisitSpec(const SdfAbstractData &data, const SdfPath &path)=0
virtual SDF_API bool IsDetached() const
GLsizei GLsizei GLchar * source
virtual bool GetValue(VtValue *value) const =0
virtual SDF_API void EraseTimeSample(const SdfPath &path, double time)=0
virtual SDF_API bool Equals(const SdfAbstractDataRefPtr &rhs) const
virtual SDF_API bool StreamsData() const =0
virtual SDF_API bool GetBracketingTimeSamples(double time, double *tLower, double *tUpper) const =0
virtual SDF_API std::type_info const & GetTypeid(const SdfPath &path, const TfToken &fieldName) const
virtual SDF_API void Done(const SdfAbstractData &data)=0
virtual SDF_API bool QueryTimeSample(const SdfPath &path, double time, VtValue *optionalValue=NULL) const =0
virtual SDF_API void Set(const SdfPath &path, const TfToken &fieldName, const VtValue &value)=0
const std::type_info & valueType
virtual SDF_API void EraseDictValueByKey(const SdfPath &path, const TfToken &fieldName, const TfToken &keyPath)
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
bool GetValue(T *v) const
virtual bool IsEqual(const VtValue &v) const
#define PXR_NAMESPACE_CLOSE_SCOPE
GA_API const UT_StringHolder N
virtual SDF_API void _VisitSpecs(SdfAbstractDataSpecVisitor *visitor) const =0
virtual SDF_API void SetDictValueByKey(const SdfPath &path, const TfToken &fieldName, const TfToken &keyPath, const VtValue &value)
virtual SDF_API void MoveSpec(const SdfPath &oldPath, const SdfPath &newPath)=0
virtual SDF_API void SetTimeSample(const SdfPath &path, double time, const VtValue &value)=0
PXR_NAMESPACE_OPEN_SCOPE bool TfSafeTypeCompare(const std::type_info &t1, const std::type_info &t2)
virtual SDF_API bool HasSpec(const SdfPath &path) const =0
Return true if this data has a spec for path.
SdfAbstractDataConstTypedValue(const T *value)
virtual SDF_API ~SdfAbstractDataSpecVisitor()
virtual SDF_API bool GetPreviousTimeSampleForPath(const SdfPath &path, double time, double *tPrevious) const
virtual SdfSpecType GetSpecType(const SdfPath &path) const =0