Skip to content

Commit 115b673

Browse files
gertvvlunagl
authored andcommitted
Improve performance of glearray.get() on Erlang
1 parent bba89fc commit 115b673

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

src/glearray.gleam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,14 +86,14 @@ pub fn length(of array: Array(a)) -> Int
8686
/// Error(Nil)
8787
/// ```
8888
///
89+
@external(erlang, "glearray_ffi", "get")
8990
pub fn get(in array: Array(a), at index: Int) -> Result(a, Nil) {
9091
case is_valid_index(array, index) {
9192
True -> Ok(do_get(array, index))
9293
False -> Error(Nil)
9394
}
9495
}
9596

96-
@external(erlang, "glearray_ffi", "get")
9797
@external(javascript, "./glearray_ffi.mjs", "get")
9898
fn do_get(array: Array(a), index: Int) -> a
9999

src/glearray_ffi.erl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44

55
new() -> {}.
66

7-
get(Array, Index) -> element(Index + 1, Array).
7+
get(Array, Index) ->
8+
case catch element(Index + 1, Array) of
9+
{'EXIT', _} -> {error,nil};
10+
E -> {ok,E}
11+
end.
812

913
set(Array, Index, Value) -> setelement(Index + 1, Array, Value).
1014

0 commit comments

Comments
 (0)