Skip to content

Commit 4b37211

Browse files
committed
Merge pull request #1288 from petermm/keyword.ex-split/2
Add Keyword.ex split/2 Used by Supervisor.ex These changes are made under both the "Apache 2.0" and the "GNU Lesser General Public License 2.1 or later" license terms (dual license). SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
2 parents 91ca775 + 7b2d5fa commit 4b37211

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ also non string parameters (e.g. `Enum.join([1, 2], ",")`
2626
- Support for `gen_server:start_monitor/3,4`
2727
- Support for `code:ensure_loaded/1`
2828
- Support for `io_lib:latin1_char_list/1`
29+
- Add support to Elixir for `Keyword.split/2`
2930

3031
### Changed
3132

libs/exavmlib/lib/Keyword.ex

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
# Copyright 2012-2024 Elixir Contributors
55
# https://github.com/elixir-lang/elixir/commits/v1.10.1/lib/elixir/lib/keyword.ex
66
#
7-
# merge/2 take/2 pop/2/3 pop!/2 keyword?/1 has_key?/2 from:
7+
# merge/2 take/2 pop/2/3 pop!/2 keyword?/1 has_key?/2 split/2 from:
88
# https://github.com/elixir-lang/elixir/blob/v1.16/lib/elixir/lib/keyword.ex
99
#
1010
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -101,6 +101,19 @@ defmodule Keyword do
101101
end
102102
end
103103

104+
def split(keywords, keys) when is_list(keywords) and is_list(keys) do
105+
fun = fn {k, v}, {take, drop} ->
106+
case k in keys do
107+
true -> {[{k, v} | take], drop}
108+
false -> {take, [{k, v} | drop]}
109+
end
110+
end
111+
112+
acc = {[], []}
113+
{take, drop} = :lists.foldl(fun, acc, keywords)
114+
{:lists.reverse(take), :lists.reverse(drop)}
115+
end
116+
104117
def take(keywords, keys) when is_list(keywords) and is_list(keys) do
105118
:lists.filter(fn {k, _} -> :lists.member(k, keys) end, keywords)
106119
end

0 commit comments

Comments
 (0)