Example #1
0
// Read dataset in externalElement and open external files
char AH5_read_eet_dataset (hid_t file_id, const char *path, AH5_eet_dataset_t *eet_dataset)
{
    H5T_class_t type_class;
    char rdata = AH5_FALSE;
    hsize_t dims[2], i;
    size_t length;
    int nb_dims;

    eet_dataset->path = strdup(path);

    if (AH5_path_valid(file_id, path))
        if (H5LTget_dataset_ndims(file_id, path, &nb_dims) >= 0)
            if (nb_dims == 2)
                if (H5LTget_dataset_info(file_id, path, dims, &type_class, &length) >= 0)
                    if (dims[0] > 0 && dims[1] == 3 && type_class == H5T_STRING)
                        if(AH5_read_str_dataset(file_id, path, dims[0] * dims[1], length, &(eet_dataset->eed_items)))
                        {
                            eet_dataset->nb_eed_items = dims[0];
                            rdata = AH5_TRUE;
                            eet_dataset->file_id = (hid_t *) malloc(eet_dataset->nb_eed_items * sizeof(hid_t));
                            for (i = 0; i < eet_dataset->nb_eed_items; i++)
                                eet_dataset->file_id[i] = -1;
                        }
    if (!rdata)
    {
        AH5_print_err_dset(AH5_C_EXTERNAL_ELEMENT, path);
        eet_dataset->nb_eed_items = 0;
        eet_dataset->file_id = NULL;
        eet_dataset->eed_items = NULL;
    }
    else
        if (!AH5_open_external_files(eet_dataset))
            rdata = AH5_FALSE;
    return rdata;
}
Example #2
0
// Read dataset in externalElement and open external files
char AH5_read_eet_dataset (hid_t file_id, const char *path, AH5_eet_dataset_t *eet_dataset)
{
  H5T_class_t type_class;
  char rdata = AH5_FALSE;
  hsize_t dims[2], i;
  size_t length;
  int nb_dims;
  ssize_t fpath_size;

  eet_dataset->path = strdup(path);

  fpath_size = H5Fget_name(file_id, NULL, 0);
  // Strange behavior of H5Fget_name: it seems to return to small length.
  eet_dataset->principle_file_path = malloc(fpath_size + 2);
  eet_dataset->principle_file_path[fpath_size + 1] = '\0';
  eet_dataset->principle_file_path[fpath_size] = '\0';
  H5Fget_name(file_id, eet_dataset->principle_file_path, fpath_size + 1);

  if (AH5_path_valid(file_id, path))
    if (H5LTget_dataset_ndims(file_id, path, &nb_dims) >= 0)
      if (nb_dims == 2)
        if (H5LTget_dataset_info(file_id, path, dims, &type_class, &length) >= 0)
          if (dims[0] > 0 && dims[1] == 3 && type_class == H5T_STRING)
            if(AH5_read_str_dataset(file_id, path, dims[0] * dims[1], length, &(eet_dataset->eed_items)))
            {
              eet_dataset->nb_eed_items = dims[0];
              rdata = AH5_TRUE;
              eet_dataset->file_id = (hid_t *) malloc((size_t) eet_dataset->nb_eed_items * sizeof(hid_t));
              for (i = 0; i < eet_dataset->nb_eed_items; i++)
                eet_dataset->file_id[i] = -1;
            }
  if (!rdata)
  {
    AH5_print_err_dset(AH5_C_EXTERNAL_ELEMENT, path);
    eet_dataset->nb_eed_items = 0;
    eet_dataset->file_id = NULL;
    eet_dataset->eed_items = NULL;
  }
  else if (!AH5_open_external_files(eet_dataset))
    rdata = AH5_FALSE;
  return rdata;
}