HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
data.h
Go to the documentation of this file.
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_DATA_H
8 #define PXR_USD_SDF_DATA_H
9 
10 #include "pxr/pxr.h"
11 #include "pxr/usd/sdf/api.h"
13 #include "pxr/usd/sdf/path.h"
15 #include "pxr/base/tf/hashmap.h"
16 #include "pxr/base/tf/token.h"
17 #include "pxr/base/vt/value.h"
18 
19 #include <vector>
20 
22 
24 
25 /// \class SdfData
26 ///
27 /// SdfData provides concrete scene description data storage.
28 ///
29 /// An SdfData is an implementation of SdfAbstractData that simply
30 /// stores specs and fields in a map keyed by path.
31 ///
32 class SdfData : public SdfAbstractData
33 {
34 public:
35  SdfData() {}
36  SDF_API
37  virtual ~SdfData();
38 
39  /// SdfAbstractData overrides
40 
41  SDF_API
42  virtual bool StreamsData() const;
43 
44  SDF_API
45  virtual bool IsDetached() const;
46 
47  SDF_API
48  virtual void CreateSpec(const SdfPath& path,
49  SdfSpecType specType);
50  SDF_API
51  virtual bool HasSpec(const SdfPath& path) const;
52  SDF_API
53  virtual void EraseSpec(const SdfPath& path);
54  SDF_API
55  virtual void MoveSpec(const SdfPath& oldPath,
56  const SdfPath& newPath);
57  SDF_API
58  virtual SdfSpecType GetSpecType(const SdfPath& path) const;
59 
60  SDF_API
61  virtual bool Has(const SdfPath& path, const TfToken &fieldName,
63  SDF_API
64  virtual bool Has(const SdfPath& path, const TfToken& fieldName,
65  VtValue *value = NULL) const;
66  SDF_API
67  virtual bool
68  HasSpecAndField(const SdfPath &path, const TfToken &fieldName,
69  SdfAbstractDataValue *value, SdfSpecType *specType) const;
70 
71  SDF_API
72  virtual bool
73  HasSpecAndField(const SdfPath &path, const TfToken &fieldName,
74  VtValue *value, SdfSpecType *specType) const;
75 
76  SDF_API
77  virtual VtValue Get(const SdfPath& path,
78  const TfToken& fieldName) const;
79  SDF_API
80  virtual void Set(const SdfPath& path, const TfToken& fieldName,
81  const VtValue & value);
82  SDF_API
83  virtual void Set(const SdfPath& path, const TfToken& fieldName,
85  SDF_API
86  virtual void Erase(const SdfPath& path,
87  const TfToken& fieldName);
88  SDF_API
89  virtual std::vector<TfToken> List(const SdfPath& path) const;
90 
91  SDF_API
92  virtual std::set<double>
93  ListAllTimeSamples() const;
94 
95  SDF_API
96  virtual std::set<double>
97  ListTimeSamplesForPath(const SdfPath& path) const;
98 
99  SDF_API
100  virtual bool
101  GetBracketingTimeSamples(double time, double* tLower, double* tUpper) const;
102 
103  SDF_API
104  virtual size_t
105  GetNumTimeSamplesForPath(const SdfPath& path) const;
106 
107  SDF_API
108  virtual bool
110  double time,
111  double* tLower, double* tUpper) const;
112 
113  SDF_API
114  virtual bool
116  double* tPrevious) const;
117 
118  SDF_API
119  virtual bool
120  QueryTimeSample(const SdfPath& path, double time,
121  SdfAbstractDataValue *optionalValue) const;
122  SDF_API
123  virtual bool
124  QueryTimeSample(const SdfPath& path, double time,
125  VtValue *value) const;
126 
127  SDF_API
128  virtual void
129  SetTimeSample(const SdfPath& path, double time,
130  const VtValue & value);
131 
132  SDF_API
133  virtual void
134  EraseTimeSample(const SdfPath& path, double time);
135 
136 protected:
137  // SdfAbstractData overrides
138  SDF_API
139  virtual void _VisitSpecs(SdfAbstractDataSpecVisitor* visitor) const;
140 
141 private:
142  const VtValue* _GetSpecTypeAndFieldValue(const SdfPath& path,
143  const TfToken& field,
144  SdfSpecType* specType) const;
145 
146  const VtValue* _GetFieldValue(const SdfPath& path,
147  const TfToken& field) const;
148 
149  VtValue* _GetMutableFieldValue(const SdfPath& path,
150  const TfToken& field);
151 
152  VtValue* _GetOrCreateFieldValue(const SdfPath& path,
153  const TfToken& field);
154 
155 private:
156  // Backing storage for a single "spec" -- prim, property, etc.
157  typedef std::pair<TfToken, VtValue> _FieldValuePair;
158  struct _SpecData {
159  _SpecData() : specType(SdfSpecTypeUnknown) {}
160 
161  SdfSpecType specType;
162  std::vector<_FieldValuePair> fields;
163  };
164 
165  // Hashtable storing _SpecData.
166  typedef SdfPath _Key;
167  typedef SdfPath::Hash _KeyHash;
168  typedef TfHashMap<_Key, _SpecData, _KeyHash> _HashTable;
169 
170  _HashTable _data;
171 };
172 
174 
175 #endif // PXR_USD_SDF_DATA_H
virtual SDF_API bool HasSpec(const SdfPath &path) const
Return true if this data has a spec for path.
virtual SDF_API bool GetBracketingTimeSamples(double time, double *tLower, double *tUpper) const
GT_API const UT_StringHolder time
virtual SDF_API SdfSpecType GetSpecType(const SdfPath &path) const
GLsizei const GLfloat * value
Definition: glcorearb.h:824
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
virtual SDF_API void EraseSpec(const SdfPath &path)
virtual SDF_API ~SdfData()
PXR_NAMESPACE_OPEN_SCOPE TF_DECLARE_WEAK_AND_REF_PTRS(SdfData)
Definition: token.h:70
virtual SDF_API size_t GetNumTimeSamplesForPath(const SdfPath &path) const
SdfData()
Definition: data.h:35
virtual SDF_API bool StreamsData() const
SdfAbstractData overrides.
virtual SDF_API bool QueryTimeSample(const SdfPath &path, double time, SdfAbstractDataValue *optionalValue) const
Definition: data.h:32
virtual SDF_API std::set< double > ListAllTimeSamples() const
Definition: path.h:273
virtual SDF_API void _VisitSpecs(SdfAbstractDataSpecVisitor *visitor) const
#define SDF_API
Definition: api.h:23
virtual SDF_API std::vector< TfToken > List(const SdfPath &path) const
Return the names of all the fields that are set at path.
virtual SDF_API void CreateSpec(const SdfPath &path, SdfSpecType specType)
virtual SDF_API void MoveSpec(const SdfPath &oldPath, const SdfPath &newPath)
virtual SDF_API bool Has(const SdfPath &path, const TfToken &fieldName, SdfAbstractDataValue *value) const
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1425
virtual SDF_API VtValue Get(const SdfPath &path, const TfToken &fieldName) const
SdfSpecType
Definition: types.h:68
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
virtual SDF_API void Erase(const SdfPath &path, const TfToken &fieldName)
Remove the field at path and fieldName, if one exists.
virtual SDF_API bool GetBracketingTimeSamplesForPath(const SdfPath &path, double time, double *tLower, double *tUpper) const
virtual SDF_API std::set< double > ListTimeSamplesForPath(const SdfPath &path) const
virtual SDF_API void EraseTimeSample(const SdfPath &path, double time)
virtual SDF_API void SetTimeSample(const SdfPath &path, double time, const VtValue &value)
virtual SDF_API bool IsDetached() const
virtual SDF_API bool GetPreviousTimeSampleForPath(const SdfPath &path, double time, double *tPrevious) const
Definition: value.h:146
virtual SDF_API bool HasSpecAndField(const SdfPath &path, const TfToken &fieldName, SdfAbstractDataValue *value, SdfSpecType *specType) const
virtual SDF_API void Set(const SdfPath &path, const TfToken &fieldName, const VtValue &value)