@@ -884,6 +884,33 @@ defmodule Enum do
884
884
end
885
885
end
886
886
887
+ @ doc """
888
+ Convert `collection` to a list.
889
+
890
+ ## Examples
891
+
892
+ iex> Enum.to_list(1 .. 3)
893
+ [1, 2, 3]
894
+
895
+ """
896
+ @ spec to_list ( t ) :: [ term ]
897
+ def to_list ( collection ) when is_list collection do
898
+ collection
899
+ end
900
+
901
+ def to_list ( collection ) do
902
+ case I . iterator ( collection ) do
903
+ { _iterator , :stop } ->
904
+ [ ]
905
+
906
+ { iterator , pointer } ->
907
+ do_to_list ( pointer , iterator )
908
+
909
+ list ->
910
+ list
911
+ end
912
+ end
913
+
887
914
@ doc """
888
915
Iterates the enumerable removing all duplicated items.
889
916
@@ -932,14 +959,6 @@ defmodule Enum do
932
959
defp iterator ( collection ) when is_list ( collection ) , do: collection
933
960
defp iterator ( collection ) , do: I . iterator ( collection )
934
961
935
- defp to_list ( { h , next } , iterator ) do
936
- [ h | to_list ( iterator . ( next ) , iterator ) ]
937
- end
938
-
939
- defp to_list ( :stop , _ ) do
940
- [ ]
941
- end
942
-
943
962
defp iterate_and_count ( collection , count ) do
944
963
{ list , total_items } = do_iterate_and_count ( collection )
945
964
{ list , max ( 0 , total_items - abs ( count ) ) }
@@ -1068,7 +1087,7 @@ defmodule Enum do
1068
1087
end
1069
1088
1070
1089
defp do_drop ( extra , iterator , 0 ) do
1071
- to_list ( extra , iterator )
1090
+ do_to_list ( extra , iterator )
1072
1091
end
1073
1092
1074
1093
defp do_drop ( :stop , _ , _ ) do
@@ -1093,7 +1112,7 @@ defmodule Enum do
1093
1112
if fun . ( h ) do
1094
1113
do_drop_while ( iterator . ( next ) , iterator , fun )
1095
1114
else
1096
- to_list ( extra , iterator )
1115
+ do_to_list ( extra , iterator )
1097
1116
end
1098
1117
end
1099
1118
@@ -1485,7 +1504,7 @@ defmodule Enum do
1485
1504
end
1486
1505
1487
1506
defp do_split ( extra , iterator , 0 , acc ) do
1488
- { :lists . reverse ( acc ) , to_list ( extra , iterator ) }
1507
+ { :lists . reverse ( acc ) , do_to_list ( extra , iterator ) }
1489
1508
end
1490
1509
1491
1510
defp do_split ( :stop , _ , _ , acc ) do
@@ -1510,7 +1529,7 @@ defmodule Enum do
1510
1529
if fun . ( h ) do
1511
1530
do_split_while ( iterator . ( next ) , iterator , fun , [ h | acc ] )
1512
1531
else
1513
- { :lists . reverse ( acc ) , to_list ( extra , iterator ) }
1532
+ { :lists . reverse ( acc ) , do_to_list ( extra , iterator ) }
1514
1533
end
1515
1534
end
1516
1535
@@ -1574,6 +1593,16 @@ defmodule Enum do
1574
1593
[ ]
1575
1594
end
1576
1595
1596
+ ## to_list
1597
+
1598
+ defp do_to_list ( { h , next } , iterator ) do
1599
+ [ h | do_to_list ( iterator . ( next ) , iterator ) ]
1600
+ end
1601
+
1602
+ defp do_to_list ( :stop , _ ) do
1603
+ [ ]
1604
+ end
1605
+
1577
1606
## uniq
1578
1607
1579
1608
defp do_uniq ( [ h | t ] , acc ) do
0 commit comments