@@ -906,15 +906,10 @@ pure function filter_i1(f, x) result(filter)
906
906
! ! This specific procedure is for 1-byte integers.
907
907
! ! Overloaded by generic procedure `filter`.
908
908
procedure (f_i1_logical) :: f ! ! Filtering function
909
- integer (i1), dimension (:), intent (in ) :: x ! ! Input array
910
- integer (i1), dimension (:), allocatable :: filter
911
- logical , dimension (:), allocatable :: f_x
909
+ integer (i1), intent (in ) :: x(:) ! ! Input array
910
+ integer (i1), allocatable :: filter(:)
912
911
integer :: i
913
- allocate (f_x(size (x)))
914
- do concurrent(i = 1 :size (x))
915
- f_x(i) = f(x(i))
916
- enddo
917
- filter = pack (x, f_x)
912
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
918
913
end function filter_i1
919
914
920
915
@@ -923,15 +918,10 @@ pure function filter_i2(f, x) result(filter)
923
918
! ! This specific procedure is for 2-byte integers.
924
919
! ! Overloaded by generic procedure `filter`.
925
920
procedure (f_i2_logical) :: f ! ! Filtering function
926
- integer (i2), dimension (:), intent (in ) :: x ! ! Input array
927
- integer (i2), dimension (:), allocatable :: filter
928
- logical , dimension (:), allocatable :: f_x
921
+ integer (i2), intent (in ) :: x(:) ! ! Input array
922
+ integer (i2), allocatable :: filter(:)
929
923
integer :: i
930
- allocate (f_x(size (x)))
931
- do concurrent(i = 1 :size (x))
932
- f_x(i) = f(x(i))
933
- enddo
934
- filter = pack (x, f_x)
924
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
935
925
end function filter_i2
936
926
937
927
@@ -940,15 +930,10 @@ pure function filter_i4(f, x) result(filter)
940
930
! ! This specific procedure is for 4-byte integers.
941
931
! ! Overloaded by generic procedure `filter`.
942
932
procedure (f_i4_logical) :: f ! ! Filtering function
943
- integer (i4), dimension (:), intent (in ) :: x ! ! Input array
944
- integer (i4), dimension (:), allocatable :: filter
945
- logical , dimension (:), allocatable :: f_x
933
+ integer (i4), intent (in ) :: x(:) ! ! Input array
934
+ integer (i4), allocatable :: filter(:)
946
935
integer :: i
947
- allocate (f_x(size (x)))
948
- do concurrent(i = 1 :size (x))
949
- f_x(i) = f(x(i))
950
- enddo
951
- filter = pack (x, f_x)
936
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
952
937
end function filter_i4
953
938
954
939
@@ -957,15 +942,10 @@ pure function filter_i8(f, x) result(filter)
957
942
! ! This specific procedure is for 8-byte integers.
958
943
! ! Overloaded by generic procedure `filter`.
959
944
procedure (f_i8_logical) :: f ! ! Filtering function
960
- integer (i8), dimension (:), intent (in ) :: x ! ! Input array
961
- integer (i8), dimension (:), allocatable :: filter
962
- logical , dimension (:), allocatable :: f_x
945
+ integer (i8), intent (in ) :: x(:) ! ! Input array
946
+ integer (i8), allocatable :: filter(:)
963
947
integer :: i
964
- allocate (f_x(size (x)))
965
- do concurrent(i = 1 :size (x))
966
- f_x(i) = f(x(i))
967
- enddo
968
- filter = pack (x, f_x)
948
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
969
949
end function filter_i8
970
950
971
951
@@ -974,15 +954,10 @@ pure function filter_r4(f, x) result(filter)
974
954
! ! This specific procedure is for 4-byte reals.
975
955
! ! Overloaded by generic procedure `filter`.
976
956
procedure (f_r4 _logical) :: f ! ! Filtering function
977
- real (r4 ), dimension (:), intent (in ) :: x ! ! Input array
978
- real (r4 ), dimension (:), allocatable :: filter
979
- logical , dimension (:), allocatable :: f_x
957
+ real (r4 ), intent (in ) :: x(:) ! ! Input array
958
+ real (r4 ), allocatable :: filter(:)
980
959
integer :: i
981
- allocate (f_x(size (x)))
982
- do concurrent(i = 1 :size (x))
983
- f_x(i) = f(x(i))
984
- enddo
985
- filter = pack (x, f_x)
960
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
986
961
end function filter_r4
987
962
988
963
@@ -991,15 +966,10 @@ pure function filter_r8(f, x) result(filter)
991
966
! ! This specific procedure is for 8-byte reals.
992
967
! ! Overloaded by generic procedure `filter`.
993
968
procedure (f_r8 _logical) :: f ! ! Filtering function
994
- real (r8 ), dimension (:), intent (in ) :: x ! ! Input array
995
- real (r8 ), dimension (:), allocatable :: filter
996
- logical , dimension (:), allocatable :: f_x
969
+ real (r8 ), intent (in ) :: x(:) ! ! Input array
970
+ real (r8 ), allocatable :: filter(:)
997
971
integer :: i
998
- allocate (f_x(size (x)))
999
- do concurrent(i = 1 :size (x))
1000
- f_x(i) = f(x(i))
1001
- enddo
1002
- filter = pack (x, f_x)
972
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
1003
973
end function filter_r8
1004
974
1005
975
@@ -1008,15 +978,10 @@ pure function filter_r16(f, x) result(filter)
1008
978
! ! This specific procedure is for 16-byte reals.
1009
979
! ! Overloaded by generic procedure `filter`.
1010
980
procedure (f_r16_logical) :: f ! ! Filtering function
1011
- real (r16), dimension (:), intent (in ) :: x ! ! Input array
1012
- real (r16), dimension (:), allocatable :: filter
1013
- logical , dimension (:), allocatable :: f_x
981
+ real (r16), intent (in ) :: x(:) ! ! Input array
982
+ real (r16), allocatable :: filter(:)
1014
983
integer :: i
1015
- allocate (f_x(size (x)))
1016
- do concurrent(i = 1 :size (x))
1017
- f_x(i) = f(x(i))
1018
- enddo
1019
- filter = pack (x, f_x)
984
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
1020
985
end function filter_r16
1021
986
1022
987
@@ -1025,15 +990,10 @@ pure function filter_c4(f, x) result(filter)
1025
990
! ! This specific procedure is for 4-byte reals.
1026
991
! ! Overloaded by generic procedure `filter`.
1027
992
procedure (f_c4_logical) :: f ! ! Filtering function
1028
- complex (r4 ), dimension (:), intent (in ) :: x ! ! Input array
1029
- complex (r4 ), dimension (:), allocatable :: filter
1030
- logical , dimension (:), allocatable :: f_x
993
+ complex (r4 ), intent (in ) :: x(:) ! ! Input array
994
+ complex (r4 ), allocatable :: filter(:)
1031
995
integer :: i
1032
- allocate (f_x(size (x)))
1033
- do concurrent(i = 1 :size (x))
1034
- f_x(i) = f(x(i))
1035
- enddo
1036
- filter = pack (x, f_x)
996
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
1037
997
end function filter_c4
1038
998
1039
999
@@ -1042,15 +1002,10 @@ pure function filter_c8(f, x) result(filter)
1042
1002
! ! This specific procedure is for 8-byte complex reals.
1043
1003
! ! Overloaded by generic procedure `filter`.
1044
1004
procedure (f_c8_logical) :: f ! ! Filtering function
1045
- complex (r8 ), dimension (:), intent (in ) :: x ! ! Input array
1046
- complex (r8 ), dimension (:), allocatable :: filter
1047
- logical , dimension (:), allocatable :: f_x
1005
+ complex (r8 ), intent (in ) :: x(:) ! ! Input array
1006
+ complex (r8 ), allocatable :: filter(:)
1048
1007
integer :: i
1049
- allocate (f_x(size (x)))
1050
- do concurrent(i = 1 :size (x))
1051
- f_x(i) = f(x(i))
1052
- enddo
1053
- filter = pack (x, f_x)
1008
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
1054
1009
end function filter_c8
1055
1010
1056
1011
@@ -1059,15 +1014,10 @@ pure function filter_c16(f, x) result(filter)
1059
1014
! ! This specific procedure is for 16-byte complex reals.
1060
1015
! ! Overloaded by generic procedure `filter`.
1061
1016
procedure (f_c16_logical) :: f ! ! Filtering function
1062
- complex (r16), dimension (:), intent (in ) :: x ! ! Input array
1063
- complex (r16), dimension (:), allocatable :: filter
1064
- logical , dimension (:), allocatable :: f_x
1017
+ complex (r16), intent (in ) :: x(:) ! ! Input array
1018
+ complex (r16), allocatable :: filter(:)
1065
1019
integer :: i
1066
- allocate (f_x(size (x)))
1067
- do concurrent(i = 1 :size (x))
1068
- f_x(i) = f(x(i))
1069
- enddo
1070
- filter = pack (x, f_x)
1020
+ filter = pack (x, [(f(x(i)), i = 1 , size (x))])
1071
1021
end function filter_c16
1072
1022
1073
1023
0 commit comments