VTK
vtkDataArrayDispatcher.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkDataArrayDispatcher.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
52 #ifndef vtkDataArrayDispatcher_h
53 #define vtkDataArrayDispatcher_h
54 
55 #include "vtkType.h" //Required for vtkIdType
56 #include "vtkDataArray.h" //required for constructor of the vtkDataArrayFunctor
57 #include <map> //Required for the storage of template params to runtime params
58 
60 // Object that is passed to all functor that are used with this class
61 // This allows the user the ability to find info about the size
63 template<typename T>
65 {
66  typedef T ValueType;
67 
71 
73  NumberOfTuples(array->GetNumberOfTuples()),
74  NumberOfComponents(array->GetNumberOfComponents()),
75  RawPointer(static_cast<ValueType*>(array->GetVoidPointer(0)))
76  {}
77 };
78 
80 // class template FunctorDispatcher
82 template
83  <
84  class DefaultFunctorType,
85  typename ReturnType = void
86  >
88 {
89 public:
90 
115  vtkDataArrayDispatcher(DefaultFunctorType& f);
116 
122 
123  virtual ~vtkDataArrayDispatcher();
124 
128  ReturnType Go(vtkDataArray* lhs);
129 
130 protected:
131  DefaultFunctorType* DefaultFunctor;
133 };
134 
135 //We are making all these method non-inline to reduce compile time overhead
136 
137 //----------------------------------------------------------------------------
138 template<class DefaultFunctorType,typename ReturnType>
140  DefaultFunctor(&fun),
141  OwnsFunctor(false)
142 {
143 }
144 
145 //----------------------------------------------------------------------------
146 template<class DefaultFunctorType,typename ReturnType>
148  DefaultFunctor(new DefaultFunctorType()),
149  OwnsFunctor(true)
150 {
151 }
152 
153 //----------------------------------------------------------------------------
154 template<class DefaultFunctorType,typename ReturnType>
156 {
157  if(OwnsFunctor)
158  {
159  delete this->DefaultFunctor;
160  }
161 }
162 
163 //----------------------------------------------------------------------------
164 template <class DefaultFunctorType,typename ReturnType>
167 {
168  switch(lhs->GetDataType())
169  {
170  vtkTemplateMacro(return (*this->DefaultFunctor) (
172  }
173  return ReturnType();
174 }
175 
176 #endif // vtkDataArrayDispatcher_h
177 // VTK-HeaderTest-Exclude: vtkDataArrayDispatcher.h
vtkIdType
int vtkIdType
Definition: vtkType.h:347
vtkDataArrayDispatcher::OwnsFunctor
bool OwnsFunctor
Definition: vtkDataArrayDispatcher.h:132
vtkDataArrayDispatcherPointer::NumberOfTuples
vtkIdType NumberOfTuples
Definition: vtkDataArrayDispatcher.h:68
vtkDataArrayDispatcher
Dispatch to functor vtkDataArrayType.
Definition: vtkDataArrayDispatcher.h:87
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:48
vtkDataArrayDispatcherPointer::vtkDataArrayDispatcherPointer
vtkDataArrayDispatcherPointer(vtkDataArray *array)
Definition: vtkDataArrayDispatcher.h:72
vtkDataArrayDispatcher::vtkDataArrayDispatcher
vtkDataArrayDispatcher()
Default constructor which will create an instance of the DefaultFunctorType and use that single insta...
Definition: vtkDataArrayDispatcher.h:147
vtkType.h
vtkDataArrayDispatcherPointer
Definition: vtkDataArrayDispatcher.h:64
vtkDataArrayDispatcherPointer::ValueType
T ValueType
Definition: vtkDataArrayDispatcher.h:66
vtkAbstractArray::GetDataType
virtual int GetDataType()=0
Return the underlying data type.
vtkDataArrayDispatcher::~vtkDataArrayDispatcher
virtual ~vtkDataArrayDispatcher()
Definition: vtkDataArrayDispatcher.h:155
vtkDataArrayDispatcher::Go
ReturnType Go(vtkDataArray *lhs)
Execute the default functor with the passed in vtkDataArray;.
Definition: vtkDataArrayDispatcher.h:166
vtkDataArrayDispatcher::DefaultFunctor
DefaultFunctorType * DefaultFunctor
Definition: vtkDataArrayDispatcher.h:131
vtkDataArray.h
vtkDataArrayDispatcherPointer::NumberOfComponents
vtkIdType NumberOfComponents
Definition: vtkDataArrayDispatcher.h:69
vtkDataArrayDispatcherPointer::RawPointer
ValueType * RawPointer
Definition: vtkDataArrayDispatcher.h:70