HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
vectorImpl_Empty.h
Go to the documentation of this file.
1 //
2 // Copyright 2025 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 #ifndef PXR_EXEC_VDF_VECTOR_IMPL_EMPTY_H
8 #define PXR_EXEC_VDF_VECTOR_IMPL_EMPTY_H
9 
10 #include "pxr/pxr.h"
11 
12 #include "pxr/exec/vdf/api.h"
16 
18 
19 /// \brief Implements a Vdf_VectorData storage that is always empty.
20 ///
21 /// Note that the reason this empty holder is templated is because VdfVector
22 /// always needs to know the type and it gets that information from its
23 /// Vdf_VectorData's.
24 ///
25 template<typename TYPE>
27  : public Vdf_VectorDataTyped<TYPE>
28 {
29  static_assert(
30  !Vdf_IsBoxedContainer<TYPE>,
31  "Only Vdf_VectorImplBoxed may hold boxed values");
32 
33 public :
34 
35  explicit Vdf_VectorImplEmpty(size_t size) : _size(size) {}
36 
38  _size(sourceData._size)
39  {}
40 
41  void MoveInto(Vdf_VectorData::DataHolder *destData) override
42  {
43  destData->Destroy();
44  destData->New< Vdf_VectorImplEmpty >(*this);
45  }
46 
47  void Clone(Vdf_VectorData::DataHolder *destData) const override
48  {
49  destData->Destroy();
50  destData->New< Vdf_VectorImplEmpty >(_size);
51  }
52 
53  void CloneSubset(const VdfMask &mask,
54  Vdf_VectorData::DataHolder *destData) const override
55  {
56  Clone(destData);
57  }
58 
59  void Box(const VdfMask::Bits &bits,
60  Vdf_VectorData::DataHolder *destData) const override
61  {
62  destData->Destroy();
63  destData->New< Vdf_VectorImplEmpty >(_size);
64  }
65 
66  void Merge(const VdfMask::Bits &bits,
67  Vdf_VectorData::DataHolder *destData) const override
68  {
69  // Nothing to do here.
70  }
71 
72  size_t GetSize() const override
73  {
74  return _size;
75  }
76 
77  size_t GetNumStoredElements() const override
78  {
79  return 0;
80  }
81 
83  {
84  return Vdf_VectorData::Info(
85  /* data = */ NULL,
86  /* size = */ _size);
87  }
88 
89 private:
90 
91  size_t _size;
92 
93 };
94 
95 #define VDF_DECLARE_EXTERN_VECTOR_IMPL_EMPTY(type) \
96  extern template class VDF_API_TYPE Vdf_VectorImplEmpty<type>;
98 #undef VDF_DECLARE_EXTERN_VECTOR_IMPL_EMPTY
99 
101 
102 #endif
#define PXR_NAMESPACE_OPEN_SCOPE
Definition: pxr.h:73
#define VDF_FOR_EACH_COMMON_TYPE(macro)
VDF_FOR_EACH_COMMON_TYPE expands macro for each common type.
Vdf_VectorData::Info GetInfo() override
void Merge(const VdfMask::Bits &bits, Vdf_VectorData::DataHolder *destData) const override
A VdfMask is placed on connections to specify the data flowing through them.
Definition: mask.h:36
Vdf_VectorImplEmpty(const Vdf_VectorImplEmpty &sourceData)
void CloneSubset(const VdfMask &mask, Vdf_VectorData::DataHolder *destData) const override
Fast, compressed bit array which is capable of performing logical operations without first decompress...
#define VDF_DECLARE_EXTERN_VECTOR_IMPL_EMPTY(type)
virtual void Clone(DataHolder *destData) const =0
Vdf_VectorImplEmpty(size_t size)
void Clone(Vdf_VectorData::DataHolder *destData) const override
GLint GLuint mask
Definition: glcorearb.h:124
size_t GetSize() const override
void Box(const VdfMask::Bits &bits, Vdf_VectorData::DataHolder *destData) const override
size_t GetNumStoredElements() const override
GLsizeiptr size
Definition: glcorearb.h:664
#define VDF_API_TYPE
Definition: api.h:26
Implements a Vdf_VectorData storage that is always empty.
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
void MoveInto(Vdf_VectorData::DataHolder *destData) override