VTK  9.7.1
vtkDataObjectImplicitBackendInterface.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
3 
4 #ifndef vtkDataObjectImplicitBackendInterface_h
5 #define vtkDataObjectImplicitBackendInterface_h
6 
7 #include "vtkCommonDataModelModule.h"
8 
10 #include "vtkDataArrayMeta.h"
11 #include "vtkSmartPointer.h" // for internal member
12 #include "vtkWeakPointer.h" // for internal member
13 
58 VTK_ABI_NAMESPACE_BEGIN
59 
60 class vtkDataObject;
61 class vtkObject;
62 
63 template <typename ValueType>
64 struct VTKCOMMONDATAMODEL_EXPORT vtkDataObjectImplicitBackendInterface
65 {
67  vtkDataObject* dataobject, const std::string& arrayName, int attributeType);
68 
69  virtual ~vtkDataObjectImplicitBackendInterface();
70 
78  ValueType operator()(vtkIdType idx) const;
79 
80 protected:
85  void OnDataObjectDeleted(vtkObject* caller, unsigned long eventId, void* calldata);
86 
91  virtual ValueType GetValueFromDataObject(vtkIdType idx) const = 0;
92 
96  vtkDataObject* GetDataObject() { return this->DataObject; }
97 
98 private:
103  vtkDataArray* GetArray();
104 
106 
108  std::string ArrayName;
109  int AttributeType;
110 };
111 
112 VTK_ABI_NAMESPACE_END
113 #endif
114 
115 #if defined(VTK_DATAOBJECT_BACKEND_INSTANTIATING)
116 
117 #define VTK_INSTANTIATE_DATAOBJECT_BACKEND(ValueType) \
118  VTK_ABI_NAMESPACE_BEGIN \
119  template struct VTKCOMMONDATAMODEL_EXPORT vtkDataObjectImplicitBackendInterface<ValueType>; \
120  VTK_ABI_NAMESPACE_END
121 
122 #elif defined(VTK_USE_EXTERN_TEMPLATE)
123 
124 #ifndef VTK_DATAOBJECT_BACKEND_TEMPLATE_EXTERN
125 #define VTK_DATAOBJECT_BACKEND_TEMPLATE_EXTERN
126 #ifdef _MSC_VER
127 #pragma warning(push)
128 #pragma warning(disable : 4910) // extern and dllexport incompatible
129 #endif
130 VTK_ABI_NAMESPACE_BEGIN
132  extern template struct VTKCOMMONDATAMODEL_EXPORT vtkDataObjectImplicitBackendInterface);
133 VTK_ABI_NAMESPACE_END
134 #ifdef _MSC_VER
135 #pragma warning(pop)
136 #endif
137 #endif // VTK_DATAOBJECT_IMPLICIT_BACKEND_TEMPLATE_EXTERN
138 
139 #endif
abstract base class for most VTK objects
Definition: vtkObject.h:52
A utility structure that can be used as a base for implicit array backend that relies on a vtkDataObj...
Hold a reference to a vtkObjectBase instance.
Definition: vtkMeta.h:23
int vtkIdType
Definition: vtkType.h:363
This file contains a variety of metaprogramming constructs for working with vtkDataArrays.
#define vtkExternTemplateMacro(decl)
A macro to declare extern templates for all numerical types.
Definition: vtkType.h:458
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
vtkDataObject * GetDataObject()
Get the internal dataobject.
general representation of visualization data
Definition: vtkDataObject.h:55