soa_read_logical_field Subroutine

private 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.

Arguments

Type IntentOptional 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

Calls

proc~~soa_read_logical_field~~CallsGraph proc~soa_read_logical_field soa_read_logical_field interface~read_array read_array proc~soa_read_logical_field->interface~read_array interface~to_char to_char proc~soa_read_logical_field->interface~to_char proc~error_has_error error_t%error_has_error proc~soa_read_logical_field->proc~error_has_error proc~error_set error_t%error_set proc~soa_read_logical_field->proc~error_set proc~soa_check_alloc soa_check_alloc proc~soa_read_logical_field->proc~soa_check_alloc proc~soa_check_field_count soa_check_field_count proc~soa_read_logical_field->proc~soa_check_field_count proc~read_char_record read_char_record interface~read_array->proc~read_char_record proc~read_int32_array read_int32_array interface~read_array->proc~read_int32_array proc~read_int64_array read_int64_array interface~read_array->proc~read_int64_array proc~read_real_dp_array read_real_dp_array interface~read_array->proc~read_real_dp_array proc~read_real_sp_array read_real_sp_array interface~read_array->proc~read_real_sp_array proc~to_char_char to_char_char interface~to_char->proc~to_char_char proc~to_char_dp to_char_dp interface~to_char->proc~to_char_dp proc~to_char_int32 to_char_int32 interface~to_char->proc~to_char_int32 proc~to_char_int64 to_char_int64 interface~to_char->proc~to_char_int64 proc~to_char_logical to_char_logical interface~to_char->proc~to_char_logical proc~to_char_matrix_dp to_char_matrix_dp interface~to_char->proc~to_char_matrix_dp proc~to_char_matrix_int32 to_char_matrix_int32 interface~to_char->proc~to_char_matrix_int32 proc~to_char_matrix_int64 to_char_matrix_int64 interface~to_char->proc~to_char_matrix_int64 proc~to_char_matrix_sp to_char_matrix_sp interface~to_char->proc~to_char_matrix_sp proc~to_char_sp to_char_sp interface~to_char->proc~to_char_sp proc~to_char_vector_dp to_char_vector_dp interface~to_char->proc~to_char_vector_dp proc~to_char_vector_int32 to_char_vector_int32 interface~to_char->proc~to_char_vector_int32 proc~to_char_vector_int64 to_char_vector_int64 interface~to_char->proc~to_char_vector_int64 proc~to_char_vector_sp to_char_vector_sp interface~to_char->proc~to_char_vector_sp proc~soa_check_alloc->interface~to_char proc~soa_check_alloc->proc~error_set proc~soa_check_field_count->interface~to_char proc~soa_check_field_count->proc~error_set proc~check_io check_io proc~read_char_record->proc~check_io proc~error_get_code error_t%error_get_code proc~read_char_record->proc~error_get_code proc~error_wrap error_t%error_wrap proc~read_char_record->proc~error_wrap proc~read_record_header read_record_header proc~read_char_record->proc~read_record_header proc~bswap_int32 bswap_int32 proc~read_int32_array->proc~bswap_int32 proc~read_int32_array->proc~check_io proc~read_int32_array->proc~error_get_code proc~read_int32_array->proc~error_wrap proc~read_int32_array->proc~read_record_header proc~bswap_int64 bswap_int64 proc~read_int64_array->proc~bswap_int64 proc~read_int64_array->proc~check_io proc~read_int64_array->proc~error_get_code proc~read_int64_array->proc~error_wrap proc~read_int64_array->proc~read_record_header proc~bits_to_real_dp bits_to_real_dp proc~read_real_dp_array->proc~bits_to_real_dp proc~read_real_dp_array->proc~bswap_int64 proc~read_real_dp_array->proc~check_io proc~read_real_dp_array->proc~error_get_code proc~read_real_dp_array->proc~error_wrap proc~read_real_dp_array->proc~read_record_header proc~bits_to_real_sp bits_to_real_sp proc~read_real_sp_array->proc~bits_to_real_sp proc~read_real_sp_array->proc~bswap_int32 proc~read_real_sp_array->proc~check_io proc~read_real_sp_array->proc~error_get_code proc~read_real_sp_array->proc~error_wrap proc~read_real_sp_array->proc~read_record_header proc~check_io->interface~to_char proc~check_io->proc~error_set proc~error_wrap->proc~error_has_error proc~clip_tail clip_tail proc~error_wrap->proc~clip_tail proc~read_record_header->interface~to_char proc~read_record_header->proc~error_set proc~read_record_header->proc~bswap_int32 proc~read_record_header->proc~bswap_int64 proc~read_record_header->proc~check_io proc~element_bytes element_bytes proc~read_record_header->proc~element_bytes

Called by

proc~~soa_read_logical_field~~CalledByGraph proc~soa_read_logical_field soa_read_logical_field interface~soa_read_field soa_read_field interface~soa_read_field->proc~soa_read_logical_field proc~particle_soa_deserialize particle_soa_t%particle_soa_deserialize proc~particle_soa_deserialize->interface~soa_read_field

Variables

Type Visibility Attributes Name Initial
integer(kind=int32), private, allocatable :: buffer(:)
integer(kind=default_int), private :: i
integer(kind=default_int), private :: stat

Source Code

   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