7 #ifndef PXR_EXEC_VDF_VECTOR_IMPL_CONTIGUOUS_H
8 #define PXR_EXEC_VDF_VECTOR_IMPL_CONTIGUOUS_H
21 #include "pxr/base/tf/mallocTag.h"
28 template <
typename TYPE>
33 !Vdf_IsBoxedContainer<TYPE>,
34 "Only Vdf_VectorImplBoxed may hold boxed values");
44 : _data(size ? new TYPE[size] : nullptr)
47 , _last(size ? size-1 : 0)
58 _AllocateSpace(size, first, last);
99 const size_t numUsed = _last - _first + 1;
100 _data =
new TYPE[numUsed];
110 _data(sourceData._data),
111 _size(sourceData._size),
112 _first(sourceData._first),
113 _last(sourceData._last)
115 sourceData._data = NULL;
116 sourceData._size = 0;
117 sourceData._first = 0;
118 sourceData._last = 0;
155 mask.
GetBits(),
sizeof(TYPE)) ) {
163 if (destCompressed) {
164 destCompressed->
Assign(_data - _first, mask);
168 _data - _first, mask.
GetBits() );
177 if (firstSet == _first && lastSet == _last) {
188 _data - _first, mask.
GetBits());
203 for (
size_t i = 0; i <
v.size(); ++i) {
204 v[i] = _data[offset + i];
209 v[i++] = _data[idx - _first];
227 info.
data,
"destData is not a Vdf_VectorImplContiguous.")) {
232 TYPE *typedDest =
static_cast<TYPE*
>(info.
data);
234 typedDest - info.
first, _data - _first, bits);
241 const size_t newFirst = _data ?
std::min(_first, first) :
first;
242 const size_t newLast = _data ?
std::max(_last, last) :
last;
246 if (_first == newFirst && _last == newLast) {
251 TYPE *oldData = _data;
254 const size_t newSize = newLast - newFirst + 1;
255 _data =
new TYPE[newSize];
261 _data + _first - newFirst, oldData, _last - _first + 1);
280 return _last - _first + 1;
313 void _AllocateSpace(
size_t size,
size_t firstIndex,
size_t lastIndex)
323 const size_t numUsed = _last - _first + 1;
324 _data =
new TYPE[numUsed];
336 #define VDF_DECLARE_EXTERN_VECTOR_IMPL_CONTIGUOUS(type) \
337 extern template class VDF_API_TYPE Vdf_VectorImplContiguous<type>;
339 #undef VDF_DECLARE_EXTERN_VECTOR_IMPL_CONTIGUOUS
~Vdf_VectorImplContiguous() override
bool IsSharable() const override
Vdf_VectorImplContiguous(size_t size, size_t first, size_t last)
size_t GetFirstSet() const
#define PXR_NAMESPACE_OPEN_SCOPE
Vdf_CompressedIndexMapping * compressedIndexMapping
AllSetView GetAllSetView() const
#define VDF_FOR_EACH_COMMON_TYPE(macro)
VDF_FOR_EACH_COMMON_TYPE expands macro for each common type.
void Expand(size_t first, size_t last) override
void Assign(const TYPE *data, const VdfMask &mask)
void CloneSubset(const VdfMask &mask, Vdf_VectorData::DataHolder *destData) const override
ImageBuf OIIO_API min(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
A VdfMask is placed on connections to specify the data flowing through them.
static void Copy(T *dest, const T *source, size_t size)
Vdf_VectorData::Info GetInfo() override
VdfMask::Bits const & GetBits() const
Fast, compressed bit array which is capable of performing logical operations without first decompress...
void Clone(Vdf_VectorData::DataHolder *destData) const override
static constexpr size_t _VectorSharingSize
Vdf_VectorImplContiguous(size_t size)
#define TF_DEV_AXIOM(cond)
Vdf_VectorImplContiguous(const TYPE *data, const VdfMask::Bits &bits)
void Merge(const VdfMask::Bits &bits, Vdf_VectorData::DataHolder *destData) const override
void MoveInto(Vdf_VectorData::DataHolder *destData) override
virtual void Clone(DataHolder *destData) const =0
Vdf_VectorImplContiguous(Vdf_VectorImplContiguous &&sourceData)
#define __ARCH_PRETTY_FUNCTION__
size_t GetLastSet() const
#define VDF_DECLARE_EXTERN_VECTOR_IMPL_CONTIGUOUS(type)
Implements a Vdf_VectorData storage that holds a boxed element.
__hostdev__ uint64_t last(uint32_t i) const
Implements a Vdf_VectorData storage that is always empty.
size_t GetLastSet() const
Base const * Get() const
Returns a Base pointer to the held instance.
static VDF_API bool ShouldStoreCompressed(const VdfMask::Bits &bits, int elementSize)
size_t GetNumStoredElements() const override
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
#define PXR_NAMESPACE_CLOSE_SCOPE
void Box(const VdfMask::Bits &bits, Vdf_VectorData::DataHolder *destData) const override
Vdf_VectorImplContiguous(const VdfMask::Bits &bits)
size_t GetSize() const override
size_t GetFirstSet() const
bool AreContiguouslySet() const
Implements a Vdf_VectorData storage that is holds a subset of a vector. The subset is determined by a...
Vdf_VectorImplContiguous(const Vdf_VectorImplContiguous &rhs)