@@ -64,16 +64,52 @@ union(a::RangeCumsum{<:Any,<:OneTo}, b::RangeCumsum{<:Any,<:OneTo}) =
6464
6565sort! (a:: RangeCumsum{<:Any,<:Base.OneTo} ) = a
6666sort (a:: RangeCumsum{<:Any,<:Base.OneTo} ) = a
67+ Base. issorted (a:: RangeCumsum{<:Any,<:Base.OneTo} ) = true
68+ function Base. issorted (a:: RangeCumsum{<:Any,<:AbstractUnitRange{<:Integer}} )
69+ r = parent (a)
70+ r2 = r[firstindex (r): searchsortedlast (r, zero (eltype (r)))]
71+ # at max one negative value is allowed
72+ length (r2) <= 1 + (last (r) >= 0 )
73+ end
74+
75+ function Base. minimum (a:: RangeCumsum{<:Any, <:OneTo} )
76+ isempty (a) && throw (ArgumentError (" RangeCumsum must be non-empty" ))
77+ first (a)
78+ end
79+ function Base. maximum (a:: RangeCumsum{<:Any, <:OneTo} )
80+ isempty (a) && throw (ArgumentError (" RangeCumsum must be non-empty" ))
81+ last (a)
82+ end
83+ function Base. maximum (a:: RangeCumsum{<:Any, <:AbstractUnitRange{<:Integer}} )
84+ isempty (a) && throw (ArgumentError (" RangeCumsum must be non-empty" ))
85+ r = parent (a)
86+ if - first (r) in r
87+ r2 = r[searchsortedfirst (r, - first (r)+ 1 ): end ]
88+ max (zero (eltype (r)), sum (r2))
89+ else
90+ max (first (r), sum (r))
91+ end
92+ end
93+ function Base. minimum (a:: RangeCumsum{<:Any, <:AbstractUnitRange{<:Integer}} )
94+ isempty (a) && throw (ArgumentError (" RangeCumsum must be non-empty" ))
95+ r = parent (a)
96+ if zero (eltype (r)) in r
97+ r2 = r[firstindex (r): searchsortedlast (r, zero (eltype (r)))]
98+ min (sum (r2), zero (eltype (r)))
99+ else
100+ min (first (r), sum (r))
101+ end
102+ end
67103
68104convert (:: Type{RangeCumsum{T,R}} , r:: RangeCumsum ) where {T,R} = RangeCumsum {T,R} (convert (R, r. range))
69105
70- function Broadcast. broadcasted (:: Broadcast.DefaultArrayStyle{1} , :: typeof (- ), r:: RangeCumsum )
106+ function Broadcast. broadcasted (:: typeof (- ), r:: RangeCumsum )
71107 RangeCumsum (.- r. range)
72108end
73- function Broadcast. broadcasted (:: Broadcast.DefaultArrayStyle{1} , :: typeof (* ), x:: Number , r:: RangeCumsum )
109+ function Broadcast. broadcasted (:: typeof (* ), x:: Number , r:: RangeCumsum )
74110 RangeCumsum (x * r. range)
75111end
76- function Broadcast. broadcasted (:: Broadcast.DefaultArrayStyle{1} , :: typeof (* ), r:: RangeCumsum , x:: Number )
112+ function Broadcast. broadcasted (:: typeof (* ), r:: RangeCumsum , x:: Number )
77113 RangeCumsum (r. range * x)
78114end
79115
0 commit comments