17 #ifndef vtkmlib_PortalTraits_h 
   18 #define vtkmlib_PortalTraits_h 
   20 #include "vtkmConfig.h"  
   22 #include <vtkm/Types.h> 
   23 #include <vtkm/internal/Assume.h> 
   25 #include <type_traits> 
   30 struct vtkPortalOfVecOfVecValues;
 
   31 struct vtkPortalOfVecOfValues;
 
   32 struct vtkPortalOfScalarValues;
 
   47 template <
typename T, 
int N>
 
   52   using Type = vtkm::Vec<T, N>;
 
   57     VTKM_ASSUME((i >= 0 && i < N));
 
   63     VTKM_ASSUME((i >= 0 && i < N));
 
   68 template <
typename T, 
int N>
 
   73   using Type = vtkm::Vec<T, N>;
 
   78     VTKM_ASSUME((i >= 0 && i < N));
 
   84     VTKM_ASSUME((i >= 0 && i < N));
 
   89 template <
typename T, 
int N, 
int M>
 
   92   using TagType = vtkPortalOfVecOfVecValues;
 
   94   using Type = vtkm::Vec<vtkm::Vec<T, N>, M>;
 
   97   static constexpr vtkm::IdComponent NUM_COMPONENTS_OUTER = M;
 
   98   static constexpr vtkm::IdComponent NUM_COMPONENTS_INNER = N;
 
  104     const vtkm::IdComponent j = i % N;
 
  112     const vtkm::IdComponent j = i % N;
 
  117 template <
typename T, 
int N, 
int M>
 
  122   using Type = vtkm::Vec<vtkm::Vec<T, N>, M>;
 
  125   static constexpr vtkm::IdComponent NUM_COMPONENTS_OUTER = M;
 
  126   static constexpr vtkm::IdComponent NUM_COMPONENTS_INNER = N;
 
  132     const vtkm::IdComponent j = i % N;
 
  140     const vtkm::IdComponent j = i % N;
 
  147 #endif // vtkmlib_PortalsTraits_h