@@ -5,10 +5,13 @@ module NullBroadcasts
55
66A `Base.AbstractBroadcasted` that represents arithmetic object.
77
8- An `NullBroadcasted()` can be added to, subtracted from, or multiplied by any value in a
9- broadcast expression without incurring a runtime performance penalty.
8+ An `NullBroadcasted()` can be added to, subtracted from, or multiplied by any
9+ value in a broadcast expression without incurring a runtime performance
10+ penalty.
11+
12+ For example, the following rules hold when broadcasting instances of
13+ `NullBroadcasted`:
1014
11- For example, the following rules hold when broadcasting instances of `NullBroadcasted`:
1215```
13161 + NullBroadcasted() == 1
1417NullBroadcasted() + 1 == 1
@@ -51,9 +54,10 @@ Base.broadcasted(op::typeof(-), a::NullBroadcasted, ::NullBroadcasted) =
5154 Base. broadcasted (op, a)
5255
5356Base. broadcasted (op:: typeof (+ ), :: NullBroadcasted , args... ) = Base. broadcasted (op, args... )
54- Base. broadcasted (op:: typeof (+ ), arg, :: NullBroadcasted ) = Base. broadcasted (op, arg)
55- Base. broadcasted (op:: typeof (+ ), a:: NullBroadcasted , :: NullBroadcasted ) =
56- Base. broadcasted (op, a)
57+ Base. broadcasted (op:: typeof (+ ), arg, :: NullBroadcasted , args... ) =
58+ Base. broadcasted (op, arg, args... )
59+ Base. broadcasted (op:: typeof (+ ), a:: NullBroadcasted , :: NullBroadcasted , args... ) =
60+ Base. broadcasted (op, a, args... )
5761
5862Base. broadcasted (op:: typeof (* ), :: NullBroadcasted , args... ) = NullBroadcasted ()
5963Base. broadcasted (op:: typeof (* ), arg, :: NullBroadcasted ) = NullBroadcasted ()
@@ -62,6 +66,8 @@ Base.broadcasted(op::typeof(/), ::NullBroadcasted, args...) = NullBroadcasted()
6266Base. broadcasted (op:: typeof (/ ), arg, :: NullBroadcasted ) = NullBroadcasted ()
6367Base. broadcasted (op:: typeof (/ ), :: NullBroadcasted , :: NullBroadcasted ) = NullBroadcasted ()
6468
69+ Base. broadcasted (op:: typeof (identity), a:: NullBroadcasted ) = a
70+
6571function skip_materialize (dest, bc:: Base.Broadcast.Broadcasted )
6672 if typeof (bc. f) <: typeof (+ ) || typeof (bc. f) <: typeof (- )
6773 if length (bc. args) == 2 &&
7884
7985Base. Broadcast. instantiate (bc:: Base.Broadcast.Broadcasted{NullBroadcastedStyle} ) = x
8086
87+ Base. Broadcast. materialize! (dest, x:: NullBroadcasted ) =
88+ error (" NullBroadcasted objects cannot be materialized." )
89+ Base. Broadcast. materialize (dest, x:: NullBroadcasted ) =
90+ error (" NullBroadcasted objects cannot be materialized." )
91+
8192end # module NullBroadcasts
0 commit comments