mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-10-05 09:59:12 +00:00
d0396e2a40
This change is needed for being able to use different thread indices types without changing Fetchs. Basically decoupling those two areas. 1. This commit removes concrete specialization instantiations of ThreadIndicesTypes in all of the Fetch's specializations. 2. It also moves the ThreadIndicesType template parameter from the Fetch struct to a template parameter in their methods Load/Store. Signed-off-by: Vicente Adolfo Bolea Sanchez <vicente.bolea@kitware.com>
69 lines
2.2 KiB
C++
69 lines
2.2 KiB
C++
//============================================================================
|
|
// Copyright (c) Kitware, Inc.
|
|
// All rights reserved.
|
|
// See LICENSE.txt for details.
|
|
//
|
|
// This software is distributed WITHOUT ANY WARRANTY; without even
|
|
// the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
// PURPOSE. See the above copyright notice for more information.
|
|
//============================================================================
|
|
#ifndef vtk_m_exec_arg_IncidentElementCount_h
|
|
#define vtk_m_exec_arg_IncidentElementCount_h
|
|
|
|
#include <vtkm/exec/arg/ExecutionSignatureTagBase.h>
|
|
#include <vtkm/exec/arg/Fetch.h>
|
|
|
|
namespace vtkm
|
|
{
|
|
namespace exec
|
|
{
|
|
namespace arg
|
|
{
|
|
|
|
/// \brief Aspect tag to use for getting the incident element count.
|
|
///
|
|
/// The \c AspectTagIncidentElementCount aspect tag causes the \c Fetch class to
|
|
/// obtain the number of indices that map to the current topology element.
|
|
///
|
|
struct AspectTagIncidentElementCount
|
|
{
|
|
};
|
|
|
|
/// \brief The \c ExecutionSignature tag to get the number of incident elements.
|
|
///
|
|
/// In a topology map, there are \em visited and \em incident topology elements
|
|
/// specified. The scheduling occurs on the \em visited elements, and for each
|
|
/// \em visited element there is some number of incident \em incident elements
|
|
/// that are accessible. This \c ExecutionSignature tag provides the number of
|
|
/// these \em incident elements that are accessible.
|
|
///
|
|
struct IncidentElementCount : vtkm::exec::arg::ExecutionSignatureTagBase
|
|
{
|
|
static constexpr vtkm::IdComponent INDEX = 1;
|
|
using AspectTag = vtkm::exec::arg::AspectTagIncidentElementCount;
|
|
};
|
|
|
|
template <typename FetchTag, typename ExecObjectType>
|
|
struct Fetch<FetchTag, vtkm::exec::arg::AspectTagIncidentElementCount, ExecObjectType>
|
|
{
|
|
using ValueType = vtkm::IdComponent;
|
|
|
|
VTKM_SUPPRESS_EXEC_WARNINGS
|
|
template <typename ThreadIndicesType>
|
|
VTKM_EXEC ValueType Load(const ThreadIndicesType& indices, const ExecObjectType&) const
|
|
{
|
|
return indices.GetIndicesIncident().GetNumberOfComponents();
|
|
}
|
|
|
|
template <typename ThreadIndicesType>
|
|
VTKM_EXEC void Store(const ThreadIndicesType&, const ExecObjectType&, const ValueType&) const
|
|
{
|
|
// Store is a no-op.
|
|
}
|
|
};
|
|
}
|
|
}
|
|
} // namespace vtkm::exec::arg
|
|
|
|
#endif //vtk_m_exec_arg_IncidentElementCount_h
|