Skip to content

Commit

Permalink
Add explicit conversion to vec
Browse files Browse the repository at this point in the history
  • Loading branch information
GagaLP committed Jan 27, 2025
1 parent cc80743 commit bf7fe2a
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions include/simsycl/sycl/vec.hh
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ template<typename T, typename DataT, int NumElements>
concept VecCompatible
= vec_like_num_elements<DataT, T>::value == 1 || vec_like_num_elements<DataT, T>::value == NumElements;

template<typename From, typename To>
concept implicitly_convertible = requires { std::is_convertible_v<From, To>; };

template<typename From, typename To>
concept explicitly_convertible = requires { static_cast<To>(std::declval<From>()); };

template<int... Is>
struct no_repeat_indices;
Expand Down Expand Up @@ -261,6 +266,13 @@ class swizzled_vec {
return m_elems[indices[0]];
}

template<typename T>
explicit operator T() const
requires(num_elements == 1 && detail::explicitly_convertible<value_type, T>)
{
return m_elems[indices[0]];
}

static constexpr size_t byte_size() noexcept { return sycl::vec<value_type, num_elements>::byte_size(); }

static constexpr size_t size() noexcept { return num_elements; }
Expand Down Expand Up @@ -548,6 +560,13 @@ class alignas(detail::vec_alignment_v<DataT, NumElements>) vec {
return m_elems[0];
}

template<typename T>
explicit operator T() const
requires(NumElements == 1 && detail::explicitly_convertible<DataT, T>)
{
return m_elems[0];
}

static constexpr size_t byte_size() noexcept { return sizeof m_elems; }

static constexpr size_t size() noexcept { return NumElements; }
Expand Down

0 comments on commit bf7fe2a

Please sign in to comment.