Generic lookup routine, using an external routine for verification DOES NOT TO THE SAME AS direct_lookup
| Type | Intent | Optional | Attributes | Name | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| class(shared_rhash_t), | intent(in) | :: | this | |||||||||||||||||
| integer(kind=int64), | intent(in) | :: | hval |
hash value of the index to look up |
||||||||||||||||
| integer(kind=int64), | intent(out) | :: | pos |
on return, the matching entry |
||||||||||||||||
| logical, | intent(out) | :: | t_found |
on return, true if and only if index was found |
||||||||||||||||
private function loc_verify(i) result(match)Arguments
Return Value logical |
||||||||||||||||||||
subroutine callback_lookup(this, hval, pos, t_found, loc_verify) class(shared_rhash_t), intent(in) :: this integer(int64), intent(in) :: hval integer(int64), intent(out) :: pos logical, intent(out) :: t_found integer(int64) :: lower, upper, i interface function loc_verify(i) result(match) use constants integer(int64), intent(in) :: i logical :: match end function loc_verify end interface lower = this%hval_offsets%ptr(hval) + 1 upper = this%hval_offsets%ptr(hval + 1) t_found = .false. pos = 0 do i = lower, upper if (loc_verify(this%indices%ptr(i))) then pos = this%indices%ptr(i) t_found = .true. return end if end do end subroutine callback_lookup