Salome HOME
NRI : KERNEL is now defined in KERNELCatalog.
[modules/kernel.git] / src / HDFPersist / HDFdatasetCreate.c
1 #include "hdfi.h"
2
3 /*
4  * - Name : HDFdatasetCreate
5  * - Description : creates a HDF dataset
6  * - Parameters :
7  *     - pid  (IN)     : father ID
8  *     - name (IN)     : dataset name
9  *     - type (IN)     : dataset type (HDF_STRING,HDF_INT32,HDF_INT64,HDF_FLOAT64)
10  *     - dimd (IN)     : dataset size
11  * - Result : 
12  *     - if success : returns dataset ID
13  *     - if failure : -1
14  */ 
15 hdf_idt HDFdatasetCreate(hdf_idt pid,char *name,hdf_type type,
16                          hdf_size *dimd, int ndim)
17 {
18   hdf_idt dataset, dataspace = 0;
19   hdf_err ret;
20   int type_hdf;
21
22   switch(type)
23     {
24     case HDF_FLOAT64 :
25       type_hdf = H5T_IEEE_F64LE;
26       break;
27
28     case HDF_INT32 :
29       type_hdf = H5T_STD_I32LE;
30       break;
31  
32     case HDF_INT64 :
33       type_hdf = H5T_STD_I64LE;
34       break;
35
36     case HDF_STRING :           
37       if((type_hdf = H5Tcopy(H5T_C_S1)) < 0)
38         return -1;
39       if((ret = H5Tset_size(type_hdf,1)) < 0)
40         return -1;
41       break;
42
43     default :
44       return -1;
45     }
46
47 if ((dataset = H5Dopen(pid,name)) < 0)
48     {
49
50      if ((dataspace = H5Screate_simple(ndim,dimd,NULL)) < 0)
51         return -1;
52      if ((dataset = H5Dcreate(pid,name,type_hdf,dataspace,
53                                H5P_DEFAULT)) < 0)
54         return -1;
55     }
56   else
57     return -1;
58
59   if ((ret = H5Sclose(dataspace)) < 0)
60     return -1;           
61
62   return dataset;
63 }