7#ifndef PXR_EXEC_VDF_VECTOR_IMPL_SHARED_H
8#define PXR_EXEC_VDF_VECTOR_IMPL_SHARED_H
12#include "pxr/exec/vdf/api.h"
13#include "pxr/exec/vdf/vectorData.h"
15#include "pxr/base/tf/delegatedCountPtr.h"
20PXR_NAMESPACE_OPEN_SCOPE
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);
211PXR_NAMESPACE_CLOSE_SCOPE
Fast, compressed bit array which is capable of performing logical operations without first decompress...
Stores a pointer to a ValueType which uses TfDelegatedCountIncrement and TfDelegatedCountDecrement to...
Abstract base class for storing data in a VdfVector.
Implements a Vdf_VectorData storage the supports reference counted sharing of other vector implementa...
A VdfMask is placed on connections to specify the data flowing through them.