VTK
Portals.h
Go to the documentation of this file.
1 //=============================================================================
2 //
3 // Copyright (c) Kitware, Inc.
4 // All rights reserved.
5 // See LICENSE.txt for details.
6 //
7 // This software is distributed WITHOUT ANY WARRANTY; without even
8 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
9 // PURPOSE. See the above copyright notice for more information.
10 //
11 // Copyright 2012 Sandia Corporation.
12 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
13 // the U.S. Government retains certain rights in this software.
14 //
15 //=============================================================================
16 
17 #ifndef vtkmlib_Portals_h
18 #define vtkmlib_Portals_h
19 
20 #include "vtkAcceleratorsVTKmModule.h"
21 #include "vtkmConfig.h" //required for general vtkm setup
22 #include "PortalTraits.h"
23 #include "vtkmTags.h"
24 
25 class vtkDataArray;
26 class vtkPoints;
27 
28 #include <vtkm/cont/internal/IteratorFromArrayPortal.h>
29 
30 namespace tovtkm {
31 
32 template <typename Type, typename VTKDataArrayType_>
33 class VTKM_ALWAYS_EXPORT vtkArrayPortal
34 {
35  static const int NUM_COMPONENTS = vtkm::VecTraits<Type>::NUM_COMPONENTS;
36 
37 public:
38  typedef VTKDataArrayType_ VTKDataArrayType;
41 
43 
44  vtkArrayPortal(VTKDataArrayType* array, vtkm::Id size);
45 
46  vtkm::Id GetNumberOfValues() const
47  {
48  return this->Size;
49  }
50 
51  VTKM_SUPPRESS_EXEC_WARNINGS
52  VTKM_EXEC
53  ValueType Get(vtkm::Id index) const;
54 
55  void Set(vtkm::Id index, const ValueType& value) const;
56 
57  typedef vtkm::cont::internal::IteratorFromArrayPortal<vtkArrayPortal>
59 
61  {
62  return IteratorType(*this, 0);
63  }
64 
66  {
67  return IteratorType(*this, this->Size);
68  }
69 
71  {
72  return this->VTKData;
73  }
74 
75 private:
76  VTKDataArrayType* VTKData;
77  vtkm::Id Size;
78 };
79 
80 template <typename Type> class VTKM_ALWAYS_EXPORT vtkPointsPortal
81 {
82  static const int NUM_COMPONENTS = vtkm::VecTraits<Type>::NUM_COMPONENTS;
83 
84 public:
87 
89 
91 
96  template <typename OtherType>
98 
99  vtkm::Id GetNumberOfValues() const
100  {
101  return this->Size;
102  }
103 
104  VTKM_SUPPRESS_EXEC_WARNINGS
105  VTKM_EXEC
106  ValueType Get(vtkm::Id index) const;
107 
108  void Set(vtkm::Id index, const ValueType& value) const;
109 
110  typedef vtkm::cont::internal::IteratorFromArrayPortal<vtkPointsPortal>
112 
114  {
115  return IteratorType(*this, 0);
116  }
117 
119  {
120  return IteratorType(*this, this->Size);
121  }
122 
124  {
125  return Points;
126  }
127 
128 private:
129  vtkPoints* Points;
130  ComponentType* Array;
131  vtkm::Id Size;
132 };
133 }
134 
135 #define VTKM_TEMPLATE_EXPORT_ArrayPortal(T, S) \
136  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
137  vtkArrayPortal<const T, S<T>>; \
138  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT vtkArrayPortal<T, S<T>>; \
139  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
140  vtkArrayPortal<const vtkm::Vec<T, 2>, S<T>>; \
141  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
142  vtkArrayPortal<vtkm::Vec<T, 2>, S<T>>; \
143  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
144  vtkArrayPortal<const vtkm::Vec<T, 3>, S<T>>; \
145  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
146  vtkArrayPortal<vtkm::Vec<T, 3>, S<T>>; \
147  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
148  vtkArrayPortal<const vtkm::Vec<T, 4>, S<T>>; \
149  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
150  vtkArrayPortal<vtkm::Vec<T, 4>, S<T>>;
151 
152 #define VTKM_TEMPLATE_IMPORT_ArrayPortal(T, S) \
153  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT vtkArrayPortal<const T, S<T>>; \
154  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT vtkArrayPortal<T, S<T>>; \
155  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
156  vtkArrayPortal<const vtkm::Vec<T, 2>, S<T>>; \
157  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
158  vtkArrayPortal<vtkm::Vec<T, 2>, S<T>>; \
159  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
160  vtkArrayPortal<const vtkm::Vec<T, 3>, S<T>>; \
161  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
162  vtkArrayPortal<vtkm::Vec<T, 3>, S<T>>; \
163  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
164  vtkArrayPortal<const vtkm::Vec<T, 4>, S<T>>; \
165  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
166  vtkArrayPortal<vtkm::Vec<T, 4>, S<T>>;
167 
168 #ifndef vtkmlib_Portals_cxx
169 #include <vtkm/cont/internal/ArrayPortalFromIterators.h>
170 namespace tovtkm {
171 // T extern template instantiations
183 
195 
196 #if VTKM_SIZE_LONG_LONG == 8
199 
202 #endif
203 
204 extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT
205  vtkPointsPortal<vtkm::Vec<vtkm::Float32, 3> const>;
206 extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT
207  vtkPointsPortal<vtkm::Vec<vtkm::Float64, 3> const>;
208 extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT
209  vtkPointsPortal<vtkm::Vec<vtkm::Float32, 3>>;
210 extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT
211  vtkPointsPortal<vtkm::Vec<vtkm::Float64, 3>>;
212 }
213 
214 #endif // defined vtkmlib_Portals_cxx
215 
216 #include "Portals.hxx"
217 #endif // vtkmlib_Portals_h
typename vtkPortalTraits< Type >::Type ValueType
Definition: Portals.h:85
Struct-Of-Arrays implementation of vtkGenericDataArray.
IteratorType GetIteratorBegin() const
Definition: Portals.h:60
typename vtkPortalTraits< Type >::ComponentType ComponentType
Definition: Portals.h:40
vtkm::cont::internal::IteratorFromArrayPortal< vtkArrayPortal > IteratorType
Definition: Portals.h:58
typename vtkPortalTraits< Type >::ComponentType ComponentType
Definition: Portals.h:86
vtkm::cont::internal::IteratorFromArrayPortal< vtkPointsPortal > IteratorType
Definition: Portals.h:111
Array-Of-Structs implementation of vtkGenericDataArray.
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:48
IteratorType GetIteratorEnd() const
Definition: Portals.h:118
VTKM_TEMPLATE_EXPORT_ArrayPortal(char, vtkAOSDataArrayTemplate)
IteratorType GetIteratorBegin() const
Definition: Portals.h:113
vtkm::Id GetNumberOfValues() const
Definition: Portals.h:46
VTKDataArrayType * GetVtkData() const
Definition: Portals.h:70
vtkm::Id GetNumberOfValues() const
Definition: Portals.h:99
IteratorType GetIteratorEnd() const
Definition: Portals.h:65
typename std::remove_const< T >::type ComponentType
Definition: PortalTraits.h:32
vtkPoints * GetVtkData() const
Definition: Portals.h:123
VTKDataArrayType_ VTKDataArrayType
Definition: Portals.h:38
represent and manipulate 3D points
Definition: vtkPoints.h:33
typename vtkPortalTraits< Type >::Type ValueType
Definition: Portals.h:39