mirror of
https://gitlab.kitware.com/vtk/vtk-m
synced 2024-09-16 17:22:55 +00:00
Make sure all C scalar types are in TypeListScalarAll
C++ template considers some types different even though they have the exact same format. For example `int`, `long`, and `long long` all match different types even though they all represent either signed 32-bit ints or signed 64-bit ints. List all these possible types in `TypeListScalarAll`.
This commit is contained in:
parent
60f19f3f9e
commit
88eed2bbeb
@ -97,7 +97,12 @@ using TypeListScalarAll = vtkm::List<vtkm::Int8,
|
||||
vtkm::Int64,
|
||||
vtkm::UInt64,
|
||||
vtkm::Float32,
|
||||
vtkm::Float64>;
|
||||
vtkm::Float64,
|
||||
// Other base C types that are the same as above but
|
||||
// recognized as different by the compiler
|
||||
char,
|
||||
signed VTKM_UNUSED_INT_TYPE,
|
||||
unsigned VTKM_UNUSED_INT_TYPE>;
|
||||
|
||||
/// A list of the most commonly use Vec classes. Specifically, these are
|
||||
/// vectors of size 2, 3, or 4 containing either unsigned bytes, signed
|
||||
|
@ -173,11 +173,13 @@ using WordTypeDefault = vtkm::UInt32;
|
||||
|
||||
//In this order so that we exactly match the logic that exists in VTK
|
||||
#if VTKM_SIZE_LONG_LONG == 8
|
||||
using Int64 = long long;
|
||||
using Int64 = signed long long;
|
||||
using UInt64 = unsigned long long;
|
||||
#define VTKM_UNUSED_INT_TYPE long
|
||||
#elif VTKM_SIZE_LONG == 8
|
||||
using Int64 = signed long;
|
||||
using UInt64 = unsigned long;
|
||||
#define VTKM_UNUSED_INT_TYPE long long
|
||||
#else
|
||||
#error Could not find a 64-bit integer.
|
||||
#endif
|
||||
|
@ -38,31 +38,35 @@ void ThrowArrayRangeComputeFailed()
|
||||
} \
|
||||
struct SwallowSemicolon
|
||||
|
||||
#define VTKM_ARRAY_RANGE_COMPUTE_IMPL_ALL_SCALAR_T(Storage) \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(char, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Int8, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::UInt8, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Int16, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::UInt16, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Int32, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::UInt32, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Int64, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::UInt64, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Float32, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Float64, Storage)
|
||||
#define VTKM_ARRAY_RANGE_COMPUTE_IMPL_ALL_SCALAR_T(Storage) \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Int8, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::UInt8, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Int16, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::UInt16, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Int32, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::UInt32, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Int64, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::UInt64, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Float32, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(vtkm::Float64, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(char, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(signed VTKM_UNUSED_INT_TYPE, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_T(unsigned VTKM_UNUSED_INT_TYPE, Storage)
|
||||
|
||||
#define VTKM_ARRAY_RANGE_COMPUTE_IMPL_ALL_VEC(N, Storage) \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(char, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Int8, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::UInt8, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Int16, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::UInt16, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Int32, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::UInt32, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Int64, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::UInt64, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Float32, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Float64, N, Storage)
|
||||
#define VTKM_ARRAY_RANGE_COMPUTE_IMPL_ALL_VEC(N, Storage) \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Int8, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::UInt8, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Int16, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::UInt16, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Int32, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::UInt32, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Int64, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::UInt64, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Float32, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(vtkm::Float64, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(char, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(signed VTKM_UNUSED_INT_TYPE, N, Storage); \
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_VEC(unsigned VTKM_UNUSED_INT_TYPE, N, Storage)
|
||||
|
||||
VTKM_ARRAY_RANGE_COMPUTE_IMPL_ALL_SCALAR_T(vtkm::cont::StorageTagBasic);
|
||||
|
||||
|
@ -58,31 +58,35 @@ namespace cont
|
||||
const vtkm::cont::ArrayHandle<vtkm::Vec<T, N>, Storage>& input, \
|
||||
vtkm::cont::DeviceAdapterId device = vtkm::cont::DeviceAdapterTagAny())
|
||||
|
||||
#define VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_ALL_SCALAR_T(Storage) \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(char, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Int8, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::UInt8, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Int16, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::UInt16, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Int32, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::UInt32, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Int64, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::UInt64, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Float32, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Float64, Storage)
|
||||
#define VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_ALL_SCALAR_T(Storage) \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Int8, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::UInt8, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Int16, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::UInt16, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Int32, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::UInt32, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Int64, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::UInt64, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Float32, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(vtkm::Float64, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(char, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(signed VTKM_UNUSED_INT_TYPE, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_T(unsigned VTKM_UNUSED_INT_TYPE, Storage)
|
||||
|
||||
#define VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_ALL_VEC(N, Storage) \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(char, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Int8, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::UInt8, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Int16, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::UInt16, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Int32, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::UInt32, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Int64, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::UInt64, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Float32, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Float64, N, Storage)
|
||||
#define VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_ALL_VEC(N, Storage) \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Int8, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::UInt8, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Int16, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::UInt16, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Int32, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::UInt32, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Int64, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::UInt64, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Float32, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(vtkm::Float64, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(char, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(signed VTKM_UNUSED_INT_TYPE, N, Storage); \
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_VEC(unsigned VTKM_UNUSED_INT_TYPE, N, Storage)
|
||||
|
||||
VTK_M_ARRAY_RANGE_COMPUTE_EXPORT_ALL_SCALAR_T(vtkm::cont::StorageTagBasic);
|
||||
|
||||
|
@ -172,6 +172,14 @@ void TestLists()
|
||||
scalarsAll.AddExpected(vtkm::UInt32());
|
||||
scalarsAll.AddExpected(vtkm::Int64());
|
||||
scalarsAll.AddExpected(vtkm::UInt64());
|
||||
// Extra types with same layout as above but considered different by C
|
||||
scalarsAll.AddExpected(char());
|
||||
scalarsAll.AddExpected((signed int)0);
|
||||
scalarsAll.AddExpected((unsigned int)0);
|
||||
scalarsAll.AddExpected((signed long)0);
|
||||
scalarsAll.AddExpected((unsigned long)0);
|
||||
scalarsAll.AddExpected((signed long long)0);
|
||||
scalarsAll.AddExpected((unsigned long long)0);
|
||||
TryList(scalarsAll, vtkm::TypeListScalarAll());
|
||||
|
||||
std::cout << "TypeListVecCommon" << std::endl;
|
||||
@ -269,6 +277,14 @@ void TestLists()
|
||||
all.AddExpected(vtkm::Vec4ui_16());
|
||||
all.AddExpected(vtkm::Vec4ui_32());
|
||||
all.AddExpected(vtkm::Vec4ui_64());
|
||||
// Extra types with same layout as above but considered different by C
|
||||
all.AddExpected(char());
|
||||
all.AddExpected((signed int)0);
|
||||
all.AddExpected((unsigned int)0);
|
||||
all.AddExpected((signed long)0);
|
||||
all.AddExpected((unsigned long)0);
|
||||
all.AddExpected((signed long long)0);
|
||||
all.AddExpected((unsigned long long)0);
|
||||
TryList(all, vtkm::TypeListAll());
|
||||
}
|
||||
|
||||
|
@ -171,6 +171,14 @@ void TestLists()
|
||||
scalarsAll.AddExpected(vtkm::UInt32());
|
||||
scalarsAll.AddExpected(vtkm::Int64());
|
||||
scalarsAll.AddExpected(vtkm::UInt64());
|
||||
// Extra types with same layout as above but considered different by C
|
||||
scalarsAll.AddExpected(char());
|
||||
scalarsAll.AddExpected((signed int)0);
|
||||
scalarsAll.AddExpected((unsigned int)0);
|
||||
scalarsAll.AddExpected((signed long)0);
|
||||
scalarsAll.AddExpected((unsigned long)0);
|
||||
scalarsAll.AddExpected((signed long long)0);
|
||||
scalarsAll.AddExpected((unsigned long long)0);
|
||||
TryList(scalarsAll, vtkm::TypeListTagScalarAll());
|
||||
|
||||
std::cout << "TypeListTagVecCommon" << std::endl;
|
||||
@ -268,6 +276,14 @@ void TestLists()
|
||||
all.AddExpected(vtkm::Vec4ui_16());
|
||||
all.AddExpected(vtkm::Vec4ui_32());
|
||||
all.AddExpected(vtkm::Vec4ui_64());
|
||||
// Extra types with same layout as above but considered different by C
|
||||
all.AddExpected(char());
|
||||
all.AddExpected((signed int)0);
|
||||
all.AddExpected((unsigned int)0);
|
||||
all.AddExpected((signed long)0);
|
||||
all.AddExpected((unsigned long)0);
|
||||
all.AddExpected((signed long long)0);
|
||||
all.AddExpected((unsigned long long)0);
|
||||
TryList(all, vtkm::TypeListTagAll());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user