Go to the documentation of this file.
18 #ifndef viskores_cont_ArrayCopy_h
19 #define viskores_cont_ArrayCopy_h
45 struct ArrayCopyConcreteSrc;
47 template <
typename SrcIsArrayHandle>
55 template <
typename SrcIsArrayHandle>
64 template <
typename T,
typename S>
78 viskores::cont::detail::ArrayCopyImpl(
79 source, destWrapper, std::false_type{}, std::false_type{});
81 destWrapper.AsArrayHandle(destination);
85 template <
typename TS,
typename SS,
typename TD,
typename SD>
91 detail::ArrayCopyConcreteSrc<SS>{}(source, destination);
95 template <
typename T,
typename S>
128 template <
typename SourceArrayType,
typename DestArrayType>
129 inline void ArrayCopy(
const SourceArrayType& source, DestArrayType& destination)
131 detail::ArrayCopyImpl(source,
133 typename internal::ArrayHandleCheck<SourceArrayType>::type{},
134 typename internal::ArrayHandleCheck<DestArrayType>::type{});
139 template <
typename SourceArrayType>
143 detail::ArrayCopyImpl(source,
145 typename internal::ArrayHandleCheck<SourceArrayType>::type{},
151 template <
typename T,
typename S>
168 template <
typename T,
typename S>
189 template <
typename S>
190 struct ArrayCopyConcreteSrc
192 template <
typename T,
typename DestArray>
198 viskores::cont::internal::ArrayExtractComponentIsInefficient<ArrayType>{});
201 template <
typename T,
typename DestArray>
203 DestArray& destination,
209 template <
typename T,
typename DestArray>
211 DestArray& destination,
216 "Attempting to copy from an array of type " +
218 " with ArrayCopy is inefficient. It is highly recommended you use another method "
219 "such as viskores::cont::ArrayCopyDevice.");
228 struct ArrayCopyConcreteSrc<
viskores::cont::StorageTagConstant>
230 template <
typename T1,
typename T2,
typename S2>
242 struct ArrayCopyConcreteSrc<
viskores::cont::StorageTagIndex>
244 template <
typename T,
typename S>
256 struct VISKORES_CONT_EXPORT ArrayCopyConcreteSrc<
viskores::cont::StorageTagCounting>
258 template <
typename T1,
typename T2,
typename S2>
263 T1 start = countingSource.
GetStart();
264 T1 step = countingSource.
GetStep();
273 this->CopyCountingFloat(
285 destination = this->CopyCountingId(source);
298 template <
typename ST1,
typename ST2>
299 struct ArrayCopyConcreteSrc<
viskores::cont::StorageTagConcatenate<ST1, ST2>>
301 template <
typename SourceArrayType,
typename DestArrayType>
302 void operator()(
const SourceArrayType& source, DestArrayType& destination)
const
304 auto source1 = source.GetStorage().GetArray1(source.GetBuffers());
305 auto source2 = source.GetStorage().GetArray2(source.GetBuffers());
308 destination.Allocate(source.GetNumberOfValues());
311 destination, source1.GetNumberOfValues(), source2.GetNumberOfValues());
319 template <
typename SIndex,
typename SValue>
320 struct ArrayCopyConcreteSrc<
viskores::cont::StorageTagPermutation<SIndex, SValue>>
323 template <
typename T1,
typename T2,
typename S2>
330 viskores::cont::internal::MapArrayPermutation(valueArray, indexArray);
340 #endif //viskores_cont_ArrayCopy_h
StorageType GetStorage() const
Get the storage.
Definition: ArrayHandle.h:435
@ Warn
Less important user errors, such as out-of-bounds parameters.
CountingValueType GetStep() const
Definition: ArrayHandleCounting.h:158
void ArrayCopyShallowIfPossible(const viskores::cont::UnknownArrayHandle source, viskores::cont::ArrayHandle< T, S > &destination)
Copies from an unknown to a known array type.
Definition: ArrayCopy.h:169
#define viskoresNotUsed(parameter_name)
Simple macro to identify a parameter as unused.
Definition: ExportMacros.h:136
Manages an array-worth of data.
Definition: ArrayHandle.h:313
viskores::Int32 IdComponent
Base type to use to index small lists.
Definition: Types.h:202
ArrayHandleView< ArrayHandleType > make_ArrayHandleView(const ArrayHandleType &array, viskores::Id startIndex, viskores::Id numValues)
Construct a viskores::cont::ArrayHandleView from a source array.
Definition: ArrayHandleView.h:253
viskores::Int64 Id
Base type to use to index arrays.
Definition: Types.h:235
bool CanConvert() const
Determine if the contained array can be passed to the given array type.
Definition: UnknownArrayHandle.h:1025
#define VISKORES_CONT
Definition: ExportMacros.h:65
Groups connected points that have the same field value.
Definition: Atomic.h:27
T GetValue() const
Returns the constant value stored in this array.
Definition: ArrayHandleConstant.h:99
void AllocateAndFill(viskores::Id numberOfValues, const ValueType &fillValue, viskores::CopyFlag preserve, viskores::cont::Token &token) const
Allocates an array and fills it with an initial value.
Definition: ArrayHandle.h:533
Traits that can be queried to treat any type as a Vec.
Definition: VecTraits.h:69
An array handle with a constant value.
Definition: ArrayHandleConstant.h:78
void Allocate(viskores::Id numberOfValues, viskores::CopyFlag preserve, viskores::cont::Token &token) const
Allocates an array large enough to hold the given number of values.
Definition: ArrayHandle.h:504
viskores::Id GetNumberOfValues() const
Returns the number of entries in the array.
Definition: ArrayHandle.h:482
ArrayHandleCounting is a specialization of ArrayHandle.
Definition: ArrayHandleCounting.h:140
void AsArrayHandle(viskores::cont::ArrayHandle< T, S > &array) const
Returns this array cast appropriately and stored in the given ArrayHandle type.
Definition: UnknownArrayHandle.h:679
#define VISKORES_STATIC_ASSERT_MSG(condition, message)
Definition: StaticAssert.h:26
void DeepCopyFrom(const viskores::cont::ArrayHandle< ValueType, StorageTag > &source) const
Deep copies the data in the array.
Definition: ArrayHandle.h:723
#define VISKORES_LOG_S(level,...)
Writes a message using stream syntax to the indicated log level.
Definition: Logging.h:216
viskores::Float32 FloatDefault
The floating point type to use when no other precision is specified.
Definition: Types.h:244
void DeepCopyFrom(const viskores::cont::UnknownArrayHandle &source)
Deep copies data from another UnknownArrayHandle.
CountingValueType GetStart() const
Definition: ArrayHandleCounting.h:156
void ArrayCopy(const SourceArrayType &source, DestArrayType &destination)
Does a deep copy from one array to another array.
Definition: ArrayCopy.h:129
Definition: ArrayHandlePermutation.h:101
An ArrayHandle of an unknown value type and storage.
Definition: UnknownArrayHandle.h:451
const std::vector< viskores::cont::internal::Buffer > & GetBuffers() const
Returns the internal Buffer structures that hold the data.
Definition: ArrayHandle.h:738
viskores::cont::ArrayHandleStride< BaseComponentType > ExtractComponent(viskores::IdComponent componentIndex, viskores::CopyFlag allowCopy=viskores::CopyFlag::On) const
Extract a component of the array.
Definition: UnknownArrayHandle.h:811
std::string TypeToString(const std::type_info &t)
Use RTTI information to retrieve the name of the type T.
An implicit array handle containing the its own indices.
Definition: ArrayHandleIndex.h:64