85 INTERFACE OPERATOR (/)
106 #define TYPE_DICT_KEY CHARACTER(LEN=MAX_CHAR_LEN) 107 #define TYPE_DICT_INT INTEGER 108 #define TYPE_DICT_REAL REAL 109 #define TYPE_DICT_CHAR CHARACTER(LEN=MAX_CHAR_LEN) 110 #define TYPE_DICT_BOOL LOGICAL 111 #define TYPE_DICT_REAL_ONED REAL, DIMENSION(:) 112 #define TYPE_DICT_REAL_TWOD REAL, DIMENSION(:,:), POINTER 113 #define TYPE_DICT_REAL_THREED REAL, DIMENSION(:,:,:), POINTER 114 #define TYPE_DICT_REAL_FOURD REAL, DIMENSION(:,:,:,:), POINTER 115 #define TYPE_DICT_REAL_FIVED REAL, DIMENSION(:,:,:,:,:), POINTER 116 #define TYPE_DICT_INT_ONED INTEGER, DIMENSION(:) 117 #define TYPE_DICT_REAL_P REAL, POINTER 118 #define TYPE_DICT_INT_P INTEGER, POINTER 120 #define TYPE_DICT_MOLD CHARACTER(LEN=1), DIMENSION(:) 122 type_dict_mold,
ALLOCATABLE :: mold
125 CHARACTER(LEN=MAX_CHAR_LEN) :: key =
"" 127 type_dict_mold,
POINTER ::
value => null()
132 type_dict_real_p :: p
138 type_dict_real_twod :: p
141 type_dict_real_threed :: p
144 type_dict_real_fourd :: p
147 type_dict_real_fived :: p
186 IF (.NOT.
ALLOCATED(mold))
ALLOCATE(mold(1))
193 IF (
ALLOCATED(mold))
DEALLOCATE(mold)
201 FUNCTION findpath(root, key, create)
RESULT(res)
205 CHARACTER(LEN=*) :: key
206 LOGICAL,
OPTIONAL :: create
209 TYPE(
dict_typ),
POINTER :: parent,node
211 type_dict_char :: k, key_
213 INTENT(IN) :: key, create
216 IF(
PRESENT(create)) &
222 DO WHILE(len_trim(k).GT.0)
224 IF(
ASSOCIATED(node))
THEN 231 IF(
ASSOCIATED(parent))
THEN 232 IF(
ASSOCIATED(parent%child))
THEN 233 parent =>
getlast(parent%child)
239 IF(
ASSOCIATED(root))
THEN 257 IF(c.EQV..true..AND..NOT.
ASSOCIATED(res)) &
258 CALL this%Error(
"FindPath",
"Create was activated, so res should be associated.")
263 RECURSIVE SUBROUTINE setattr0a(root, key, value)
267 CHARACTER(LEN=*) :: key
270 TYPE(
dict_typ),
POINTER :: node, parent
276 DO WHILE(
ASSOCIATED(node))
277 WRITE(k,
'(A,A,A)') trim(key),
'/',trim(node%key)
280 IF(
ASSOCIATED(node%child))
THEN 281 CALL setattr0a(root, trim(k), node%child)
283 CALL setattr0b(root, trim(k), node%value, node%type)
292 SUBROUTINE setattr0b(root, key, value, type)
295 TYPE(Dict_TYP),
POINTER :: root
296 CHARACTER(LEN=*) :: key
298 type_dict_mold ::
value 300 TYPE(Dict_TYP),
POINTER :: node
302 INTENT(IN) :: key,
type, value
315 TYPE(Dict_TYP),
POINTER :: root, parent, child
316 CHARACTER(LEN=*) :: key
318 type_dict_char :: k, key_
325 DO WHILE(
ASSOCIATED(child).AND.len_trim(key_).GT.0)
328 IF(
ASSOCIATED(parent)) &
329 child => parent%child
331 IF(len_trim(key_).GT.0) &
339 SUBROUTINE getattr0b(root, key, type, value, default)
342 TYPE(Dict_TYP),
POINTER :: root
343 CHARACTER(LEN=*) :: key
345 type_dict_mold,
POINTER ::
value 346 type_dict_mold,
OPTIONAL :: default
348 TYPE(Dict_TYP),
POINTER :: node
349 CHARACTER(LEN=10) :: b1,b2
351 INTENT(IN) :: key,
type, default
354 IF(.NOT.
ASSOCIATED(node))
THEN 355 IF(
PRESENT(default))
THEN 358 IF(.NOT.
ASSOCIATED(node)) &
359 CALL this%Error(
"GetAttr",
"Setting a default value has gone wrong.")
361 CALL this%Error(
"GetAttr",
"Couldn't find key '"//trim(key)//
"'.")
364 IF(type.NE.node%type)
THEN 365 WRITE(b1,
"(I4.4)") node%type
366 WRITE(b2,
"(I4.4)")
type 367 CALL this%Error(
"GetAttr",
"Key '"//trim(key)//
"' is of type "//trim(b1) &
368 //
", but type "//trim(b2)//
" requested.")
378 CHARACTER(LEN=*),
INTENT(IN) :: key
382 DO WHILE(
ASSOCIATED(res))
383 IF(trim(res%key).EQ.trim(key))
EXIT 389 FUNCTION getnext(root)
RESULT(res)
392 TYPE(
dict_typ),
POINTER :: root, res
398 FUNCTION getlast(root)
RESULT(res)
401 TYPE(
dict_typ),
POINTER :: root, res
404 IF(
ASSOCIATED(res))
THEN 405 DO WHILE(
ASSOCIATED(res%next))
415 TYPE(
dict_typ),
POINTER :: root, res
421 FUNCTION getkey(root)
RESULT(res)
425 type_dict_char :: res
439 IF(
ASSOCIATED(root%value))
THEN 440 res =
SIZE(root%value)
457 FUNCTION getdata(root)
RESULT(res)
461 type_dict_mold,
POINTER :: res
473 res =
ASSOCIATED(root%child)
477 FUNCTION hasdata(root)
RESULT(res)
483 res =
ASSOCIATED(root%value)
487 FUNCTION haskey(root, key)
RESULT(res)
491 CHARACTER(LEN=*) :: key
494 res =
ASSOCIATED(
findpath(root,trim(key)))
502 type_dict_mold :: val
507 CALL this%Error(
"SetData",
"Array size smaller 0 is not possible.")
508 IF(
ASSOCIATED(node%value)) &
509 DEALLOCATE(node%value)
510 ALLOCATE(node%value(
SIZE(val)))
517 FUNCTION tokenize(key,back)
RESULT(res)
520 CHARACTER(LEN=MAX_CHAR_LEN) :: key
521 LOGICAL,
OPTIONAL :: back
522 type_dict_char :: res
530 IF(
PRESENT(back))
THEN 536 IF(key(1:1).EQ.
'/') key = key(2:)
537 i = scan(key,
'/',back_)
557 FUNCTION dict(n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12,n13,n14,n15,n16,n17,&
558 n18,n19,n20)
RESULT(res)
562 TYPE(
dict_typ),
POINTER,
OPTIONAL :: n2,n3,n4,n5,n6,n7,n8,n9,n10,n11, &
563 n12,n13,n14,n15,n16,n17,n18,n19,n20
567 IF(
PRESENT( n2))
CALL setattr0a(res,
'', n2)
568 IF(
PRESENT( n3))
CALL setattr0a(res,
'', n3)
569 IF(
PRESENT( n4))
CALL setattr0a(res,
'', n4)
570 IF(
PRESENT( n5))
CALL setattr0a(res,
'', n5)
571 IF(
PRESENT( n6))
CALL setattr0a(res,
'', n6)
572 IF(
PRESENT( n7))
CALL setattr0a(res,
'', n7)
573 IF(
PRESENT( n8))
CALL setattr0a(res,
'', n8)
574 IF(
PRESENT( n9))
CALL setattr0a(res,
'', n9)
575 IF(
PRESENT(n10))
CALL setattr0a(res,
'',n10)
576 IF(
PRESENT(n11))
CALL setattr0a(res,
'',n11)
577 IF(
PRESENT(n12))
CALL setattr0a(res,
'',n12)
578 IF(
PRESENT(n13))
CALL setattr0a(res,
'',n13)
579 IF(
PRESENT(n14))
CALL setattr0a(res,
'',n14)
580 IF(
PRESENT(n15))
CALL setattr0a(res,
'',n15)
581 IF(
PRESENT(n16))
CALL setattr0a(res,
'',n16)
582 IF(
PRESENT(n17))
CALL setattr0a(res,
'',n17)
583 IF(
PRESENT(n18))
CALL setattr0a(res,
'',n18)
584 IF(
PRESENT(n19))
CALL setattr0a(res,
'',n19)
585 IF(
PRESENT(n20))
CALL setattr0a(res,
'',n20)
591 TYPE(Dict_TYP),
POINTER :: root
592 CHARACTER(LEN=*) :: key
595 INTENT(IN) :: key, val
603 TYPE(Dict_TYP),
POINTER :: root
604 CHARACTER(LEN=*) :: key
605 type_dict_real :: val
607 INTENT(IN) :: key, val
615 TYPE(Dict_TYP),
POINTER :: root
616 CHARACTER(LEN=*) :: key, val
617 type_dict_char :: val_
619 INTENT(IN) :: key, val
628 TYPE(Dict_TYP),
POINTER :: root
629 CHARACTER(LEN=*) :: key
630 type_dict_bool :: val
632 INTENT(IN) :: key, val
640 TYPE(Dict_TYP),
POINTER :: root
641 CHARACTER(LEN=*) :: key
642 type_dict_real_oned :: val
644 INTENT(IN) :: key, val
652 TYPE(Dict_TYP),
POINTER :: root
653 CHARACTER(LEN=*) :: key
654 REAL,
DIMENSION(:,:),
TARGET :: val
655 TYPE(real_twod_t) :: c
657 INTENT(IN) :: key,val
666 TYPE(Dict_TYP),
POINTER :: root
667 CHARACTER(LEN=*) :: key
668 REAL,
DIMENSION(:,:,:),
TARGET :: val
669 TYPE(real_threed_t) :: c
671 INTENT(IN) :: key, val
680 TYPE(Dict_TYP),
POINTER :: root
681 CHARACTER(LEN=*) :: key
682 REAL,
DIMENSION(:,:,:,:),
TARGET :: val
683 TYPE(real_fourd_t) :: c
685 INTENT(IN) :: key, val
694 TYPE(Dict_TYP),
POINTER :: root
695 CHARACTER(LEN=*) :: key
696 type_dict_int_oned :: val
698 INTENT(IN) :: key, val
706 TYPE(Dict_TYP),
POINTER :: root
707 CHARACTER(LEN=*) :: key
710 INTENT(IN) :: key, val
718 TYPE(Dict_TYP),
POINTER :: root
719 CHARACTER(LEN=*) :: key
722 INTENT(IN) :: key, val
730 TYPE(Dict_TYP),
POINTER :: root
731 CHARACTER(LEN=*) :: key
732 REAL,
DIMENSION(:,:,:,:,:),
TARGET :: val
733 TYPE(real_fived_t) :: c
735 INTENT(IN) :: key, val
741 RECURSIVE SUBROUTINE printdict(root, prefix)
745 CHARACTER(LEN=*),
OPTIONAL ::
prefix 748 type_dict_char :: prefix_
749 type_dict_char :: s,str
755 DO WHILE(
ASSOCIATED(node))
756 WRITE(s,
'(A,A,A)') trim(prefix_),
'/',trim(node%key)
757 IF(
ASSOCIATED(node%value))
THEN 758 WRITE(str,
'(A,I2,A,A,A,I4)')
"type=",node%type,
", key=",trim(s),&
759 ", size=",
SIZE(node%value)
761 WRITE(str,
'(A,I2,A,A)')
"type=",node%type,
", key=",trim(s)
764 IF(
ASSOCIATED(node%child)) &
771 RECURSIVE SUBROUTINE copydict(root, outdir)
774 TYPE(
dict_typ),
POINTER :: root, outdir, dir, odir, tmp
779 DO WHILE(
ASSOCIATED(dir))
780 IF(
ASSOCIATED(odir))
THEN 789 IF(
ASSOCIATED(dir%value))
THEN 793 IF(
ASSOCIATED(dir%child))
THEN 806 TYPE(
dict_typ),
POINTER :: root, outdir, dir, odir
811 DO WHILE(
ASSOCIATED(dir))
812 IF(
ASSOCIATED(dir%child))
THEN 813 IF(
ASSOCIATED(odir))
THEN 832 TYPE(Dict_TYP),
POINTER :: root, res
833 CHARACTER(LEN=*) :: key
838 IF(
ASSOCIATED(res))
THEN 845 SUBROUTINE getattr1(root, key, res, default)
848 TYPE(Dict_TYP),
POINTER :: root
850 type_dict_int,
OPTIONAL :: default
851 CHARACTER(LEN=*) :: key
853 type_dict_mold,
POINTER ::
value 855 INTENT(IN) :: key, default
858 IF(
PRESENT(default))
THEN 863 res = transfer(
value,res)
866 SUBROUTINE getattr2(root, key, res, default)
869 TYPE(Dict_TYP),
POINTER :: root
870 type_dict_real :: res
871 type_dict_real,
OPTIONAL :: default
872 CHARACTER(LEN=*) :: key
874 type_dict_mold,
POINTER ::
value 876 INTENT(IN) :: key, default
879 IF(
PRESENT(default))
THEN 884 res = transfer(
value,res)
887 SUBROUTINE getattr3(root, key, res, default)
890 TYPE(Dict_TYP),
POINTER :: root
891 type_dict_char :: res
892 type_dict_char,
OPTIONAL :: default
893 CHARACTER(LEN=*) :: key
895 type_dict_mold,
POINTER ::
value 900 IF(
PRESENT(default))
THEN 905 res = transfer(
value,res)
908 SUBROUTINE getattr4(root, key, res, default)
911 TYPE(Dict_TYP),
POINTER :: root
912 type_dict_bool :: res
913 type_dict_bool,
OPTIONAL :: default
914 CHARACTER(LEN=*) :: key
916 type_dict_mold,
POINTER ::
value 921 IF(
PRESENT(default))
THEN 926 res = transfer(
value,res)
929 SUBROUTINE getattr5(root, key, res, default)
932 TYPE(Dict_TYP),
POINTER :: root
933 type_dict_real_oned :: res
934 type_dict_real_oned,
OPTIONAL :: default
935 CHARACTER(LEN=*) :: key
937 type_dict_mold,
POINTER ::
value 942 IF(
PRESENT(default))
THEN 947 IF(
SIZE(transfer(
value,res)).NE.
SIZE(res)) &
948 CALL this%Error(
"GetAttr5",
"1D array with key '" // trim(key) &
949 //
"' has the wrong size.")
951 res = transfer(
value,res)
954 SUBROUTINE getattr6(root, key, res, default)
957 TYPE(Dict_TYP),
POINTER :: root
958 type_dict_real_twod :: res
959 type_dict_real_twod,
OPTIONAL :: default
960 CHARACTER(LEN=*) :: key
962 type_dict_mold,
POINTER ::
value 963 TYPE(real_twod_t) :: c
967 IF(
PRESENT(default))
THEN 973 c = transfer(
value,c)
977 SUBROUTINE getattr7(root, key, res, default)
980 TYPE(Dict_TYP),
POINTER :: root
981 type_dict_real_threed :: res
982 type_dict_real_threed,
OPTIONAL :: default
983 CHARACTER(LEN=*) :: key
985 type_dict_mold,
POINTER ::
value 986 TYPE(real_threed_t) :: c
990 IF(
PRESENT(default))
THEN 996 c = transfer(
value,c)
1000 SUBROUTINE getattr8(root, key, res, default)
1003 TYPE(Dict_TYP),
POINTER :: root
1004 type_dict_real_fourd :: res
1005 type_dict_real_fourd,
OPTIONAL :: default
1006 CHARACTER(LEN=*) :: key
1008 type_dict_mold,
POINTER ::
value 1009 TYPE(real_fourd_t) :: c
1013 IF(
PRESENT(default))
THEN 1019 c = transfer(
value,c)
1023 SUBROUTINE getattr9(root, key, res, default)
1026 TYPE(Dict_TYP),
POINTER :: root
1027 type_dict_int_oned :: res
1028 type_dict_int_oned,
OPTIONAL :: default
1029 CHARACTER(LEN=*) :: key
1031 type_dict_mold,
POINTER ::
value 1034 INTENT(INOUT) :: res
1036 IF(
PRESENT(default))
THEN 1041 res = transfer(
value,res)
1044 SUBROUTINE getattr10(root, key, res, default)
1047 TYPE(Dict_TYP),
POINTER :: root
1049 TYPE(real_t),
OPTIONAL :: default
1050 CHARACTER(LEN=*) :: key
1052 type_dict_mold,
POINTER ::
value 1056 IF(
PRESENT(default))
THEN 1061 res = transfer(
value,res)
1064 SUBROUTINE getattr11(root, key, res, default)
1067 TYPE(Dict_TYP),
POINTER :: root
1069 TYPE(int_t),
OPTIONAL :: default
1070 CHARACTER(LEN=*) :: key
1072 type_dict_mold,
POINTER ::
value 1076 IF(
PRESENT(default))
THEN 1081 res = transfer(
value,res)
1084 SUBROUTINE getattr12(root, key, res, default)
1087 TYPE(Dict_TYP),
POINTER :: root
1088 type_dict_real_fived :: res
1089 type_dict_real_fived,
OPTIONAL :: default
1090 CHARACTER(LEN=*) :: key
1092 type_dict_mold,
POINTER ::
value 1093 TYPE(real_fived_t) :: c
1097 IF(
PRESENT(default))
THEN 1103 c = transfer(
value,c)
1110 TYPE(Dict_TYP),
POINTER :: node
1111 CHARACTER(LEN=*) :: k
1112 LOGICAL,
SAVE :: first=.true.
1115 CHARACTER(LEN=512) :: str
1117 NULLIFY(node%child,node%next)
1118 IF(
ASSOCIATED(node%value)) &
1119 DEALLOCATE(node%value)
1120 DEALLOCATE(node,stat=status)
1121 IF(status.NE.0.AND.first)
THEN 1127 WRITE(str,
'(A,A,A,I3)')&
1128 "Deallocating key '",trim(k),&
1129 "' throws the error nio.: ",status
1131 WRITE(str,
'(A,A,A,I3)')&
1132 "More invocations of this error will be suppressed." 1142 TYPE(
dict_typ),
POINTER :: root, node, next, child
1147 DO WHILE(
ASSOCIATED(node))
1152 IF (
ASSOCIATED(child)) &
1159 FUNCTION assign0(key, val)
RESULT(res)
1163 CHARACTER(LEN=*) :: key
1166 INTENT(IN) :: key,val
1169 CALL setattr(res, key, val)
1172 FUNCTION assign1(key, val)
RESULT(res)
1176 CHARACTER(LEN=*) :: key
1177 type_dict_int :: val
1179 INTENT(IN) :: key, val
1182 CALL setattr(res, key, val)
1185 FUNCTION assign2(key, val)
RESULT(res)
1189 CHARACTER(LEN=*) :: key
1190 type_dict_real :: val
1192 INTENT(IN) :: key, val
1195 CALL setattr(res, key, val)
1198 FUNCTION assign3(key, val)
RESULT(res)
1202 CHARACTER(LEN=*) :: key, val
1204 INTENT(IN) :: key, val
1207 CALL setattr(res, key, val)
1210 FUNCTION assign4(key, val)
RESULT(res)
1214 CHARACTER(LEN=*) :: key
1215 type_dict_bool :: val
1217 INTENT(IN) :: key, val
1220 CALL setattr(res, key, val)
1223 FUNCTION assign5(key, val)
RESULT(res)
1227 CHARACTER(LEN=*) :: key
1228 type_dict_real_oned :: val
1230 INTENT(IN) :: key, val
1233 CALL setattr(res, key, val)
1236 FUNCTION assign6(key, val)
RESULT(res)
1240 CHARACTER(LEN=*) :: key
1241 REAL,
DIMENSION(:,:),
TARGET :: val
1243 INTENT(IN) :: key, val
1246 CALL setattr(res, key, val)
1249 FUNCTION assign7(key, val)
RESULT(res)
1253 CHARACTER(LEN=*) :: key
1254 REAL,
DIMENSION(:,:,:),
TARGET :: val
1256 INTENT(IN) :: key, val
1259 CALL setattr(res, key, val)
1262 FUNCTION assign8(key, val)
RESULT(res)
1266 CHARACTER(LEN=*) :: key
1267 REAL,
DIMENSION(:,:,:,:),
TARGET :: val
1269 INTENT(IN) :: key, val
1272 CALL setattr(res, key, val)
1275 FUNCTION assign9(key, val)
RESULT(res)
1279 CHARACTER(LEN=*) :: key
1280 type_dict_int_oned :: val
1282 INTENT(IN) :: key, val
1285 CALL setattr(res, key, val)
1288 FUNCTION assign10(key, val)
RESULT(res)
1292 CHARACTER(LEN=*) :: key
1295 INTENT(IN) :: key, val
1298 CALL setattr(res, key, val)
1301 FUNCTION assign11(key, val)
RESULT(res)
1305 CHARACTER(LEN=*) :: key
1308 INTENT(IN) :: key, val
1311 CALL setattr(res, key, val)
1314 FUNCTION assign12(key, val)
RESULT(res)
1318 CHARACTER(LEN=*) :: key
1319 REAL,
DIMENSION(:,:,:,:,:),
TARGET :: val
1321 INTENT(IN) :: key, val
1324 CALL setattr(res, key, val)
1327 FUNCTION ref1(p)
RESULT(res)
1330 type_dict_real_p :: p
1336 FUNCTION ref2(p)
RESULT(res)
1339 type_dict_int_p :: p
type(dict_typ) function, pointer, public dict(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15, n16, n17, n18, n19, n20)
Construct a new dictionary from several key/value pairs. Together with the Assign subroutine and over...
type(dict_typ) function, pointer assign8(key, val)
recursive subroutine, public copydict(root, outdir)
Copy complete Dictionary.
type(int_t) function ref2(p)
subroutine getattr12(root, key, res, default)
type(logging_base), save this
type(dict_typ) function, pointer assign10(key, val)
type(dict_typ) function, pointer assign2(key, val)
type(real_t) function ref1(p)
recursive subroutine, public copyhierarchy(root, outdir)
Copy all nodes, which have children from 'root' to 'outdir'.
type(dict_typ) function, pointer, public getchild(root)
Get the pointer to a direct child of the pointer 'root'.
integer function, public getdatatype(root)
Return the datatype of node 'root'.
subroutine getattr9(root, key, res, default)
integer, parameter, public dict_real_oned
type(dict_typ) function, pointer assign3(key, val)
integer, parameter, public dict_none
subroutine getattr5(root, key, res, default)
integer, parameter, public dict_real_fourd
subroutine setattr8(root, key, val)
subroutine setattr5(root, key, val)
subroutine getattr10(root, key, res, default)
logical function, public haschild(root)
Check if the node 'root' has one or more children.
subroutine getattr4(root, key, res, default)
integer, parameter, public dict_real_p
subroutine, public setdata(node, val)
Set data of 'node' ot 'val'.
subroutine getattr6(root, key, res, default)
integer, parameter, public dict_char
function, public getkey(root)
Get the key of pointer 'root'.
subroutine getattr3(root, key, res, default)
subroutine getattr11(root, key, res, default)
function tokenize(key, back)
Cuts a path into two tokens, which is explained best with an example: back=.FALSE.: key = /sources/grav/mass => res = sources, key = /grav/mass back=.TRUE.: key = /sources/grav/mass => res = mass, key = /sources/grav.
type(dict_typ) function, pointer findchild(root, key)
Find the direct child with key 'key' in a list of childs. 'root' points to the first child...
recursive subroutine, public printdict(root, prefix)
subroutine setattr1(root, key, val)
recursive subroutine setattr0a(root, key, value)
Set the dictionary 'value' as child at the path 'key' relative to 'root'. If a child at this path is ...
subroutine getattr8(root, key, res, default)
type(dict_typ) function, pointer getlast(root)
Get the pointer to the last child.
type(dict_typ) function, pointer assign12(key, val)
integer, parameter, public dict_real_threed
type(dict_typ) function, pointer assign4(key, val)
integer, parameter, public dict_int_p
type(dict_typ) function, pointer assign0(key, val)
subroutine setattr0b(root, key, value, type)
Create an empty node at path 'key' relative to 'root', if value and type are not defined. If they are defined, also fill the node with data.
subroutine setattr12(root, key, val)
type(dict_typ) function, pointer assign9(key, val)
type(dict_typ) function, pointer assign6(key, val)
integer, parameter, public dict_real_twod
subroutine, public closedict()
recursive subroutine, public deletedict(root)
Delete the dictionary 'root' and all subnodes.
type(dict_typ) function, pointer, public getnext(root)
Get the pointer to the next child.
integer, parameter, public dict_int
type(dict_typ) function, pointer assign7(key, val)
subroutine setattr6(root, key, val)
integer function, public getdatasize(root)
Get the size of the data in node 'root'. If there is no data 0 is returned. note: This is also the by...
subroutine setattr2(root, key, val)
integer, parameter, public dict_real_fived
integer, parameter, public max_char_len
type(dict_typ) function, pointer assign5(key, val)
Dictionary for generic data types.
subroutine setattr3(root, key, val)
logical function, public hasdata(root)
Checks if the node 'root' has data associated.
subroutine deletenode(node, k)
type(dict_typ) function, pointer findpath(root, key, create)
Search for the path in 'key' beginning at root and return a pointer to this node in 'res'...
subroutine getattr0(root, key, res)
Return the node at path 'key' relative to 'root' in 'res'. If this node has no data, but a child (e.g. a directory), return the child instead.
subroutine setattr9(root, key, val)
logical function, public haskey(root, key)
Checks if a node with key 'key' exists.
subroutine getattr1(root, key, res, default)
subroutine setattr11(root, key, val)
integer, parameter, public dict_real
subroutine, public initdict()
subroutine getattr0a(root, key, parent)
Retrieve the node at path 'key' relative to 'root'. The result will be given as third argument 'paren...
pointer, public getdata(root)
Return the datatype of node 'root'.
type(dict_typ) function, pointer assign1(key, val)
integer, parameter, public dict_int_oned
type(dict_typ) function, pointer assign11(key, val)
subroutine setattr4(root, key, val)
character(len=1), save prefix
preceds info output
subroutine setattr10(root, key, val)
integer, parameter, public dict_bool
subroutine setattr7(root, key, val)
subroutine getattr7(root, key, res, default)
subroutine getattr0b(root, key, type, value, default)
Retrieve the data 'value' of kind 'type' at path 'key' relative to 'root'. If the path can not be fou...
subroutine getattr2(root, key, res, default)