@@ -1237,6 +1237,32 @@ end
1237
1237
(/ )(B:: BitArray , x:: Number ) = (/ )(Array (B), x)
1238
1238
(/ )(x:: Number , B:: BitArray ) = (/ )(x, Array (B))
1239
1239
1240
+ # broadcast specializations for &, |, and xor/⊻
1241
+ broadcast (:: typeof (& ), B:: BitArray , x:: Bool ) = x ? copy (B) : falses (size (B))
1242
+ broadcast (:: typeof (& ), x:: Bool , B:: BitArray ) = broadcast (& , B, x)
1243
+ broadcast (:: typeof (| ), B:: BitArray , x:: Bool ) = x ? trues (size (B)) : copy (B)
1244
+ broadcast (:: typeof (| ), x:: Bool , B:: BitArray ) = broadcast (| , B, x)
1245
+ broadcast (:: typeof (xor), B:: BitArray , x:: Bool ) = x ? ~ B : copy (B)
1246
+ broadcast (:: typeof (xor), x:: Bool , B:: BitArray ) = broadcast (xor, B, x)
1247
+ for f in (:& , :| , :xor )
1248
+ @eval begin
1249
+ function broadcast (:: typeof ($ f), A:: BitArray , B:: BitArray )
1250
+ F = BitArray (promote_shape (size (A),size (B))... )
1251
+ Fc = F. chunks
1252
+ Ac = A. chunks
1253
+ Bc = B. chunks
1254
+ (isempty (Ac) || isempty (Bc)) && return F
1255
+ for i = 1 : length (Fc)
1256
+ Fc[i] = ($ f)(Ac[i], Bc[i])
1257
+ end
1258
+ Fc[end ] &= _msk_end (F)
1259
+ return F
1260
+ end
1261
+ broadcast (:: typeof ($ f), A:: DenseArray{Bool} , B:: BitArray ) = broadcast ($ f, BitArray (A), B)
1262
+ broadcast (:: typeof ($ f), B:: BitArray , A:: DenseArray{Bool} ) = broadcast ($ f, B, BitArray (A))
1263
+ end
1264
+ end
1265
+
1240
1266
1241
1267
# # promotion to complex ##
1242
1268
0 commit comments