The standard library Typelocked_Double_Keyed_hashtable api defines access to hashtables which take a pair of keys and are specialized to hold a particular value type.
Implementations of the Typelocked_Double_Keyed_hashtable api may be generated using typelocked_double_keyed_hashtable_g from src/lib/src/typelocked-double-keyed-hashtable-g.pkg.
The Typelocked_Double_Keyed_hashtable api source code is in src/lib/src/typelocked-double-keyed-hashtable.api. The above information is manually maintained and may contain errors.
api { package key1 : api { Hash_Key; hash_value : Hash_Key -> Unt; same_key : (Hash_Key , Hash_Key) -> Bool;};; package key2 : api { Hash_Key; hash_value : Hash_Key -> Unt; same_key : (Hash_Key , Hash_Key) -> Bool;};; Hashtable X; make_hashtable : (Int , Exception) -> Hashtable(X ); clear : Hashtable(X ) -> Void; set : Hashtable(X ) -> (key1::Hash_Key , key2::Hash_Key , X) -> Void; in_domain1 : Hashtable(X ) -> key1::Hash_Key -> Bool; in_domain2 : Hashtable(X ) -> key2::Hash_Key -> Bool; get1 : Hashtable(X ) -> key1::Hash_Key -> X; get2 : Hashtable(X ) -> key2::Hash_Key -> X; find1 : Hashtable(X ) -> key1::Hash_Key -> Null_Or(X ); find2 : Hashtable(X ) -> key2::Hash_Key -> Null_Or(X ); remove1 : Hashtable(X ) -> key1::Hash_Key -> X; remove2 : Hashtable(X ) -> key2::Hash_Key -> X; vals_count : Hashtable(X ) -> Int; vals_list : Hashtable(X ) -> List(X ); keyvals_list : Hashtable(X ) -> List(((key1::Hash_Key , key2::Hash_Key , X)) ); apply : (X -> Void) -> Hashtable(X ) -> Void; keyed_apply : ((key1::Hash_Key , key2::Hash_Key , X) -> Void) -> Hashtable(X ) -> Void; map : (X -> Y) -> Hashtable(X ) -> Hashtable(Y ); keyed_map : ((key1::Hash_Key , key2::Hash_Key , X) -> Y) -> Hashtable(X ) -> Hashtable(Y ); fold : ((X , Y) -> Y) -> Y -> Hashtable(X ) -> Y; foldi : ((key1::Hash_Key , key2::Hash_Key , X , Y) -> Y) -> Y -> Hashtable(X ) -> Y; filter : (X -> Bool) -> Hashtable(X ) -> Void; keyed_filter : ((key1::Hash_Key , key2::Hash_Key , X) -> Bool) -> Hashtable(X ) -> Void; copy : Hashtable(X ) -> Hashtable(X ); bucket_sizes : Hashtable(X ) -> (List(Int ) , List(Int ));};