Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Where possible, edges connecting nodes are
given different colours to make them easier to distinguish in
large graphs.
function fragment_lookup_find(this,monomers,n)result(idx)!! Find fragment index for given monomer combinationclass(fragment_lookup_t),intent(in)::thisinteger,intent(in)::monomers(:),ninteger(int64)::idxinteger(int32)::hash_valinteger::bucket,sorted_key(n)type(hash_entry_t),pointer::entry! Sort monomers for canonical keysorted_key=monomers(1:n)call sort(sorted_key)! Compute hashhash_val=fnv_1a_hash(sorted_key)bucket=1+modulo(hash_val,int(this%table_size,int32))! Search chainif(allocated(this%table(bucket)%key))then if(arrays_equal_internal(this%table(bucket)%key,sorted_key,n))thenidx=this%table(bucket)%value return end if entry=>this%table(bucket)%nextdo while(associated(entry))if(arrays_equal_internal(entry%key,sorted_key,n))thenidx=entry%value return end if entry=>entry%nextend do end if! Not foundidx=-1end function fragment_lookup_find