Returns True if p2
is a descendant of p1
(i.e, a child, or a child of child, etc.)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p1 | |||
type(json_value), | pointer | :: | p2 |
function json_value_is_child_of(json,p1,p2) result(is_child_of)
implicit none
class(json_core),intent(inout) :: json
type(json_value),pointer :: p1
type(json_value),pointer :: p2
logical(LK) :: is_child_of
is_child_of = .false.
if (json%exception_thrown) return
if (associated(p1) .and. associated(p2)) then
if (associated(p1%children)) then
call json%traverse(p1%children,is_child_of_callback)
end if
end if
contains
subroutine is_child_of_callback(json,p,finished)
!! Traverse until `p` is `p2`.
implicit none
class(json_core),intent(inout) :: json
type(json_value),pointer,intent(in) :: p
logical(LK),intent(out) :: finished
is_child_of = associated(p,p2)
finished = is_child_of ! stop searching if found
end subroutine is_child_of_callback
end function json_value_is_child_of