25 template<
class Tsource,
class Tdest>
26 class CoordRangeTransform {
28 using SourceProp = shambase::VectorProperties<Tsource>;
29 using DestProp = shambase::VectorProperties<Tdest>;
31 using component_source_t =
typename SourceProp::component_type;
32 using component_dest_t =
typename DestProp::component_type;
34 static constexpr bool source_is_int = SourceProp::is_uint_based;
36 static constexpr bool dest_is_int = SourceProp::is_uint_based;
38 enum TransformFactMode { multiply, divide };
44 Tsource source_coord_min;
46 TransformFactMode mode;
50 SourceProp::dimension == DestProp::dimension,
51 "input and output dimensions should be the same");
58 Tdest transform(Tsource coord)
const;
59 Tsource reverse_transform(Tdest rnge)
const;
61 void print_transform()
const;
68 template<
class Tsource,
class Tdest>
72 Tsource pmin = rnge.lower;
73 Tsource pmax = rnge.upper;
75 if (mode == multiply) {
86 template<
class Tsource,
class Tdest>
93 if (mode == multiply) {
104 template<
class Tsource,
class Tdest>
105 inline Tdest CoordRangeTransform<Tsource, Tdest>::transform(Tsource coord)
const {
107 if (mode == multiply) {
114 template<
class Tsource,
class Tdest>
115 inline Tsource CoordRangeTransform<Tsource, Tdest>::reverse_transform(Tdest coord)
const {
117 if (mode == multiply) {
Tdest convert(Tsource coord)
Helper to avoid differences between SYCL implementations of convert, it always static cast.
namespace for math utility