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 #ifndef __VTK_WRAP__
20 
21 #include "vtkAcceleratorsVTKmModule.h"
22 #include "vtkmConfig.h" //required for general vtkm setup
23 #include "PortalTraits.h"
24 #include "vtkmTags.h"
25 
26 class vtkDataArray;
27 class vtkPoints;
28 
29 #include <vtkm/cont/internal/IteratorFromArrayPortal.h>
30 
31 namespace tovtkm {
32 
33 template <typename Type, typename VTKDataArrayType_>
34 class VTKM_ALWAYS_EXPORT vtkArrayPortal
35 {
36  static const int NUM_COMPONENTS = vtkm::VecTraits<Type>::NUM_COMPONENTS;
37 
38 public:
39  typedef VTKDataArrayType_ VTKDataArrayType;
42 
44 
45  vtkArrayPortal(VTKDataArrayType* array, vtkm::Id size);
46 
47  vtkm::Id GetNumberOfValues() const
48  {
49  return this->Size;
50  }
51 
52  VTKM_SUPPRESS_EXEC_WARNINGS
53  VTKM_EXEC
54  inline ValueType Get(vtkm::Id index) const;
55 
56  inline void Set(vtkm::Id index, const ValueType& value) const;
57 
58  typedef vtkm::cont::internal::IteratorFromArrayPortal<vtkArrayPortal>
60 
62  {
63  return IteratorType(*this, 0);
64  }
65 
67  {
68  return IteratorType(*this, this->Size);
69  }
70 
72  {
73  return this->VTKData;
74  }
75 
76 private:
77  VTKDataArrayType* VTKData;
78  vtkm::Id Size;
79 };
80 
81 template <typename Type> class VTKM_ALWAYS_EXPORT vtkPointsPortal
82 {
83  static const int NUM_COMPONENTS = vtkm::VecTraits<Type>::NUM_COMPONENTS;
84 
85 public:
88 
90 
92 
93  vtkm::Id GetNumberOfValues() const
94  {
95  return this->Size;
96  }
97 
98  VTKM_SUPPRESS_EXEC_WARNINGS
99  VTKM_EXEC
100  inline ValueType Get(vtkm::Id index) const;
101 
102  inline void Set(vtkm::Id index, const ValueType& value) const;
103 
104  typedef vtkm::cont::internal::IteratorFromArrayPortal<vtkPointsPortal>
106 
108  {
109  return IteratorType(*this, 0);
110  }
111 
113  {
114  return IteratorType(*this, this->Size);
115  }
116 
118  {
119  return Points;
120  }
121 
122 private:
123  vtkPoints* Points;
124  ComponentType* Array;
125  vtkm::Id Size;
126 };
127 }
128 
129 #define VTKM_TEMPLATE_EXPORT_ArrayPortal(T, S) \
130  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
131  vtkArrayPortal<const T, S<T>>; \
132  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT vtkArrayPortal<T, S<T>>; \
133  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
134  vtkArrayPortal<const vtkm::Vec<T, 2>, S<T>>; \
135  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
136  vtkArrayPortal<vtkm::Vec<T, 2>, S<T>>; \
137  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
138  vtkArrayPortal<const vtkm::Vec<T, 3>, S<T>>; \
139  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
140  vtkArrayPortal<vtkm::Vec<T, 3>, S<T>>; \
141  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
142  vtkArrayPortal<const vtkm::Vec<T, 4>, S<T>>; \
143  extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
144  vtkArrayPortal<vtkm::Vec<T, 4>, S<T>>;
145 
146 #define VTKM_TEMPLATE_IMPORT_ArrayPortal(T, S) \
147  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT vtkArrayPortal<const T, S<T>>; \
148  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT vtkArrayPortal<T, S<T>>; \
149  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
150  vtkArrayPortal<const vtkm::Vec<T, 2>, S<T>>; \
151  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
152  vtkArrayPortal<vtkm::Vec<T, 2>, S<T>>; \
153  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
154  vtkArrayPortal<const vtkm::Vec<T, 3>, S<T>>; \
155  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
156  vtkArrayPortal<vtkm::Vec<T, 3>, S<T>>; \
157  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
158  vtkArrayPortal<const vtkm::Vec<T, 4>, S<T>>; \
159  template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT \
160  vtkArrayPortal<vtkm::Vec<T, 4>, S<T>>;
161 
162 #ifndef vtkmlib_Portals_cxx
163 #include <vtkm/cont/internal/ArrayPortalFromIterators.h>
164 namespace tovtkm {
165 // T extern template instantiations
177 
189 
190 #if VTKM_SIZE_LONG_LONG == 8
193 
196 #endif
197 
198 extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT
199  vtkPointsPortal<vtkm::Vec<vtkm::Float32, 3> const>;
200 extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT
201  vtkPointsPortal<vtkm::Vec<vtkm::Float64, 3> const>;
202 extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT
203  vtkPointsPortal<vtkm::Vec<vtkm::Float32, 3>>;
204 extern template class VTKACCELERATORSVTKM_TEMPLATE_EXPORT
205  vtkPointsPortal<vtkm::Vec<vtkm::Float64, 3>>;
206 }
207 
208 #endif // defined vtkmlib_Portals_cxx
209 
210 #include "Portals.hxx"
211 #endif
212 #endif // vtkmlib_Portals_h
vtkPoints
represent and manipulate 3D points
Definition: vtkPoints.h:33
tovtkm::vtkArrayPortal::ComponentType
typename vtkPortalTraits< Type >::ComponentType ComponentType
Definition: Portals.h:41
vtkX3D::value
Definition: vtkX3D.h:220
vtkSOADataArrayTemplate
Struct-Of-Arrays implementation of vtkGenericDataArray.
Definition: vtkSOADataArrayTemplate.h:38
tovtkm::vtkArrayPortal::GetNumberOfValues
vtkm::Id GetNumberOfValues() const
Definition: Portals.h:47
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:48
tovtkm::vtkArrayPortal::VTKDataArrayType
VTKDataArrayType_ VTKDataArrayType
Definition: Portals.h:39
tovtkm::vtkPortalTraits::ComponentType
typename std::remove_const< T >::type ComponentType
Definition: PortalTraits.h:32
vtkX3D::points
Definition: vtkX3D.h:446
tovtkm::vtkArrayPortal::IteratorType
vtkm::cont::internal::IteratorFromArrayPortal< vtkArrayPortal > IteratorType
Definition: Portals.h:59
tovtkm::vtkPointsPortal::ValueType
typename vtkPortalTraits< Type >::Type ValueType
Definition: Portals.h:86
tovtkm::vtkPointsPortal::GetIteratorBegin
IteratorType GetIteratorBegin() const
Definition: Portals.h:107
vtkX3D::size
Definition: vtkX3D.h:253
tovtkm::vtkPortalTraits::Type
ComponentType Type
Definition: PortalTraits.h:33
tovtkm::vtkPointsPortal::GetVtkData
vtkPoints * GetVtkData() const
Definition: Portals.h:117
tovtkm::vtkPointsPortal::GetIteratorEnd
IteratorType GetIteratorEnd() const
Definition: Portals.h:112
tovtkm::VTKM_TEMPLATE_EXPORT_ArrayPortal
VTKM_TEMPLATE_EXPORT_ArrayPortal(char, vtkAOSDataArrayTemplate)
tovtkm::vtkArrayPortal::GetIteratorBegin
IteratorType GetIteratorBegin() const
Definition: Portals.h:61
tovtkm::vtkPointsPortal::GetNumberOfValues
vtkm::Id GetNumberOfValues() const
Definition: Portals.h:93
tovtkm::vtkArrayPortal
Definition: Portals.h:34
tovtkm::vtkArrayPortal::GetVtkData
VTKDataArrayType * GetVtkData() const
Definition: Portals.h:71
vtkAOSDataArrayTemplate
Array-Of-Structs implementation of vtkGenericDataArray.
Definition: vtkAOSDataArrayTemplate.h:41
tovtkm::vtkArrayPortal::ValueType
typename vtkPortalTraits< Type >::Type ValueType
Definition: Portals.h:40
vtkX3D::index
Definition: vtkX3D.h:246
tovtkm::vtkPointsPortal
Definition: Portals.h:81
vtkmTags.h
PortalTraits.h
tovtkm::vtkArrayPortal::GetIteratorEnd
IteratorType GetIteratorEnd() const
Definition: Portals.h:66
tovtkm
Definition: vtkmClip.h:35
tovtkm::FieldsFlag::Points
tovtkm::vtkPointsPortal::IteratorType
vtkm::cont::internal::IteratorFromArrayPortal< vtkPointsPortal > IteratorType
Definition: Portals.h:105
tovtkm::vtkPointsPortal::ComponentType
typename vtkPortalTraits< Type >::ComponentType ComponentType
Definition: Portals.h:87