From bbdb35ae03e83bf1a7b73e005b194fd101a16809 Mon Sep 17 00:00:00 2001 From: martinsumner Date: Thu, 5 Jan 2017 14:09:39 +0000 Subject: [PATCH] Add ordered_set conversion Can we go from an ets table to a skiplist --- src/leveled_skiplist.erl | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/leveled_skiplist.erl b/src/leveled_skiplist.erl index 5824829..8870609 100644 --- a/src/leveled_skiplist.erl +++ b/src/leveled_skiplist.erl @@ -20,6 +20,8 @@ from_list/2, from_sortedlist/1, from_sortedlist/2, + from_orderedset/1, + from_orderedset/2, to_list/1, enter/3, enter/4, @@ -71,6 +73,12 @@ enter_nolookup(Key, Value, SkipList) -> element(2, SkipList), ?SKIP_WIDTH, ?LIST_HEIGHT)}. +from_orderedset(Table) -> + from_orderedset(Table, false). + +from_orderedset(Table, Bloom) -> + from_sortedlist(ets:tab2list(Table), Bloom). + from_list(UnsortedKVL) -> from_list(UnsortedKVL, false). @@ -405,7 +413,15 @@ skiplist_nobloom_test() -> skiplist_tester(Bloom) -> N = 4000, KL = generate_randomkeys(1, N, 1, N div 5), - + + OS = ets:new(test, [ordered_set, private]), + ets:insert(OS, KL), + SWaETS = os:timestamp(), + SkipList = from_orderedset(OS, Bloom), + io:format(user, "Generating skip list with ~w keys in ~w microseconds " ++ + "from ordered set~n", + [N, timer:now_diff(os:timestamp(), SWaETS)]), + SWaGSL = os:timestamp(), SkipList = from_list(lists:reverse(KL), Bloom), io:format(user, "Generating skip list with ~w keys in ~w microseconds~n" ++