-
Notifications
You must be signed in to change notification settings - Fork 262
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added broadcast overload for bool #1089
Added broadcast overload for bool #1089
Conversation
9deba5b
to
6606bf8
Compare
6606bf8
to
24cf4ad
Compare
template <class A> | ||
struct broadcaster<bool, A> | ||
{ | ||
using return_type = batch_bool<xsimd::as_unsigned_integer_t<bool>, A>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not quite sure about that. You're creating a batch_bool out of bool, which looks fine at first glance, but a batch_bool neeads to know what kind of type it's operating one, why choosing xsimd::as_unsigned_integer_t<bool>
? The user has no way to specify the actual type...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This method is called only when you want to operate on batches of boolean values (the old batch<bool>
that we removed), therefore the underlying type does not really matter. I chose uint8_t
so that we can operate on a maximum number of boolean values in the batch_bool.
If you need a specific underlying type for the batch_bool, then you have to use broadcast_as
instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok. I think we need to document that somewhere, either in the doxygen comment or by moving the specializatin at the API level so that the difference in behavior is clear when passing a bool
to xsimd::broadcast
. Bonus point if you mention xsimd::broadcast_as
there ;-)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Moving the specialization at the API level is what I did initially (where it actually becomes an overload, since we cannot partially specialize functions). The issue is that the overload as only one template parameter, and with the default value of the first overload, the compiler does not pick the right overload, leading to compilation issues for regular cases (i.e. not bool). I'll add more documentation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
gotcha
🙇 |
Fixes missing APIs due to #973
@serge-sans-paille This is the last missing piece to upgrade xtensor to xsimd 13. If you don't have any objection, I will tag a release after this one gets in.