Example #1
0
static int
ReadNativeArray(Array *array,
                FILE *file)
{
   short   type, rank;
   long    *dim;
   long    length;
   long    size;
   void    *data;

   if (array == NULL || file == NULL)
      return FALSE;

   /* Read type, rank. */

   if (fread(&type, sizeof(short), 1, file) != 1)
      return FALSE;             /* Couldn't get type. */

   if (fread(&rank, sizeof(short), 1, file) != 1)
      return FALSE;             /* Couldn't get rank. */

   if (rank == 0)
      dim = NULL;
   else
      {
         dim = (long *) malloc(rank * sizeof(long));
         if (dim == NULL)
            return FALSE;       /* Allocation failure. */

         if (fread(dim, sizeof(long), rank, file) != rank)
            return FALSE;       /* Couldn't get dimensions. */
      }

   length = LongProd(rank, dim);
   size = InternTypeSize(type);

   if (length == 0)
      data = NULL;
   else
      {
         data = malloc(length*size);

         if (data == NULL)
            return FALSE;       /* Allocation failure. */

         if (NativeRead(data, type, length, file) != length)
            return FALSE;
      }

   array->type = type;
   array->rank = rank;
   array->dim = dim;
   array->data = data;

   return TRUE;
}
Example #2
0
long
FieldLength(FieldSpec *field)
{
    if (field == NULL
	|| field->rank != 0 && field->dim == NULL
	|| field->type == NO_TYPE)
    {
	return 0;
    }

    return LongProd(field->rank, field->dim);
}
Example #3
0
static int
WriteNativeArray(Array *array,
                 FILE  *file)
{
   short   type, rank;
   long    *dim;
   void    *data;
   long    length;

   if (array == NULL || file == NULL)
      return FALSE;

   type = array->type;
   rank = array->rank;
   dim = array->dim;
   data = array->data;

   if (fwrite(&type, sizeof(short), 1, file) != 1)
      return FALSE;

   if (fwrite(&rank, sizeof(short), 1, file) != 1)
      return FALSE;

   if (rank > 0)
      {
         if (dim == NULL)
            return FALSE;

         if (fwrite(dim, sizeof(long), rank, file) != rank)
            return FALSE;
      }

   length = LongProd(rank, dim);

   if (length > 0)
      {
         if (data == NULL)
            return FALSE;

         if (NativeWrite(data, type, length, file) != length)
            return FALSE;
      }

   return TRUE;
}