HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
wrapArrayEdit.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_BASE_VT_WRAP_ARRAY_EDIT_H
8 #define PXR_BASE_VT_WRAP_ARRAY_EDIT_H
9 
10 #include "pxr/pxr.h"
11 #include "pxr/base/vt/api.h"
12 #include "pxr/base/vt/arrayEdit.h"
13 #include "pxr/base/vt/arrayEditBuilder.h"
14 #include "pxr/base/vt/types.h"
15 #include "pxr/base/vt/wrapArray.h"
16 
17 #include "pxr/external/boost/python/class.hpp"
18 
19 #include <string>
20 
22 
23 template <class ArrayEdit>
25 {
26  using namespace pxr_boost::python;
27  using namespace Vt_WrapArray;
28 
29  using Array = typename ArrayEdit::Array;
30  using ElementType = typename ArrayEdit::ElementType;
31 
32  const std::string name = GetVtArrayName<Array>() + "Edit";
33 
34  class_<ArrayEdit>(name.c_str())
35  .def(init<ArrayEdit const &>())
36  .def(self == self)
37  .def(self != self)
38  .def("__hash__",
39  +[](ArrayEdit const &self) {
40  return TfHash{}(self);
41  })
42  .def("IsIdentity", &ArrayEdit::IsIdentity)
43  .def("ComposeOver",
44  +[](ArrayEdit const &self, ArrayEdit const &weaker) {
45  return self.ComposeOver(weaker);
46  })
47  .def("ComposeOver",
48  +[](ArrayEdit const &self, Array const &weaker) {
49  return self.ComposeOver(weaker);
50  })
51  ;
52 
53  using Builder = VtArrayEditBuilder<ElementType>;
54  class_<Builder>((name + "Builder").c_str())
55  .def("Write", &Builder::Write,
56  (arg("elem"), arg("index")), return_self<>())
57  .def("WriteRef", &Builder::WriteRef,
58  (arg("srcIndex"), arg("dstIndex")), return_self<>())
59  .def("Insert", &Builder::Insert,
60  (arg("elem"), arg("index")), return_self<>())
61  .def("InsertRef", &Builder::InsertRef,
62  (arg("srcIndex"), arg("dstIndex")), return_self<>())
63  .def("Prepend", &Builder::Prepend,
64  (arg("elem")), return_self<>())
65  .def("PrependRef", &Builder::PrependRef,
66  (arg("srcIndex")), return_self<>())
67  .def("Append", &Builder::Append, (arg("elem")), return_self<>())
68  .def("AppendRef", &Builder::AppendRef,
69  (arg("srcIndex")), return_self<>())
70  .def("EraseRef", &Builder::EraseRef, (arg("index")), return_self<>())
71  .def("MinSize",
72  +[](Builder &self, int64_t size) {
73  self.MinSize(size);
74  },
75  (arg("size")), return_self<>())
76  .def("MinSize",
77  +[](Builder &self, int64_t size, ElementType const &fill) {
78  self.MinSize(size, fill);
79  }, (arg("size"), arg("fill")), return_self<>())
80  .def("MaxSize", &Builder::MaxSize, (arg("size")), return_self<>())
81  .def("SetSize",
82  +[](Builder &self, int64_t size) {
83  self.SetSize(size);
84  }, (arg("size")), return_self<>())
85  .def("SetSize",
86  +[](Builder &self, int64_t size, ElementType const &fill) {
87  self.SetSize(size, fill);
88  }, (arg("size"), arg("fill")), return_self<>())
89  .def("FinalizeAndReset", &Builder::FinalizeAndReset)
90  .def("Optimize", +[](ArrayEdit edit) {
91  return Builder::Optimize(std::move(edit));
92  }, (arg("edit")))
93  .staticmethod("Optimize")
94  ;
95 }
96 
97 #define VT_WRAP_ARRAY_EDIT(unused, elem) \
98  VtWrapArrayEdit<VtArrayEdit< VT_TYPE(elem) > >();
99 
101 
102 #endif // PXR_BASE_VT_WRAP_ARRAY_EDIT_H
103 
Definition: ImfArray.h:45
PXR_NAMESPACE_OPEN_SCOPE void VtWrapArrayEdit()
Definition: wrapArrayEdit.h:24
#define PXR_NAMESPACE_OPEN_SCOPE
Definition: pxr.h:73
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
Definition: core.h:1859
FMT_NOINLINE FMT_CONSTEXPR auto fill(OutputIt it, size_t n, const fill_t< Char > &fill) -> OutputIt
Definition: format.h:1860
Definition: hash.h:472
OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER class IMF_EXPORT_TEMPLATE_TYPE Array
Definition: ImfForward.h:21
GLuint const GLchar * name
Definition: glcorearb.h:786
GLsizeiptr size
Definition: glcorearb.h:664
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
OIIO_UTIL_API const char * c_str(string_view str)