@@ -72,16 +72,21 @@ function Base.issorted(a::RangeCumsum{<:Any,<:AbstractUnitRange{<:Integer}})
7272 length (r2) <= 1 + (last (r) >= 0 )
7373end
7474
75- function Base. minimum (a:: RangeCumsum{<:Any, <:OneTo} )
76- isempty (a) && throw (ArgumentError (" RangeCumsum must be non-empty" ))
75+ struct _InitialValue end
76+
77+ _reduce_empty (init) = init
78+ _reduce_empty (:: _InitialValue ) = throw (ArgumentError (" RangeCumsum must be non-empty" ))
79+
80+ function Base. minimum (a:: RangeCumsum{<:Any, <:OneTo} ; init = _InitialValue ())
81+ isempty (a) && return _reduce_empty (init)
7782 first (a)
7883end
79- function Base. maximum (a:: RangeCumsum{<:Any, <:OneTo} )
80- isempty (a) && throw ( ArgumentError ( " RangeCumsum must be non-empty " ) )
84+ function Base. maximum (a:: RangeCumsum{<:Any, <:OneTo} ; init = _InitialValue () )
85+ isempty (a) && return _reduce_empty (init )
8186 last (a)
8287end
83- function Base. maximum (a:: RangeCumsum{<:Any, <:AbstractUnitRange{<:Integer}} )
84- isempty (a) && throw ( ArgumentError ( " RangeCumsum must be non-empty " ) )
88+ function Base. maximum (a:: RangeCumsum{<:Any, <:AbstractUnitRange{<:Integer}} ; init = _InitialValue () )
89+ isempty (a) && return _reduce_empty (init )
8590 r = parent (a)
8691 if - first (r) in r
8792 r2 = r[searchsortedfirst (r, - first (r)+ 1 ): end ]
@@ -90,8 +95,8 @@ function Base.maximum(a::RangeCumsum{<:Any, <:AbstractUnitRange{<:Integer}})
9095 max (first (r), sum (r))
9196 end
9297end
93- function Base. minimum (a:: RangeCumsum{<:Any, <:AbstractUnitRange{<:Integer}} )
94- isempty (a) && throw ( ArgumentError ( " RangeCumsum must be non-empty " ) )
98+ function Base. minimum (a:: RangeCumsum{<:Any, <:AbstractUnitRange{<:Integer}} ; init = _InitialValue () )
99+ isempty (a) && return _reduce_empty (init )
95100 r = parent (a)
96101 if zero (eltype (r)) in r
97102 r2 = r[firstindex (r): searchsortedlast (r, zero (eltype (r)))]
0 commit comments