Reverse the order of the children of an array or object.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(json_core), | intent(inout) | :: | json | |||
type(json_value), | pointer | :: | p |
subroutine json_value_reverse(json,p)
implicit none
class(json_core),intent(inout) :: json
type(json_value),pointer :: p
type(json_value),pointer :: tmp !! temp variable for traversing the list
type(json_value),pointer :: current !! temp variable for traversing the list
integer(IK) :: var_type !! for getting the variable type
if (associated(p)) then
call json%info(p,var_type=var_type)
! can only reverse objects or arrays
if (var_type==json_object .or. var_type==json_array) then
nullify(tmp)
current => p%children
p%tail => current
! Swap next and previous for all nodes:
do
if (.not. associated(current)) exit
tmp => current%previous
current%previous => current%next
current%next => tmp
current => current%previous
end do
if (associated(tmp)) then
p%children => tmp%previous
end if
end if
end if
end subroutine json_value_reverse