Implement ref iterators
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
-module(geef_ref).
|
||||
|
||||
-export([lookup/2, resolve/1, create/4, dwim/2, shorthand/1]).
|
||||
-export([lookup/2, iterator/1, iterator/2, next/1, resolve/1, create/4, dwim/2, shorthand/1]).
|
||||
|
||||
-include("geef_records.hrl").
|
||||
|
||||
@@ -35,6 +35,28 @@ lookup(Repo, Refname) ->
|
||||
Other
|
||||
end.
|
||||
|
||||
-spec iterator(pid(), iolist() | undefined) -> {ok, geef_iterator()} | {error, term()}.
|
||||
iterator(Repo, Regexp) ->
|
||||
case geef_repo:iterator(Repo, Regexp) of
|
||||
{ok, Handle} ->
|
||||
{ok, #geef_iterator{type=ref, handle=Handle}};
|
||||
Other ->
|
||||
Other
|
||||
end.
|
||||
|
||||
-spec iterator(pid()) -> {ok, geef_iterator()} | {error, term()}.
|
||||
iterator(Repo) ->
|
||||
iterator(Repo, undefined).
|
||||
|
||||
next(#geef_iterator{type=ref, handle=Handle}) ->
|
||||
case geef_nif:reference_next(Handle) of
|
||||
{ok, RefHandle} ->
|
||||
{ok, Name} = geef_nif:reference_name(RefHandle),
|
||||
{ok, new(Name, RefHandle)};
|
||||
Other ->
|
||||
Other
|
||||
end.
|
||||
|
||||
-spec resolve(geef_reference()) -> {ok, geef_reference()} | {error, term()}.
|
||||
resolve(Ref = #geef_reference{type=oid}) ->
|
||||
{ok, Ref}; % resolving an oid ref is a no-op, skip going into the NIF
|
||||
|
||||
Reference in New Issue
Block a user