@@ -185,6 +185,12 @@ defmodule Range do
185185 def size ( first .. last // step ) when step < 0 and first < last , do: 0
186186 def size ( first .. last // step ) , do: abs ( div ( last - first , step ) ) + 1
187187
188+ # TODO: Remove me on v2.0
189+ def size ( % { __struct__: Range , first: first , last: last } = range ) do
190+ step = if first <= last , do: 1 , else: - 1
191+ size ( Map . put ( range , :step , step ) )
192+ end
193+
188194 @ doc """
189195 Checks if two ranges are disjoint.
190196
@@ -273,6 +279,12 @@ defimpl Enumerable, for: Range do
273279 reduce ( first , last , acc , fun , step )
274280 end
275281
282+ # TODO: Remove me on v2.0
283+ def reduce ( % { __struct__: Range , first: first , last: last } = range , acc , fun ) do
284+ step = if first <= last , do: 1 , else: - 1
285+ reduce ( Map . put ( range , :step , step ) , acc , fun )
286+ end
287+
276288 defp reduce ( _first , _last , { :halt , acc } , _fun , _step ) do
277289 { :halted , acc }
278290 end
@@ -304,6 +316,13 @@ defimpl Enumerable, for: Range do
304316 end
305317 end
306318
319+ # TODO: Remove me on v2.0
320+ def member? ( % { __struct__: Range , first: first , last: last } = range , value )
321+ when is_integer ( value ) do
322+ step = if first <= last , do: 1 , else: - 1
323+ member? ( Map . put ( range , :step , step ) , value )
324+ end
325+
307326 def member? ( _ , _value ) do
308327 { :ok , false }
309328 end
@@ -316,12 +335,19 @@ defimpl Enumerable, for: Range do
316335 { :ok , Range . size ( range ) , & slice ( first + & 1 * step , step , & 2 ) }
317336 end
318337
338+ # TODO: Remove me on v2.0
339+ def slice ( % { __struct__: Range , first: first , last: last } = range ) do
340+ step = if first <= last , do: 1 , else: - 1
341+ slice ( Map . put ( range , :step , step ) )
342+ end
343+
319344 defp slice ( current , _step , 1 ) , do: [ current ]
320345 defp slice ( current , step , remaining ) , do: [ current | slice ( current + step , step , remaining - 1 ) ]
321346end
322347
323348defimpl Inspect , for: Range do
324349 import Inspect.Algebra
350+ import Kernel , except: [ inspect: 2 ]
325351
326352 def inspect ( first .. last // 1 , opts ) do
327353 concat ( [ to_doc ( first , opts ) , ".." , to_doc ( last , opts ) ] )
@@ -330,4 +356,10 @@ defimpl Inspect, for: Range do
330356 def inspect ( first .. last // step , opts ) do
331357 concat ( [ to_doc ( first , opts ) , ".." , to_doc ( last , opts ) , "//" , to_doc ( step , opts ) ] )
332358 end
359+
360+ # TODO: Remove me on v2.0
361+ def inspect ( % { __struct__: Range , first: first , last: last } = range , opts ) do
362+ step = if first <= last , do: 1 , else: - 1
363+ inspect ( Map . put ( range , :step , step ) , opts )
364+ end
333365end
0 commit comments