//============================================================================ // 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_ConnectivityStructured_h #define vtk_m_exec_ConnectivityStructured_h #include #include #include namespace vtkm { namespace exec { template class ConnectivityStructured { VTKM_IS_TOPOLOGY_ELEMENT_TAG(VisitTopology); VTKM_IS_TOPOLOGY_ELEMENT_TAG(IncidentTopology); using InternalsType = vtkm::internal::ConnectivityStructuredInternals; using Helper = vtkm::internal::ConnectivityStructuredIndexHelper; public: using SchedulingRangeType = typename InternalsType::SchedulingRangeType; ConnectivityStructured() = default; VTKM_EXEC_CONT ConnectivityStructured(const InternalsType& src) : Internals(src) { } ConnectivityStructured(const ConnectivityStructured& src) = default; VTKM_EXEC_CONT ConnectivityStructured( const ConnectivityStructured& src) : Internals(src.Internals) { } ConnectivityStructured& operator=(const ConnectivityStructured& src) = default; ConnectivityStructured& operator=(ConnectivityStructured&& src) = default; VTKM_EXEC vtkm::Id GetNumberOfElements() const { return Helper::GetNumberOfElements(this->Internals); } using CellShapeTag = typename Helper::CellShapeTag; VTKM_EXEC CellShapeTag GetCellShape(vtkm::Id) const { return CellShapeTag(); } template VTKM_EXEC vtkm::IdComponent GetNumberOfIndices(const IndexType& index) const { return Helper::GetNumberOfIndices(this->Internals, index); } using IndicesType = typename Helper::IndicesType; template VTKM_EXEC IndicesType GetIndices(const IndexType& index) const { return Helper::GetIndices(this->Internals, index); } VTKM_EXEC_CONT SchedulingRangeType FlatToLogicalFromIndex(vtkm::Id flatFromIndex) const { return Helper::FlatToLogicalFromIndex(this->Internals, flatFromIndex); } VTKM_EXEC_CONT vtkm::Id LogicalToFlatFromIndex(const SchedulingRangeType& logicalFromIndex) const { return Helper::LogicalToFlatFromIndex(this->Internals, logicalFromIndex); } VTKM_EXEC_CONT SchedulingRangeType FlatToLogicalToIndex(vtkm::Id flatToIndex) const { return Helper::FlatToLogicalToIndex(this->Internals, flatToIndex); } VTKM_EXEC_CONT vtkm::Id LogicalToFlatToIndex(const SchedulingRangeType& logicalToIndex) const { return Helper::LogicalToFlatToIndex(this->Internals, logicalToIndex); } VTKM_EXEC_CONT vtkm::Vec GetPointDimensions() const { return this->Internals.GetPointDimensions(); } VTKM_EXEC_CONT vtkm::Vec GetCellDimensions() const { return this->Internals.GetCellDimensions(); } VTKM_EXEC_CONT SchedulingRangeType GetGlobalPointIndexStart() const { return this->Internals.GetGlobalPointIndexStart(); } friend class ConnectivityStructured; private: InternalsType Internals; }; } } // namespace vtkm::exec #endif //vtk_m_exec_ConnectivityStructured_h