diff options
author | Magnus Ahltorp <map@kth.se> | 2017-03-09 00:45:02 +0100 |
---|---|---|
committer | Magnus Ahltorp <map@kth.se> | 2017-03-09 00:45:02 +0100 |
commit | 515973768e37214d861fe592f25f2907567f2444 (patch) | |
tree | c1ffb77a016f884f1033177037f57741d4176393 /src/ht.erl | |
parent | 27b809c9525a876ecde0a5346e0264643197d934 (diff) |
Added ht:dump
Diffstat (limited to 'src/ht.erl')
-rw-r--r-- | src/ht.erl | 28 |
1 files changed, 26 insertions, 2 deletions
@@ -29,7 +29,7 @@ -behaviour(gen_server). -export([reset_tree/1, load_tree/1, size/0, leaf_hash/1]). --export([add/1, root/0, root/1, path/2, consistency/2]). +-export([add/1, root/0, root/1, path/2, consistency/2, dump/1]). -export([start_link/0, start_link/1, stop/0]). -export([init/1, handle_call/3, terminate/2, handle_cast/2, handle_info/2, code_change/3]). @@ -96,6 +96,8 @@ print_tree() -> call(?MODULE, {print_tree, 4}). print_tree(HashOutputLen) -> call(?MODULE, {print_tree, HashOutputLen}). +dump(Filename) -> + call(?MODULE, {dump, Filename}). %% gen_server callbacks init(Args) -> @@ -141,7 +143,9 @@ handle_call({consistency, Version1, Version2}, _From, State) -> handle_call(testing_get_state, _From, State) -> {reply, State, State}; handle_call({print_tree, HashOutputLen}, _From, State) -> - {reply, print_tree(State, HashOutputLen), State}. + {reply, print_tree(State, HashOutputLen), State}; +handle_call({dump, Filename}, _From, State) -> + {reply, dump(State, Filename), State}. %%%%%%%%%%%%%%%%%%%% %% Private. @@ -444,6 +448,26 @@ print_layer(Tree, HashOutputLen, Layer, ILast) -> lists:seq(0, ILast)), io:format("~n"). +dump(Tree, Filename) -> + {ok, File} = file:open(Filename, [read, write, binary]), + ok = file:write(File, "# evaluated " ++ integer_to_list(Tree#tree.evaluated) ++ "\n"), + lists:foreach(fun (R) -> + write_layer_header(File, R), + lists:foreach(fun (I) -> + Entry = ts:retrieve(Tree#tree.store, {R, I}), + dumpone(File, Entry) + end, lists:seq(0, ts:count(Tree#tree.store, R) - 1)) + end, lists:seq(0, depth(Tree) - 1)), + file:close(File). + +write_layer_header(File, Layer) -> + EntryText = "# layer " ++ integer_to_list(Layer) ++ "\n", + ok = file:write(File, EntryText). + +dumpone(File, Entry) -> + EntryText = hex:bin_to_hexstr(Entry) ++ "\n", + ok = file:write(File, EntryText). + %%%%%%%%%%%%%%%%%%%% %% Testing ht. |