Pack different kinds of data into single I1P array.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=I4P), | intent(in) | :: | a1(1:) | First data stream. |
||
| integer(kind=I1P), | intent(in) | :: | a2(1:) | Second data stream. |
||
| integer(kind=I1P), | intent(inout), | allocatable | :: | packed(:) | Packed data into I1P array. |
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.
pure subroutine pack_data_I4_I1(a1, a2, packed)
!---------------------------------------------------------------------------------------------------------------------------------
!< Pack different kinds of data into single I1P array.
!---------------------------------------------------------------------------------------------------------------------------------
integer(I4P), intent(in) :: a1(1:) !< First data stream.
integer(I1P), intent(in) :: a2(1:) !< Second data stream.
integer(I1P), allocatable, intent(inout) :: packed(:) !< Packed data into I1P array.
integer(I1P), allocatable :: p1(:) !< Temporary packed data of first stream.
integer(I1P), allocatable :: p2(:) !< Temporary packed data of second stream.
integer(I4P) :: np !< Size of temporary packed data.
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
np = size(transfer(a1,p1)) ; allocate(p1(1:np)) ; p1 = transfer(a1,p1)
np = size(transfer(a2,p2)) ; allocate(p2(1:np)) ; p2 = transfer(a2,p2)
if (allocated(packed)) deallocate(packed) ; allocate(packed(1:size(p1,dim=1)+size(p2,dim=1))) ; packed = [p1,p2]
deallocate(p1,p2)
return
!---------------------------------------------------------------------------------------------------------------------------------
endsubroutine pack_data_I4_I1