47 const std::type_info& GetTypeInfo()
const override;
52 void NewEmpty(
size_t size,
DataHolder* destData)
const override;
57 void NewSingle(
DataHolder* destData)
const override;
62 void NewSparse(
size_t size,
size_t first,
size_t last,
68 void NewDense(
size_t size,
DataHolder* destData)
const override;
86 void CloneSubset(
const VdfMask& mask,
113 void Expand(
size_t first,
size_t last)
override;
119 size_t GetSize()
const override;
124 size_t GetNumStoredElements()
const override;
130 Vt_ArrayForeignDataSource* GetSharedSource()
const override;
135 Info GetInfo()
override;
141 size_t EstimateElementMemory()
const override;
169 class _SharedSource:
public Vt_ArrayForeignDataSource
183 bool IsUnique()
const {
184 return _refCount.load(std::memory_order_acquire) == 1;
189 TfDelegatedCountIncrement(_SharedSource* s)
noexcept {
190 s->_refCount.fetch_add(1, std::memory_order_relaxed);
194 TfDelegatedCountDecrement(_SharedSource* s)
noexcept {
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);
208 TfDelegatedCountPtr<_SharedSource> _source;