12#include "../base/base_uses.f90"
31 LOGICAL,
PRIVATE,
PARAMETER :: debug_this_module = .true.
170 INTERFACE cp_insert_at
238 integer :: first_el = 0
264 REAL(kind=
dp) :: first_el = 0.0_dp
290 logical :: first_el = .false.
316 character(len=default_string_length) :: first_el =
""
413 integer,
intent(in),
OPTIONAL :: first_el
416 IF (.NOT.
PRESENT(first_el))
THEN
418 IF (
PRESENT(rest)) sll => rest
421 sll%first_el =first_el
423 IF (
PRESENT(rest)) sll%rest => rest
437 REAL(kind=
dp),
intent(in),
OPTIONAL :: first_el
440 IF (.NOT.
PRESENT(first_el))
THEN
442 IF (
PRESENT(rest)) sll => rest
445 sll%first_el =first_el
447 IF (
PRESENT(rest)) sll%rest => rest
461 logical,
intent(in),
OPTIONAL :: first_el
464 IF (.NOT.
PRESENT(first_el))
THEN
466 IF (
PRESENT(rest)) sll => rest
469 sll%first_el =first_el
471 IF (
PRESENT(rest)) sll%rest => rest
485 character(len=default_string_length),
intent(in),
OPTIONAL :: first_el
488 IF (.NOT.
PRESENT(first_el))
THEN
490 IF (
PRESENT(rest)) sll => rest
493 sll%first_el =first_el
495 IF (
PRESENT(rest)) sll%rest => rest
509 type(
val_type),
pointer,
intent(in),
OPTIONAL :: first_el
512 IF (.NOT.
PRESENT(first_el))
THEN
514 IF (
PRESENT(rest)) sll => rest
517 sll%first_el =>first_el
519 IF (
PRESENT(rest)) sll%rest => rest
613 SUBROUTINE cp_sll_int_dealloc_node(sll)
617 END SUBROUTINE cp_sll_int_dealloc_node
625 SUBROUTINE cp_sll_real_dealloc_node(sll)
629 END SUBROUTINE cp_sll_real_dealloc_node
637 SUBROUTINE cp_sll_logical_dealloc_node(sll)
641 END SUBROUTINE cp_sll_logical_dealloc_node
649 SUBROUTINE cp_sll_char_dealloc_node(sll)
653 END SUBROUTINE cp_sll_char_dealloc_node
661 SUBROUTINE cp_sll_val_dealloc_node(sll)
665 END SUBROUTINE cp_sll_val_dealloc_node
721 character(len=default_string_length) :: res
754 INTEGER,
OPTIONAL :: iter
760 IF (.NOT.
ASSOCIATED(sll))
THEN
763 IF (
PRESENT(iter))
THEN
766 IF (
ASSOCIATED(res%rest))
THEN
769 cpabort(
"tried to go past end")
774 IF (.NOT.
ASSOCIATED(res%rest))
EXIT
797 INTEGER,
OPTIONAL :: iter
803 IF (.NOT.
ASSOCIATED(sll))
THEN
806 IF (
PRESENT(iter))
THEN
809 IF (
ASSOCIATED(res%rest))
THEN
812 cpabort(
"tried to go past end")
817 IF (.NOT.
ASSOCIATED(res%rest))
EXIT
840 INTEGER,
OPTIONAL :: iter
846 IF (.NOT.
ASSOCIATED(sll))
THEN
849 IF (
PRESENT(iter))
THEN
852 IF (
ASSOCIATED(res%rest))
THEN
855 cpabort(
"tried to go past end")
860 IF (.NOT.
ASSOCIATED(res%rest))
EXIT
883 INTEGER,
OPTIONAL :: iter
889 IF (.NOT.
ASSOCIATED(sll))
THEN
892 IF (
PRESENT(iter))
THEN
895 IF (
ASSOCIATED(res%rest))
THEN
898 cpabort(
"tried to go past end")
903 IF (.NOT.
ASSOCIATED(res%rest))
EXIT
926 INTEGER,
OPTIONAL :: iter
932 IF (.NOT.
ASSOCIATED(sll))
THEN
935 IF (
PRESENT(iter))
THEN
938 IF (
ASSOCIATED(res%rest))
THEN
941 cpabort(
"tried to go past end")
946 IF (.NOT.
ASSOCIATED(res%rest))
EXIT
975 IF (
ASSOCIATED(iterator))
THEN
977 iterator => iterator%rest
1002 IF (
ASSOCIATED(iterator))
THEN
1004 iterator => iterator%rest
1029 IF (
ASSOCIATED(iterator))
THEN
1031 iterator => iterator%rest
1056 IF (
ASSOCIATED(iterator))
THEN
1058 iterator => iterator%rest
1083 IF (
ASSOCIATED(iterator))
THEN
1085 iterator => iterator%rest
1106 INTEGER,
INTENT(in) :: index
1110 IF (index == -1)
THEN
1115 cpassert(
ASSOCIATED(pos))
1131 REAL(kind=
dp) :: res
1133 INTEGER,
INTENT(in) :: index
1137 IF (index == -1)
THEN
1142 cpassert(
ASSOCIATED(pos))
1160 INTEGER,
INTENT(in) :: index
1164 IF (index == -1)
THEN
1169 cpassert(
ASSOCIATED(pos))
1185 character(len=default_string_length) :: res
1187 INTEGER,
INTENT(in) :: index
1191 IF (index == -1)
THEN
1196 cpassert(
ASSOCIATED(pos))
1214 INTEGER,
INTENT(in) :: index
1218 IF (index == -1)
THEN
1223 cpassert(
ASSOCIATED(pos))
1241 integer,
intent(in) :: value
1243 INTEGER,
INTENT(in) :: index
1247 IF (index == -1)
THEN
1252 cpassert(
ASSOCIATED(pos))
1269 REAL(kind=
dp),
intent(in) ::
value
1271 INTEGER,
INTENT(in) :: index
1275 IF (index == -1)
THEN
1280 cpassert(
ASSOCIATED(pos))
1297 logical,
intent(in) :: value
1299 INTEGER,
INTENT(in) :: index
1303 IF (index == -1)
THEN
1308 cpassert(
ASSOCIATED(pos))
1325 character(len=default_string_length),
intent(in) :: value
1327 INTEGER,
INTENT(in) :: index
1331 IF (index == -1)
THEN
1336 cpassert(
ASSOCIATED(pos))
1353 type(
val_type),
pointer,
intent(in) :: value
1355 INTEGER,
INTENT(in) :: index
1359 IF (index == -1)
THEN
1364 cpassert(
ASSOCIATED(pos))
1366 pos%first_el =>
value
1383 integer,
intent(out),
OPTIONAL :: el_att
1386 IF (
ASSOCIATED(iterator))
THEN
1388 if (
present(el_att)) el_att =iterator%first_el
1389 iterator => iterator%rest
1406 REAL(kind=
dp),
intent(out),
OPTIONAL :: el_att
1409 IF (
ASSOCIATED(iterator))
THEN
1411 if (
present(el_att)) el_att =iterator%first_el
1412 iterator => iterator%rest
1429 logical,
intent(out),
OPTIONAL :: el_att
1432 IF (
ASSOCIATED(iterator))
THEN
1434 if (
present(el_att)) el_att =iterator%first_el
1435 iterator => iterator%rest
1452 character(len=default_string_length),
intent(out),
OPTIONAL :: el_att
1455 IF (
ASSOCIATED(iterator))
THEN
1457 if (
present(el_att)) el_att =iterator%first_el
1458 iterator => iterator%rest
1475 type(
val_type),
pointer,
intent(out),
OPTIONAL :: el_att
1478 IF (
ASSOCIATED(iterator))
THEN
1480 if (
present(el_att)) el_att =>iterator%first_el
1481 iterator => iterator%rest
1502 integer,
intent(in):: el
1525 REAL(kind=
dp),
intent(in):: el
1548 logical,
intent(in):: el
1571 character(len=default_string_length),
intent(in):: el
1594 type(
val_type),
pointer,
intent(in):: el
1620 IF (
ASSOCIATED(sll))
THEN
1622 CALL cp_sll_int_dealloc_node(node_to_rm)
1624 cpabort(
"tried to remove first el of an empty list")
1642 IF (
ASSOCIATED(sll))
THEN
1644 CALL cp_sll_real_dealloc_node(node_to_rm)
1646 cpabort(
"tried to remove first el of an empty list")
1664 IF (
ASSOCIATED(sll))
THEN
1666 CALL cp_sll_logical_dealloc_node(node_to_rm)
1668 cpabort(
"tried to remove first el of an empty list")
1686 IF (
ASSOCIATED(sll))
THEN
1688 CALL cp_sll_char_dealloc_node(node_to_rm)
1690 cpabort(
"tried to remove first el of an empty list")
1708 IF (
ASSOCIATED(sll))
THEN
1710 CALL cp_sll_val_dealloc_node(node_to_rm)
1712 cpabort(
"tried to remove first el of an empty list")
1729 integer,
intent(in) :: el
1730 INTEGER,
INTENT(in) :: index
1735 IF (index == 1)
THEN
1738 IF (index == -1)
THEN
1743 cpassert(
ASSOCIATED(pos))
1760 REAL(kind=
dp),
intent(in) :: el
1761 INTEGER,
INTENT(in) :: index
1766 IF (index == 1)
THEN
1769 IF (index == -1)
THEN
1774 cpassert(
ASSOCIATED(pos))
1791 logical,
intent(in) :: el
1792 INTEGER,
INTENT(in) :: index
1797 IF (index == 1)
THEN
1800 IF (index == -1)
THEN
1805 cpassert(
ASSOCIATED(pos))
1822 character(len=default_string_length),
intent(in) :: el
1823 INTEGER,
INTENT(in) :: index
1828 IF (index == 1)
THEN
1831 IF (index == -1)
THEN
1836 cpassert(
ASSOCIATED(pos))
1853 type(
val_type),
pointer,
intent(in) :: el
1854 INTEGER,
INTENT(in) :: index
1859 IF (index == 1)
THEN
1862 IF (index == -1)
THEN
1867 cpassert(
ASSOCIATED(pos))
1884 INTEGER,
INTENT(in)::index
1888 IF (index == 1)
THEN
1891 IF (index == -1)
THEN
1896 cpassert(
ASSOCIATED(pos))
1912 INTEGER,
INTENT(in)::index
1916 IF (index == 1)
THEN
1919 IF (index == -1)
THEN
1924 cpassert(
ASSOCIATED(pos))
1940 INTEGER,
INTENT(in)::index
1944 IF (index == 1)
THEN
1947 IF (index == -1)
THEN
1952 cpassert(
ASSOCIATED(pos))
1968 INTEGER,
INTENT(in)::index
1972 IF (index == 1)
THEN
1975 IF (index == -1)
THEN
1980 cpassert(
ASSOCIATED(pos))
1996 INTEGER,
INTENT(in)::index
2000 IF (index == 1)
THEN
2003 IF (index == -1)
THEN
2008 cpassert(
ASSOCIATED(pos))
2029 IF (.NOT.
ASSOCIATED(actual_node))
EXIT
2030 next_node => actual_node%rest
2031 CALL cp_sll_int_dealloc_node(actual_node)
2032 actual_node => next_node
2052 IF (.NOT.
ASSOCIATED(actual_node))
EXIT
2053 next_node => actual_node%rest
2054 CALL cp_sll_real_dealloc_node(actual_node)
2055 actual_node => next_node
2075 IF (.NOT.
ASSOCIATED(actual_node))
EXIT
2076 next_node => actual_node%rest
2077 CALL cp_sll_logical_dealloc_node(actual_node)
2078 actual_node => next_node
2098 IF (.NOT.
ASSOCIATED(actual_node))
EXIT
2099 next_node => actual_node%rest
2100 CALL cp_sll_char_dealloc_node(actual_node)
2101 actual_node => next_node
2121 IF (.NOT.
ASSOCIATED(actual_node))
EXIT
2122 next_node => actual_node%rest
2123 CALL cp_sll_val_dealloc_node(actual_node)
2124 actual_node => next_node
2140 integer,
DIMENSION(:),
POINTER :: res
2150 res(i) =iter%first_el
2152 cpassert(ok .OR. i == len)
2166 REAL(kind=
dp),
DIMENSION(:),
POINTER :: res
2176 res(i) =iter%first_el
2178 cpassert(ok .OR. i == len)
2192 logical,
DIMENSION(:),
POINTER :: res
2202 res(i) =iter%first_el
2204 cpassert(ok .OR. i == len)
2218 character(len=default_string_length),
DIMENSION(:),
POINTER :: res
2228 res(i) =iter%first_el
2230 cpassert(ok .OR. i == len)
2244 type(
val_p_type),
DIMENSION(:),
POINTER :: res
2254 res(i) %val=>iter%first_el
2256 cpassert(ok .OR. i == len)
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
An array-based list which grows on demand. When the internal array is full, a new array of twice the ...