Set the key.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(key_base), | intent(inout) | :: | self | The key. |
||
class(*), | intent(in) | :: | key | The key value. |
||
integer(kind=I4P), | intent(in), | optional | :: | buckets_number | Buckets number. |
elemental subroutine set(self, key, buckets_number)
!---------------------------------------------------------------------------------------------------------------------------------
!< Set the key.
!---------------------------------------------------------------------------------------------------------------------------------
class(key_base), intent(inout) :: self !< The key.
class(*), intent(in) :: key !< The key value.
integer(I4P), intent(in), optional :: buckets_number !< Buckets number.
!---------------------------------------------------------------------------------------------------------------------------------
!---------------------------------------------------------------------------------------------------------------------------------
if (self%is_key_allowed(key)) then
call self%destroy
allocate(self%id_)
select type(key)
class is (key_base)
self%id_ = key%id_
type is(integer(I1P))
self%id_ = int(key, kind=I8P)
type is(integer(I2P))
self%id_ = int(key, kind=I8P)
type is(integer(I4P))
self%id_ = int(key, kind=I8P)
type is(integer(I8P))
self%id_ = int(key, kind=I8P)
type is(character(len=*))
if (present(buckets_number)) then
self%id_ = self%hash_string(string=key, buckets_number=buckets_number)
else
self%id_ = self%hash_string(string=key, buckets_number=9973_I4P)
endif
self%char_key_ = key
endselect
endif
!---------------------------------------------------------------------------------------------------------------------------------
endsubroutine set