OpenVDB  7.2.0
PointExecutable.h
Go to the documentation of this file.
1 // Copyright Contributors to the OpenVDB Project
2 // SPDX-License-Identifier: MPL-2.0
3 
11 
12 #ifndef OPENVDB_AX_COMPILER_POINT_EXECUTABLE_HAS_BEEN_INCLUDED
13 #define OPENVDB_AX_COMPILER_POINT_EXECUTABLE_HAS_BEEN_INCLUDED
14 
15 #include "CustomData.h"
16 #include "AttributeRegistry.h"
17 
18 #include <openvdb/openvdb.h>
19 #include <openvdb/version.h>
21 
22 #include <unordered_map>
23 
24 class TestPointExecutable;
25 
26 namespace llvm {
27 class ExecutionEngine;
28 class LLVMContext;
29 }
30 
31 namespace openvdb {
33 namespace OPENVDB_VERSION_NAME {
34 namespace ax {
35 
36 class Compiler;
37 
40 {
41 public:
42  using Ptr = std::shared_ptr<PointExecutable>;
43  ~PointExecutable();
44 
48  PointExecutable(const PointExecutable& other);
49 
51 
53  void execute(points::PointDataGrid& grid) const;
54 
56 
63  void setGroupExecution(const std::string& name);
66  const std::string& getGroupExecution() const;
67 
73  void setCreateMissing(const bool flag);
75  bool getCreateMissing() const;
76 
80  void setGrainSize(const size_t grain);
82  size_t getGrainSize() const;
83 
85 
86  // @brief deprecated methods
89  const std::string* const group,
90  const bool create) const
91  {
92  PointExecutable copy(*this);
93  if (group) copy.setGroupExecution(*group);
94  copy.setCreateMissing(create);
95  copy.execute(grid);
96  }
97 
100  const std::string* const group) const
101  {
102  PointExecutable copy(*this);
103  if (group) copy.setGroupExecution(*group);
104  copy.execute(grid);
105  }
106 
108 
109  // foward declaration of settings for this executable
110  struct Settings;
111 
112 private:
113  friend class Compiler;
114  friend class ::TestPointExecutable;
115 
127  PointExecutable(const std::shared_ptr<const llvm::LLVMContext>& context,
128  const std::shared_ptr<const llvm::ExecutionEngine>& engine,
129  const AttributeRegistry::ConstPtr& attributeRegistry,
130  const CustomData::ConstPtr& customData,
131  const std::unordered_map<std::string, uint64_t>& functions);
132 
133 private:
134  // The Context and ExecutionEngine must exist _only_ for object lifetime
135  // management. The ExecutionEngine must be destroyed before the Context
136  const std::shared_ptr<const llvm::LLVMContext> mContext;
137  const std::shared_ptr<const llvm::ExecutionEngine> mExecutionEngine;
138  const AttributeRegistry::ConstPtr mAttributeRegistry;
139  const CustomData::ConstPtr mCustomData;
140  const std::unordered_map<std::string, uint64_t> mFunctionAddresses;
141  std::unique_ptr<Settings> mSettings;
142 };
143 
144 } // namespace ax
145 } // namespace OPENVDB_VERSION_NAME
146 } // namespace openvdb
147 
148 #endif // OPENVDB_AX_COMPILER_POINT_EXECUTABLE_HAS_BEEN_INCLUDED
149 
void setGroupExecution(const std::string &name)
Set a specific point group to execute over. The default is none, which corresponds to all points...
Definition: Compiler.h:31
#define OPENVDB_DEPRECATED
Definition: Platform.h:42
Object that encapsulates compiled AX code which can be executed on a target point grid...
Definition: PointExecutable.h:39
std::shared_ptr< PointExecutable > Ptr
Definition: PointExecutable.h:42
void execute(points::PointDataGrid &grid) const
executes compiled AX code on target grid
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:94
std::shared_ptr< const AttributeRegistry > ConstPtr
Definition: AttributeRegistry.h:40
OPENVDB_DEPRECATED void execute(points::PointDataGrid &grid, const std::string *const group, const bool create) const
Definition: PointExecutable.h:88
std::shared_ptr< const CustomData > ConstPtr
Definition: CustomData.h:47
Definition: openvdb/Exceptions.h:13
void setCreateMissing(const bool flag)
Set the behaviour when missing point attributes are accessed. Default behaviour is true...
The compiler class. This holds an llvm context and set of compiler options, and constructs executable...
Definition: Compiler.h:49
Library and file format version numbers.
These classes contain lists of expected attributes and volumes which are populated by compiler during...
Container class that associates a tree with a transform and metadata.
Definition: Grid.h:28
Attribute-owned data structure for points. Point attributes are stored in leaf nodes and ordered by v...
Access to the CustomData class which can provide custom user user data to the OpenVDB AX Compiler...
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:146
OPENVDB_DEPRECATED void execute(points::PointDataGrid &grid, const std::string *const group) const
Definition: PointExecutable.h:99