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;
386 virtual const std::type_info &
413 const TfToken& field,
const T& defaultVal)
const
434 using Type = std::remove_cv_t<std::remove_reference_t<T>>;
436 if constexpr (std::is_same_v<Type, VtValue>) {
437 return _StoreVtValue(std::forward<T>(
v));
443 if constexpr (std::is_same_v<Type, SdfValueBlock>) {
446 }
else if constexpr (std::is_same_v<Type, SdfAnimationBlock>) {
451 *
static_cast<Type*
>(
value) = std::forward<T>(
v);
505 return v.UncheckedRemove<
T>();
508 template <
class Value>
509 bool _StoreVtValueImpl(
Value &&
v) {
513 if (
ARCH_LIKELY(std::forward<Value>(
v).
template IsHolding<T>())) {
514 *
static_cast<T*
>(
value) = _Get(std::forward<Value>(
v));
515 if constexpr (std::is_same_v<T, SdfValueBlock>) {
517 }
else if constexpr (std::is_same_v<T, SdfAnimationBlock>) {
523 if (std::forward<Value>(
v).
template IsHolding<SdfValueBlock>()) {
527 else if (std::forward<Value>(
v).
template IsHolding<SdfAnimationBlock>())
539 _StoreVtValue(
const VtValue&
v)
override {
540 return _StoreVtValueImpl(v);
544 _StoreVtValue(
VtValue &&
v)
override {
545 return _StoreVtValueImpl(
v);
562 *v = *
static_cast<const T*
>(
value);
577 const std::type_info& valueType_,
578 const bool isArrayEdit_,
579 const std::type_info& elementValueType_)
607 return typeid(
typename T::ElementType);
631 const T& _GetValue()
const
633 return *
static_cast<const T*
>(
value);
644 typedef char CharArray[
N];
680 #endif // PXR_USD_SDF_ABSTRACT_DATA_H
virtual bool GetValue(VtValue *v) const
virtual SDF_API bool IsEmpty() const
static std::type_info const & _GetElementType()
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)
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
#define PXR_NAMESPACE_OPEN_SCOPE
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
**But if you need a or simply need to know when the task has note that the like this
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 const std::type_info & QueryTimeSampleTypeid(const SdfPath &path, double time) const
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)
bool GetValue(T *v) const
virtual bool IsEqual(const VtValue &v) const
#define PXR_NAMESPACE_CLOSE_SCOPE
GA_API const UT_StringHolder N
SdfAbstractDataConstValue(const void *value_, const std::type_info &valueType_, const bool isArrayEdit_, const std::type_info &elementValueType_)
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
const std::type_info & elementValueType
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
A trait to detect instantiations of VtArrayEdit, specialized in arrayEdit.h.