void
ISO_C_BINDING_PREFIX (c_f_pointer_l8) (void *c_ptr_in,
				       gfc_array_void *f_ptr_out,
				       const array_t *shape)
{
  /* Here we have a logical of kind=8.	*/
  ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape,
				      (int) GFC_DTYPE_LOGICAL,
				      (int) sizeof (GFC_LOGICAL_8));
}
void
ISO_C_BINDING_PREFIX (c_f_pointer_s0) (void *c_ptr_in,
				       gfc_array_void *f_ptr_out,
				       const array_t *shape)
{
  /* Here we have a character string of len=1.  */
  ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape,
				      (int) GFC_DTYPE_CHARACTER,
				      (int) sizeof (char));
}
void
ISO_C_BINDING_PREFIX (c_f_pointer_c16) (void *c_ptr_in,
					gfc_array_void *f_ptr_out,
					const array_t *shape)
{
  /* Here we have an complex(kind=16).  */
  ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape,
				      (int) GFC_DTYPE_COMPLEX,
				      (int) sizeof (GFC_COMPLEX_16));
}
void
ISO_C_BINDING_PREFIX (c_f_pointer_r16) (void *c_ptr_in,
					gfc_array_void *f_ptr_out,
					const array_t *shape)
{
  /* Here we have an real(kind=16).  */
  ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape,
				      (int) GFC_DTYPE_REAL,
				      (int) sizeof (GFC_REAL_16));
}
void
ISO_C_BINDING_PREFIX (c_f_pointer_i16) (void *c_ptr_in,
					gfc_array_void *f_ptr_out,
					const array_t *shape)
{
  /* Here we have an integer(kind=16).  */
  ISO_C_BINDING_PREFIX (c_f_pointer) (c_ptr_in, f_ptr_out, shape,
				      (int) GFC_DTYPE_INTEGER,
				      (int) sizeof (GFC_INTEGER_16));
}
Пример #6
0
void
ISO_C_BINDING_PREFIX (c_f_pointer) (void *c_ptr_in,
                                    gfc_array_void *f_ptr_out,
                                    const array_t *shape,
                                    int type, int elemSize)
{
  if (shape != NULL)
    {
      f_ptr_out->offset = 0;

      /* Set the necessary dtype field for all pointers.  */
      f_ptr_out->dtype = 0;

      /* Put in the element size.  */
      f_ptr_out->dtype = f_ptr_out->dtype | (elemSize << GFC_DTYPE_SIZE_SHIFT);

      /* Set the data type (e.g., BT_INTEGER).  */
      f_ptr_out->dtype = f_ptr_out->dtype | (type << GFC_DTYPE_TYPE_SHIFT);
    }
  
  /* Use the generic version of c_f_pointer to set common fields.  */
  ISO_C_BINDING_PREFIX (c_f_pointer_u0) (c_ptr_in, f_ptr_out, shape);
}