|
|
- %%%-------------------------------------------------------------------
- %%% @author fox
- %%% @copyright (C) 2017, <COMPANY>
- %%% @doc
- %%% indexable skip list, can insert duplicated value
- %%% @end
- %%% Created : 16. 十月 2017 14:16
- %%%-------------------------------------------------------------------
- -module(skiplist).
- -author("fox").
-
- %% API
- -export([
- init/1,
- new/0, free/1,
- insert/3, delete/3, update/4,
- to_list/1,
- range/3, range_with_score/3, range_by_score/3,
- index_of_score/2, at/2,
- size/1]).
-
- -type skiplist() :: non_neg_integer().
- -type score() :: integer().
- -type value() :: integer().
-
- -spec init(Path) -> ok | Error when
- Path :: string(),
- Error :: any().
- init(Path) ->
- erlang:load_nif(Path, 0).
-
- -spec new() -> skiplist().
- new() ->
- erlang:nif_error(undef).
-
- -spec free(skiplist()) -> ok.
- free(_List) ->
- erlang:nif_error(undef).
-
- -spec insert(skiplist(), score(), value()) -> 0.
- insert(_List, _Score, _Value) ->
- erlang:nif_error(undef).
-
- -spec delete(skiplist(), score(), value()) ->
- 0 | 1. %% 0 success, 1 fail
- delete(_List, _Score, _Value) ->
- erlang:nif_error(undef).
-
- -spec update(skiplist(), score(), value(), score()) -> 0.
- update(_List, _Score, _Value, _OldScore) ->
- erlang:nif_error(undef).
-
- -spec to_list(skiplist()) -> [{score(), value()}].
- to_list(_List) ->
- erlang:nif_error(undef).
-
- -spec size(skiplist()) -> non_neg_integer().
- size(_List) ->
- erlang:nif_error(undef).
-
- -spec index_of_score(skiplist(), score()) -> non_neg_integer().
- index_of_score(_List, _Score) ->
- erlang:nif_error(undef).
-
- -spec at(skiplist(), non_neg_integer()) -> error | {score(), value()}.
- at(_List, _Index) ->
- erlang:nif_error(undef).
-
- -spec range(skiplist(), non_neg_integer(), non_neg_integer()) -> [value()].
- range(_List, _Start, _Len) ->
- erlang:nif_error(undef).
-
- -spec range_with_score(skiplist(), non_neg_integer(), non_neg_integer()) ->
- [{score(), value()}].
- range_with_score(_List, _Start, _Len) ->
- erlang:nif_error(undef).
-
- -spec range_by_score(skiplist(), score(), score()) ->
- {StartIndex :: non_neg_integer(), [{score(), value()}]}.
- range_by_score(_List, _Score1, _Score2) ->
- erlang:nif_error(undef).
|