erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 line
2.1 KiB

4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
4 年之前
  1. %%%-------------------------------------------------------------------
  2. %%% @author fox
  3. %%% @copyright (C) 2017, <COMPANY>
  4. %%% @doc
  5. %%% indexable skip list, can insert duplicated value
  6. %%% @end
  7. %%% Created : 16. 十月 2017 14:16
  8. %%%-------------------------------------------------------------------
  9. -module(skiplist).
  10. -author("fox").
  11. %% API
  12. -export([
  13. init/1,
  14. new/0, free/1,
  15. insert/3, delete/3, update/4,
  16. to_list/1,
  17. range/3, range_with_score/3, range_by_score/3,
  18. index_of_score/2, at/2,
  19. size/1]).
  20. -type skiplist() :: non_neg_integer().
  21. -type score() :: integer().
  22. -type value() :: integer().
  23. -spec init(Path) -> ok | Error when
  24. Path :: string(),
  25. Error :: any().
  26. init(Path) ->
  27. erlang:load_nif(Path, 0).
  28. -spec new() -> skiplist().
  29. new() ->
  30. erlang:nif_error(undef).
  31. -spec free(skiplist()) -> ok.
  32. free(_List) ->
  33. erlang:nif_error(undef).
  34. -spec insert(skiplist(), score(), value()) -> 0.
  35. insert(_List, _Score, _Value) ->
  36. erlang:nif_error(undef).
  37. -spec delete(skiplist(), score(), value()) ->
  38. 0 | 1. %% 0 success, 1 fail
  39. delete(_List, _Score, _Value) ->
  40. erlang:nif_error(undef).
  41. -spec update(skiplist(), score(), value(), score()) -> 0.
  42. update(_List, _Score, _Value, _OldScore) ->
  43. erlang:nif_error(undef).
  44. -spec to_list(skiplist()) -> [{score(), value()}].
  45. to_list(_List) ->
  46. erlang:nif_error(undef).
  47. -spec size(skiplist()) -> non_neg_integer().
  48. size(_List) ->
  49. erlang:nif_error(undef).
  50. -spec index_of_score(skiplist(), score()) -> non_neg_integer().
  51. index_of_score(_List, _Score) ->
  52. erlang:nif_error(undef).
  53. -spec at(skiplist(), non_neg_integer()) -> error | {score(), value()}.
  54. at(_List, _Index) ->
  55. erlang:nif_error(undef).
  56. -spec range(skiplist(), non_neg_integer(), non_neg_integer()) -> [value()].
  57. range(_List, _Start, _Len) ->
  58. erlang:nif_error(undef).
  59. -spec range_with_score(skiplist(), non_neg_integer(), non_neg_integer()) ->
  60. [{score(), value()}].
  61. range_with_score(_List, _Start, _Len) ->
  62. erlang:nif_error(undef).
  63. -spec range_by_score(skiplist(), score(), score()) ->
  64. {StartIndex :: non_neg_integer(), [{score(), value()}]}.
  65. range_by_score(_List, _Score1, _Score2) ->
  66. erlang:nif_error(undef).