VTK-m  2.1
ArrayHandleUniformPointCoordinates.h
Go to the documentation of this file.
1 //============================================================================
2 // Copyright (c) Kitware, Inc.
3 // All rights reserved.
4 // See LICENSE.txt for details.
5 //
6 // This software is distributed WITHOUT ANY WARRANTY; without even
7 // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 // PURPOSE. See the above copyright notice for more information.
9 //============================================================================
10 #ifndef vtk_m_cont_ArrayHandleUniformPointCoordinates_h
11 #define vtk_m_cont_ArrayHandleUniformPointCoordinates_h
12 
13 #include <vtkm/Range.h>
16 
17 namespace vtkm
18 {
19 namespace cont
20 {
21 
23 {
24 };
25 
26 namespace internal
27 {
28 
29 using StorageTagUniformPointsSuperclass =
31 
32 template <>
34  : Storage<vtkm::Vec3f, StorageTagUniformPointsSuperclass>
35 {
36 };
37 
38 } // namespace internal
39 
46  : public vtkm::cont::ArrayHandle<vtkm::Vec3f, vtkm::cont::StorageTagUniformPoints>
47 {
48 public:
52 
53  VTKM_CONT
55  ValueType origin = ValueType(0.0f, 0.0f, 0.0f),
56  ValueType spacing = ValueType(1.0f, 1.0f, 1.0f));
57 
64 
65  VTKM_CONT vtkm::Id3 GetDimensions() const;
66  VTKM_CONT vtkm::Vec3f GetOrigin() const;
67  VTKM_CONT vtkm::Vec3f GetSpacing() const;
68 };
69 
70 template <typename T>
71 class ArrayHandleStride;
72 
73 namespace internal
74 {
75 
76 template <typename S>
77 struct ArrayExtractComponentImpl;
78 
79 template <>
80 struct VTKM_CONT_EXPORT ArrayExtractComponentImpl<vtkm::cont::StorageTagUniformPoints>
81 {
84  vtkm::IdComponent componentIndex,
85  vtkm::CopyFlag allowCopy) const;
86 };
87 
88 template <typename S>
89 struct ArrayRangeComputeImpl;
90 
91 template <>
92 struct VTKM_CONT_EXPORT ArrayRangeComputeImpl<vtkm::cont::StorageTagUniformPoints>
93 {
96  const vtkm::cont::ArrayHandle<vtkm::UInt8>& maskArray,
97  bool computeFiniteRange,
98  vtkm::cont::DeviceAdapterId device) const;
99 };
100 
101 } // namespace internal
102 
103 }
104 } // namespace vtkm::cont
105 
106 //=============================================================================
107 // Specializations of serialization related classes
109 namespace vtkm
110 {
111 namespace cont
112 {
113 
114 template <>
115 struct SerializableTypeString<vtkm::cont::ArrayHandleUniformPointCoordinates>
116 {
117  static VTKM_CONT std::string Get() { return "AH_UniformPointCoordinates"; }
118 };
119 
120 template <>
121 struct SerializableTypeString<
122  vtkm::cont::ArrayHandle<vtkm::Vec3f, vtkm::cont::StorageTagUniformPoints>>
123  : SerializableTypeString<vtkm::cont::ArrayHandleUniformPointCoordinates>
124 {
125 };
126 }
127 } // vtkm::cont
128 
129 namespace mangled_diy_namespace
130 {
131 
132 template <>
133 struct Serialization<vtkm::cont::ArrayHandleUniformPointCoordinates>
134 {
135 private:
138 
139 public:
140  static VTKM_CONT void save(BinaryBuffer& bb, const BaseType& obj)
141  {
142  auto portal = obj.ReadPortal();
143  vtkmdiy::save(bb, portal.GetDimensions());
144  vtkmdiy::save(bb, portal.GetOrigin());
145  vtkmdiy::save(bb, portal.GetSpacing());
146  }
147 
148  static VTKM_CONT void load(BinaryBuffer& bb, BaseType& obj)
149  {
150  vtkm::Id3 dims;
151  typename BaseType::ValueType origin, spacing;
152 
153  vtkmdiy::load(bb, dims);
154  vtkmdiy::load(bb, origin);
155  vtkmdiy::load(bb, spacing);
156 
157  obj = vtkm::cont::ArrayHandleUniformPointCoordinates(dims, origin, spacing);
158  }
159 };
160 
161 template <>
162 struct Serialization<vtkm::cont::ArrayHandle<vtkm::Vec3f, vtkm::cont::StorageTagUniformPoints>>
163  : Serialization<vtkm::cont::ArrayHandleUniformPointCoordinates>
164 {
165 };
166 
167 } // diy
169 
170 #endif //vtk_+m_cont_ArrayHandleUniformPointCoordinates_h
vtkm::cont::ArrayHandle
Manages an array-worth of data.
Definition: ArrayHandle.h:300
vtkm::exec::arg::load
T load(const U &u, vtkm::Id v)
Definition: FetchTagArrayDirectIn.h:36
vtkm
Groups connected points that have the same field value.
Definition: Atomic.h:19
ArrayPortalUniformPointCoordinates.h
vtkm::Get
auto Get(const vtkm::Tuple< Ts... > &tuple)
Retrieve the object from a vtkm::Tuple at the given index.
Definition: Tuple.h:81
VTKM_ARRAY_HANDLE_SUBCLASS_NT
#define VTKM_ARRAY_HANDLE_SUBCLASS_NT(classname, superclass)
Macro to make default methods in ArrayHandle subclasses.
Definition: ArrayHandle.h:266
vtkm::cont::StorageTagImplicit
An implementation for read-only implicit arrays.
Definition: ArrayHandleImplicit.h:86
vtkm::IdComponent
vtkm::Int32 IdComponent
Base type to use to index small lists.
Definition: Types.h:194
mangled_diy_namespace
Definition: Particle.h:351
vtkm::cont::ArrayHandleStride
An ArrayHandle that accesses a basic array with strides and offsets.
Definition: ArrayHandleStride.h:332
vtkm::cont::StorageTagUniformPoints
Definition: ArrayHandleUniformPointCoordinates.h:22
VTKM_CONT_EXPORT
#define VTKM_CONT_EXPORT
Definition: vtkm_cont_export.h:44
vtkm::cont::ArrayHandleUniformPointCoordinates::ValueType
Superclass::ValueType ValueType
Definition: ArrayHandleUniformPointCoordinates.h:51
Range.h
VTKM_CONT
#define VTKM_CONT
Definition: ExportMacros.h:57
vtkm::cont::DeviceAdapterId
An object used to specify a device.
Definition: DeviceAdapterTag.h:58
vtkm::Vec< vtkm::FloatDefault, 3 >
vtkm::cont::ArrayHandleUniformPointCoordinates
ArrayHandleUniformPointCoordinates is a specialization of ArrayHandle.
Definition: ArrayHandleUniformPointCoordinates.h:45
vtkm::CopyFlag
CopyFlag
Identifier used to specify whether a function should deep copy data.
Definition: Flags.h:17
VTKM_ALWAYS_EXPORT
#define VTKM_ALWAYS_EXPORT
Definition: ExportMacros.h:89
ArrayHandleImplicit.h