26 character(len=DICT_KEY_LENGTH) :: key
27 type(dict_data) :: value
32 type(linked_list),
pointer :: list
39 private :: linked_list
40 private :: list_create
41 private :: list_destroy
44 private :: list_insert
45 private :: list_insert_head
46 private :: list_delete_element
47 private :: list_get_data
48 private :: list_put_data
49 private :: dict_get_elem
51 include
'linkedlist.f90'
71 subroutine dict_create( dict, key, value )
72 type(dict_struct),
pointer :: dict
73 character(len=*),
intent(in) :: key
74 type(dict_data),
intent(in) :: value
76 type(list_data) :: data
83 call list_create( dict%list,
data )
85 end subroutine dict_create
95 subroutine dict_destroy( dict )
96 type(dict_struct),
pointer :: dict
98 call list_destroy( dict%list )
101 end subroutine dict_destroy
113 subroutine dict_add_key( dict, key, value )
114 type(dict_struct),
pointer :: dict
115 character(len=*),
intent(in) :: key
116 type(dict_data),
intent(in) :: value
118 type(list_data) :: data
119 type(linked_list),
pointer :: elem
121 elem => dict_get_elem( dict, key )
123 if (
associated(elem) )
then
124 elem%data%value =
value
128 call list_insert( dict%list,
data )
130 end subroutine dict_add_key
138 subroutine dict_delete_key( dict, key )
139 type(dict_struct),
pointer :: dict
140 character(len=*),
intent(in) :: key
142 type(linked_list),
pointer :: elem
144 elem => dict_get_elem( dict, key )
146 if (
associated(elem) )
then
147 call list_delete_element( dict%list, elem )
149 end subroutine dict_delete_key
157 function dict_get_key( dict, key ) result(value)
158 type(dict_struct),
pointer :: dict
159 character(len=*),
intent(in) :: key
160 type(dict_data) :: value
162 type(list_data) :: data
163 type(linked_list),
pointer :: elem
165 elem => dict_get_elem( dict, key )
167 if (
associated(elem) )
then
168 value = elem%data%value
172 end function dict_get_key
180 function dict_has_key( dict, key ) result(has)
181 type(dict_struct),
pointer :: dict
182 character(len=*),
intent(in) :: key
185 type(linked_list),
pointer :: elem
187 elem => dict_get_elem( dict, key )
189 has =
associated(elem)
190 end function dict_has_key
198 function dict_get_elem( dict, key ) result(elem)
199 type(dict_struct),
pointer :: dict
200 character(len=*),
intent(in) :: key
202 type(linked_list),
pointer :: elem
205 do while (
associated(elem) )
206 if ( elem%data%key .eq. key )
then
209 elem => list_next( elem )
212 end function dict_get_elem