Read a default logical field from an int32 record of 0/1 codes.
Any code other than 0 or 1 is rejected rather than being coerced to
true: a record that did not come from soa_write_field is more likely
to be a mislabelled integer field than a sloppy boolean.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer(kind=default_int), | intent(in) | :: | unit | |||
| character(len=*), | intent(in) | :: | name | |||
| logical, | intent(out), | allocatable | :: | values(:) | ||
| integer(kind=default_int), | intent(in) | :: | n | |||
| logical, | intent(in) | :: | swapped | |||
| type(error_t), | intent(inout) | :: | err |
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer(kind=int32), | private, | allocatable | :: | buffer(:) | |||
| integer(kind=default_int), | private | :: | i | ||||
| integer(kind=default_int), | private | :: | stat |
subroutine soa_read_logical_field(unit, name, values, n, swapped, err) !! Read a default `logical` field from an `int32` record of 0/1 codes. !! !! Any code other than 0 or 1 is rejected rather than being coerced to !! true: a record that did not come from `soa_write_field` is more likely !! to be a mislabelled integer field than a sloppy boolean. integer(default_int), intent(in) :: unit character(len=*), intent(in) :: name logical, allocatable, intent(out) :: values(:) integer(default_int), intent(in) :: n logical, intent(in) :: swapped type(error_t), intent(inout) :: err integer(int32), allocatable :: buffer(:) integer(default_int) :: i, stat call read_array(unit, buffer, swapped, err) if (err%has_error()) return call soa_check_field_count(name, size(buffer, kind=default_int), n, err) if (err%has_error()) return do i = 1, n if (buffer(i) /= 0_int32 .and. buffer(i) /= 1_int32) then call err%set(ERROR_VALIDATION, "soa field '"//name//"' element "// & to_char(int(i, int64))//" is not a logical code: "//to_char(buffer(i))) return end if end do allocate (values(n), stat=stat) call soa_check_alloc(stat, "decoding a logical field", err) if (err%has_error()) return do i = 1, n values(i) = (buffer(i) == 1_int32) end do end subroutine soa_read_logical_field