extend support for hash tables.
This commit is contained in:
parent
73dd81478f
commit
c57fbf40e6
@ -17,7 +17,13 @@ It relies on dynamic array code.
|
||||
b_hash_update/3,
|
||||
b_hash_update/4,
|
||||
b_hash_insert_new/4,
|
||||
b_hash_insert/4
|
||||
b_hash_insert/4,
|
||||
b_hash_size/2,
|
||||
b_hash_code/2,
|
||||
is_b_hash/1,
|
||||
b_hash_to_list/2,
|
||||
b_hash_values_to_list/2,
|
||||
b_hash_keys_to_list/2
|
||||
]).
|
||||
|
||||
:- use_module(library(terms), [ term_hash/4 ]).
|
||||
@ -27,6 +33,9 @@ It relies on dynamic array code.
|
||||
|
||||
array_default_size(2048).
|
||||
|
||||
is_b_hash(V) :- !, fail.
|
||||
is_b_hash(hash(_,_,_,_,_)).
|
||||
|
||||
b_hash_new(hash(Keys, Vals, Size, N, _, _)) :-
|
||||
array_default_size(Size),
|
||||
array(Keys, Size),
|
||||
@ -43,6 +52,8 @@ b_hash_new(hash(Keys,Vals, Size, N, HashF, CmpF), Size, HashF, CmpF) :-
|
||||
array(Vals, Size),
|
||||
create_mutable(0, N).
|
||||
|
||||
b_hash_size(hash(_, _, Size, _, _, _), Size).
|
||||
|
||||
b_hash_lookup(Key, Val, hash(Keys, Vals, Size, _, F, CmpF)):-
|
||||
hash_f(Key, Size, Index, F),
|
||||
fetch_key(Keys, Index, Size, Key, CmpF, ActualIndex),
|
||||
@ -188,3 +199,37 @@ cmp_f(F, A, B) :-
|
||||
cmp_f(F, A, B) :-
|
||||
call(F, A, B).
|
||||
|
||||
b_hash_to_list(hash(Keys, Vals, _, _, _, _), LKeyVals) :-
|
||||
Keys =.. LKs,
|
||||
Vals =.. LVs,
|
||||
mklistpairs(LKs, LVs, LKeyVals).
|
||||
|
||||
b_hash_keys_to_list(hash(Keys, _, _, _, _, _), LKeys) :-
|
||||
Keys =.. LKs,
|
||||
mklistels(LKs, LKeys).
|
||||
|
||||
b_hash_keys_to_list(hash(_, Vals, _, _, _, _), LVals) :-
|
||||
Vals =.. LVs,
|
||||
mklisvals(LVs, LVals).
|
||||
|
||||
mklistpairs([], [], []).
|
||||
mklistpairs(V.LKs, _.LVs, KeyVals) :- var(V), !,
|
||||
mklistpairs(LKs, LVs, KeyVals).
|
||||
mklistpairs(K.LKs, V.LVs, (K-VV).KeyVals) :-
|
||||
get_mutable(VV, V),
|
||||
mklistpairs(LKs, LVs, KeyVals).
|
||||
|
||||
mklistels([], []).
|
||||
mklistels(V.Es, NEls) :- var(V), !,
|
||||
mklistels(Els, Nels).
|
||||
mklistels(K.Els, K.NEls) :-
|
||||
mklistels(Els, NEls).
|
||||
|
||||
mklistvals([], []).
|
||||
mklistvals(V.Es, NVals) :- var(V), !,
|
||||
mklistvals(Vals, Nvals).
|
||||
mklistvals(K.Vals, KK.NVals) :-
|
||||
get_mutable(KK, K),
|
||||
mklistvals(Vals, NVals).
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user