Converts offsets to sizes If the offsets of ends are not given, then the array of sizes is assumed to be one greater than the desired sizes.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in), | DIMENSION(:) | :: | offsets_start |
offsets of starts |
|
integer, | intent(out), | DIMENSION(:) | :: | sizes |
array with sizes |
|
integer, | intent(in), | optional, | DIMENSION(:) | :: | offsets_stop |
offsets of ends |
PURE SUBROUTINE convert_offsets_to_sizes(offsets_start, sizes, offsets_stop)
!! Converts offsets to sizes
!! If the offsets of ends are not given, then the array of sizes is assumed
!! to be one greater than the desired sizes.
INTEGER, DIMENSION(:), INTENT(IN) :: offsets_start
!! offsets of starts
INTEGER, DIMENSION(:), INTENT(OUT) :: sizes
!! array with sizes
INTEGER, DIMENSION(:), INTENT(IN), OPTIONAL :: offsets_stop
!! offsets of ends
INTEGER :: i, n
! ---------------------------------------------------------------------------
n = SIZE(offsets_start)
IF (PRESENT(offsets_stop)) THEN
sizes(:) = offsets_stop(:) - offsets_start(:) + 1
ELSE
IF (n .GT. 1) THEN
DO i = 1, n - 1
sizes(i) = sizes(i + 1) - sizes(i)
END DO
END IF
END IF
END SUBROUTINE convert_offsets_to_sizes