[Mesa-dev] [RFC PATCH] i965: Allow C++ type safety in the use of enum brw_urb_write_flags.

Chad Versace chad.versace at linux.intel.com
Fri Aug 23 17:10:39 PDT 2013


On 08/23/2013 02:18 PM, Paul Berry wrote:

> The disadvantages are that (a) we need an explicit enum value for 0,
> and (b) we can't use related operators like |= unless we define
> additional overloads.

Disadvantage (a) is trivial, not really a problem.

Disadvantage (b) can be made painless with the macro I discuss below.


> So what do folks think?  Is it worth it?


Yes, I think it's worth it. The code becomes more readable and
more type safe, as evidenced by the diff lines like this:
 > -                       unsigned flags,
 > +                       enum brw_urb_write_flags flags,

If we continue to do this to other enums, then we should probably
define a convenience macro to define all the needed overloaded
bit operators. Like this:

   #define BRW_CXX_ENUM_OPS(type_name) \
       static inline type_name \
       operator|(type_name x, type_name y) \
       { \
          return (type_name) ((int) x | (int) y); \
       } \
       \
       static inline type_name \
       operator&(........) \
       ........ and more operators


> +/**
> + * Allow brw_urb_write_flags enums to be ORed together (normally C++ wouldn't
> + * allow this without a type cast).
> + */
> +inline enum brw_urb_write_flags
> +operator|(enum brw_urb_write_flags x, enum brw_urb_write_flags y)
> +{
> +   return (enum brw_urb_write_flags) ((int) x | (int) y);
> +}
> +#endif

I think the comment is distracting rather than helpful. There is no need for C++
code to apologize for being C++ code.

For what it's worth, this patch is
Reviewed-by: Chad Versace <chad.versace at linux.intel.com>


More information about the mesa-dev mailing list