%% -*- Prolog -*-

:- module(bphash, [new_hashtable/1,
   new_hashtable/2,
   is_hashtable/1,
   hashtable_get/3,
   hashtable_put/3,
   hashtable_register/3,
   hashtable_size/2,
   hashtable_to_list/2,
   hashtable_values_to_list/2,
   hashtable_keys_to_list/2]).

:- use_module(library(bhash), [b_hash_new/2,
    is_b_hash/1,
    b_hash_lookup/3,
    b_hash_insert/4,
    b_hash_size/2,
   b_hash_to_list/2,
   b_hash_values_to_list/2,
   b_hash_keys_to_list/2]).

new_hashtable(Hash) :-
	b_hash_new(Hash, 7).

new_hashtable(Hash, Size) :-
	b_hash_new(Hash, Size).

is_hashtable(Hash) :-
	is_b_hash(Hash).

hashtable_get(Hash, Key, Value) :-
	b_hash_lookup(Key, Value, Hash).

hashtable_put(Hash, Key, Value) :-
	b_hash_insert(Hash, Key, Value, Hash).

hashtable_register(Hash, Key, Value) :-
	b_hash_lookup(Key, Value0, Hash), !,
	Value0 = Value.
hashtable_register(Hash, Key, Value) :-
	b_hash_insert(Hash, Key, Value, Hash).

hashtable_size(Hash, Size) :-
	b_hash_size(Hash, Size).

hashtable_to_list(Hash, List) :-
	b_hash_to_list(Hash, List0),
	keylist_to_bp(List0, List).

hashtable_keys_to_list(Hash, List) :-
	b_hash_keys_to_list(Hash, List).

hashtable_values_to_list(Hash, List) :-
	b_hash_values_to_list(Hash, List).

keylist_to_bp([], []).
keylist_to_bp((X-Y).List0, (X=Y).List) :-
	keylist_to_bp(List0, List).