7 #ifndef PXR_EXEC_VDF_VECTOR_IMPL_SHARED_H
8 #define PXR_EXEC_VDF_VECTOR_IMPL_SHARED_H
16 #include "pxr/base/vt/array.h"
38 Vdf_VectorImplShared(
const Vdf_VectorImplShared &o);
40 Vdf_VectorImplShared(Vdf_VectorImplShared &&o) noexcept;
42 ~Vdf_VectorImplShared()
override;
113 void Expand(
size_t first,
size_t last)
override;
119 size_t GetSize()
const override;
169 class _SharedSource:
public Vt_ArrayForeignDataSource
183 bool IsUnique()
const {
184 return _refCount.load(std::memory_order_acquire) == 1;
190 s->_refCount.fetch_add(1, std::memory_order_relaxed);
195 if (s->_refCount.fetch_sub(1, std::memory_order_release) == 1) {
196 std::atomic_thread_fence(std::memory_order_acquire);
203 static void _Detached(Vt_ArrayForeignDataSource* selfBase);
virtual void MoveInto(DataHolder *destData)=0
void TfDelegatedCountIncrement(VdfMask::_BitsImpl *p) noexcept
virtual size_t GetNumStoredElements() const =0
virtual VDF_API void Expand(size_t first, size_t last)
#define PXR_NAMESPACE_OPEN_SCOPE
A VdfMask is placed on connections to specify the data flowing through them.
Abstract base class for storing data in a VdfVector.
Fast, compressed bit array which is capable of performing logical operations without first decompress...
Implements a Vdf_VectorData storage the supports reference counted sharing of other vector implementa...
virtual void NewSparse(size_t size, size_t first, size_t last, DataHolder *destData) const =0
virtual void NewEmpty(size_t size, DataHolder *destData) const =0
virtual void NewSingle(DataHolder *destData) const =0
virtual size_t EstimateElementMemory() const =0
virtual void Clone(DataHolder *destData) const =0
virtual VDF_API Vt_ArrayForeignDataSource * GetSharedSource() const
virtual const std::type_info & GetTypeInfo() const =0
virtual void CloneSubset(const VdfMask &mask, DataHolder *destData) const =0
__hostdev__ uint64_t last(uint32_t i) const
virtual size_t GetSize() const =0
#define PXR_NAMESPACE_CLOSE_SCOPE
virtual void Box(const VdfMask::Bits &bits, DataHolder *destData) const =0
virtual void NewDense(size_t size, DataHolder *destData) const =0
virtual void Merge(const VdfMask::Bits &bits, DataHolder *destData) const =0
void TfDelegatedCountDecrement(VdfMask::_BitsImpl *p) noexcept