24#ifndef PXR_USD_SDF_CHANGE_LIST_H
25#define PXR_USD_SDF_CHANGE_LIST_H
30#include "pxr/usd/sdf/api.h"
31#include "pxr/usd/sdf/path.h"
37#include <unordered_map>
40PXR_NAMESPACE_OPEN_SCOPE
44 std::pair<SdfLayerHandle, SdfChangeList>
45 > SdfLayerChangeListVec;
62 enum SubLayerChangeType {
68 void DidReplaceLayerContent();
69 void DidReloadLayerContent();
70 void DidChangeLayerResolvedPath();
71 void DidChangeLayerIdentifier(
const std::string &oldIdentifier);
72 void DidChangeSublayerPaths(
const std::string &subLayerPath,
73 SubLayerChangeType changeType);
75 void DidAddPrim(
const SdfPath &primPath,
bool inert);
76 void DidRemovePrim(
const SdfPath &primPath,
bool inert);
78 void DidReorderPrims(
const SdfPath &parentPath);
79 void DidChangePrimName(
const SdfPath &oldPath,
const SdfPath &newPath);
80 void DidChangePrimVariantSets(
const SdfPath &primPath);
81 void DidChangePrimInheritPaths(
const SdfPath &primPath);
82 void DidChangePrimReferences(
const SdfPath &primPath);
83 void DidChangePrimSpecializes(
const SdfPath &primPath);
85 void DidAddProperty(
const SdfPath &propPath,
bool hasOnlyRequiredFields);
86 void DidRemoveProperty(
const SdfPath &propPath,
bool hasOnlyRequiredFields);
87 void DidReorderProperties(
const SdfPath &propPath);
88 void DidChangePropertyName(
const SdfPath &oldPath,
const SdfPath &newPath);
90 void DidChangeAttributeTimeSamples(
const SdfPath &attrPath);
91 void DidChangeAttributeConnection(
const SdfPath &attrPath);
92 void DidChangeRelationshipTargets(
const SdfPath &relPath);
93 void DidAddTarget(
const SdfPath &targetPath);
94 void DidRemoveTarget(
const SdfPath &targetPath);
119 typedef std::pair<VtValue, VtValue> InfoChange;
127 InfoChangeVec::const_iterator
129 InfoChangeVec::const_iterator iter = infoChanged.begin();
130 for (InfoChangeVec::const_iterator end = infoChanged.end();
131 iter != end; ++iter) {
132 if (iter->first == key) {
145 typedef std::pair<std::string, SubLayerChangeType> SubLayerChange;
146 std::vector<SubLayerChange> subLayerChanges;
152 std::string oldIdentifier;
157 memset(
this, 0,
sizeof(*
this));
161 bool didChangeIdentifier:1;
162 bool didChangeResolvedPath:1;
163 bool didReplaceContent:1;
164 bool didReloadContent:1;
167 bool didReorderChildren:1;
168 bool didReorderProperties:1;
174 bool didChangePrimVariantSets:1;
175 bool didChangePrimInheritPaths:1;
176 bool didChangePrimSpecializes:1;
177 bool didChangePrimReferences:1;
180 bool didChangeAttributeTimeSamples:1;
181 bool didChangeAttributeConnection:1;
182 bool didChangeRelationshipTargets:1;
184 bool didRemoveTarget:1;
187 bool didAddInertPrim:1;
188 bool didAddNonInertPrim:1;
189 bool didRemoveInertPrim:1;
190 bool didRemoveNonInertPrim:1;
193 bool didAddPropertyWithOnlyRequiredFields:1;
194 bool didAddProperty:1;
195 bool didRemovePropertyWithOnlyRequiredFields:1;
196 bool didRemoveProperty:1;
208 const EntryList & GetEntryList()
const {
return _entries; }
212 Entry
const &GetEntry(
const SdfPath & )
const;
214 using const_iterator = EntryList::const_iterator;
217 const_iterator FindEntry(
SdfPath const &)
const;
219 const_iterator begin()
const {
220 return _entries.begin();
223 const_iterator cbegin()
const {
224 return _entries.cbegin();
227 const_iterator end()
const {
228 return _entries.end();
231 const_iterator cend()
const {
232 return _entries.cend();
237 a._entries.
swap(b._entries);
238 a._entriesAccel.swap(b._entriesAccel);
241 Entry &_GetEntry(
SdfPath const &);
246 Entry &_MoveEntry(
SdfPath const &oldPath,
SdfPath const &newPath);
248 EntryList::iterator _MakeNonConstIterator(EntryList::const_iterator i);
250 Entry &_AddNewEntry(
SdfPath const &path);
252 void _EraseEntry(
SdfPath const &);
254 void _RebuildAccel();
257 using _AccelTable = std::unordered_map<SdfPath, size_t, SdfPath::Hash>;
258 std::unique_ptr<_AccelTable> _entriesAccel;
259 static constexpr size_t _AccelThreshold = 64;
265PXR_NAMESPACE_CLOSE_SCOPE
A list of scene description modifications, organized by the namespace paths where the changes occur.
TfSmallVector< std::pair< SdfPath, Entry >, 1 > EntryList
Map of change entries at various paths in a layer.
A path value used to locate objects in layers or scenegraphs.
This is a small-vector class with local storage optimization, the local storage can be specified via ...
void swap(TfSmallVector &rhs)
Swap two vector instances.
Token for efficient comparison, assignment, and hashing of known strings.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
GF_API std::ostream & operator<<(std::ostream &, const GfBBox3d &)
Output a GfBBox3d using the format [(range) matrix zeroArea].
Entry of changes at a single path in namespace.
bool HasInfoChange(TfToken const &key) const
Return true if this entry has an info change for key, false otherwise.
InfoChangeVec::const_iterator FindInfoChange(TfToken const &key) const
Return the iterator in infoChanged whose first element is key, or infoChanged.end() if there is no su...