/*
*+
*  Name:
*     dat1SetAttHdsdims

*  Purpose:
*     Store HDS dimensions array in an HDF5 attribute

*  Language:
*     Starlink ANSI C

*  Type of Module:
*     Library routine

*  Invocation:
*     dat1SetAttrHdsdims( hid_t obj_id, const char * attrname,
*                         int nvals, const hdsdim_t values[], int * status );

*  Arguments:
*     obj_id = hid_t (Given)
*        HDF5 object to associate with attribute.
*     attrname = const char * (Given)
*        Name of attribute.
*     nvals = int (Given)
*        Number of values. Can not exceed DAT__MXDIM.
*     values = const hdsdim_t [] (Given)
*        Values to store in attribute.
*     status = int* (Given and Returned)
*        Pointer to global status.

*  Description:
*     Store an array of hdsdim integers in an attribute associated
*     with the specified HDF5 object.

*  Authors:
*     TIMJ: Tim Jenness (Cornell)
*     {enter_new_authors_here}

*  History:
*     2014-11-17 (TIMJ):
*        Initial version
*     {enter_further_changes_here}

*  Copyright:
*     Copyright (C) 2014 Cornell University
*     All Rights Reserved.

*  Licence:
*     Redistribution and use in source and binary forms, with or
*     without modification, are permitted provided that the following
*     conditions are met:
*
*     - Redistributions of source code must retain the above copyright
*       notice, this list of conditions and the following disclaimer.
*
*     - Redistributions in binary form must reproduce the above
*       copyright notice, this list of conditions and the following
*       disclaimer in the documentation and/or other materials
*       provided with the distribution.
*
*     - Neither the name of the {organization} nor the names of its
*       contributors may be used to endorse or promote products
*       derived from this software without specific prior written
*       permission.
*
*     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
*     CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
*     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
*     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
*     DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
*     CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*     SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
*     LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
*     USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
*     AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
*     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
*     IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
*     THE POSSIBILITY OF SUCH DAMAGE.

*  Bugs:
*     {note_any_bugs_here}
*-
*/

#include "hdf5.h"

#include "ems.h"
#include "sae_par.h"

#include "hds1.h"
#include "dat1.h"
#include "hds.h"

#include "dat_err.h"

void
dat1SetAttrHdsdims( hid_t obj_id, const char * attrname,
                    int nvals, const hdsdim values[], int * status ) {
  hsize_t hvalues[DAT__MXDIM];
  int i;
  hid_t attrtype = 0;

  if (*status != SAI__OK) return;

  if (nvals > DAT__MXDIM) {
    *status = DAT__DIMIN;
    emsRepf("dat1SetAttrHdsdims", "Can not store a dimensions attribute with more than DAT__MXDIM elements",
            status);
    return;
  }

  /* Need to type convert the values */
  for (i=0; i<nvals; i++) {
    hvalues[i] = values[i];
  }

  CALLHDFE( hid_t, attrtype,
           H5Tcopy(H5T_NATIVE_HSIZE),
           DAT__HDF5E,
           emsRepf("dat1SetAttrString_1", "Error copying data type during writing of attribute '%s'", status, attrname );
           );

  dat1SetAttr( obj_id, attrname, attrtype, nvals, hvalues, status );

 CLEANUP:
  if (attrtype > 0) H5Tclose(attrtype);
  return;
}