diff --git a/libs/exavmlib/lib/Base.ex b/libs/exavmlib/lib/Base.ex index 27d15381c..86a151f7d 100644 --- a/libs/exavmlib/lib/Base.ex +++ b/libs/exavmlib/lib/Base.ex @@ -22,6 +22,7 @@ # defmodule Base do + @compile {:autoload, false} @moduledoc """ This module provides data encoding and decoding functions according to [RFC 4648](https://tools.ietf.org/html/rfc4648). diff --git a/libs/exavmlib/lib/Range.ex b/libs/exavmlib/lib/Range.ex index e8f72c08a..a31371aa7 100644 --- a/libs/exavmlib/lib/Range.ex +++ b/libs/exavmlib/lib/Range.ex @@ -89,6 +89,39 @@ defmodule Range do "got: #{inspect(first)}..#{inspect(last)}" end + if Version.match?(System.version(), "~> 1.12") do + @doc """ + Returns the size of `range`. + + ## Examples + + iex> Range.size(1..10) + 10 + iex> Range.size(1..10//2) + 5 + iex> Range.size(1..10//3) + 4 + iex> Range.size(1..10//-1) + 0 + + iex> Range.size(10..1//-1) + 10 + iex> Range.size(10..1//-2) + 5 + iex> Range.size(10..1//-3) + 4 + iex> Range.size(10..1//1) + 0 + + """ + @doc since: "0.6.6" + @spec size(t) :: non_neg_integer + def size(range) + def size(first..last//step) when step > 0 and first > last, do: 0 + def size(first..last//step) when step < 0 and first < last, do: 0 + def size(first..last//step), do: abs(div(last - first, step)) + 1 + end + @doc """ Checks if two ranges are disjoint. diff --git a/libs/exavmlib/mix.lock b/libs/exavmlib/mix.lock index a7bf9b1d7..ddf440e02 100644 --- a/libs/exavmlib/mix.lock +++ b/libs/exavmlib/mix.lock @@ -1,7 +1,9 @@ %{ "earmark": {:hex, :earmark, "1.4.3", "364ca2e9710f6bff494117dbbd53880d84bebb692dafc3a78eb50aa3183f2bfd", [:mix], [], "hexpm"}, - "ex_doc": {:hex, :ex_doc, "0.21.3", "857ec876b35a587c5d9148a2512e952e24c24345552259464b98bfbb883c7b42", [:mix], [{:earmark, "~> 1.4", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm"}, - "makeup": {:hex, :makeup, "1.0.0", "671df94cf5a594b739ce03b0d0316aa64312cee2574b6a44becb83cd90fb05dc", [:mix], [{:nimble_parsec, "~> 0.5.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.14.0", "cf8b7c66ad1cff4c14679698d532f0b5d45a3968ffbcbfd590339cb57742f1ae", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm"}, - "nimble_parsec": {:hex, :nimble_parsec, "0.5.3", "def21c10a9ed70ce22754fdeea0810dafd53c2db3219a0cd54cf5526377af1c6", [:mix], [], "hexpm"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.43", "34b2f401fe473080e39ff2b90feb8ddfeef7639f8ee0bbf71bb41911831d77c5", [:mix], [], "hexpm", "970a3cd19503f5e8e527a190662be2cee5d98eed1ff72ed9b3d1a3d466692de8"}, + "ex_doc": {:hex, :ex_doc, "0.36.1", "4197d034f93e0b89ec79fac56e226107824adcce8d2dd0a26f5ed3a95efc36b1", [:mix], [{:earmark_parser, "~> 1.4.42", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "d7d26a7cf965dacadcd48f9fa7b5953d7d0cfa3b44fa7a65514427da44eafd89"}, + "makeup": {:hex, :makeup, "1.2.1", "e90ac1c65589ef354378def3ba19d401e739ee7ee06fb47f94c687016e3713d1", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "d36484867b0bae0fea568d10131197a4c2e47056a6fbe84922bf6ba71c8d17ce"}, + "makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"}, + "makeup_erlang": {:hex, :makeup_erlang, "1.0.2", "03e1804074b3aa64d5fad7aa64601ed0fb395337b982d9bcf04029d68d51b6a7", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "af33ff7ef368d5893e4a267933e7744e46ce3cf1f61e2dccf53a111ed3aa3727"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"}, }