summaryrefslogtreecommitdiffstats
path: root/src/H5Tpublic.h
blob: 907aff1402e7a49dfb553adf0dc143afe234092d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/****************************************************************************
 * NCSA HDF                                                                 *
 * Software Development Group                                               *
 * National Center for Supercomputing Applications                          *
 * University of Illinois at Urbana-Champaign                               *
 * 605 E. Springfield, Champaign IL 61820                                   *
 *                                                                          *
 * For conditions of distribution and use, see the accompanying             *
 * hdf/COPYING file.                                                        *
 *                                                                          *
 ****************************************************************************/

/* $Id$ */

/*
 * This file contains public declarations for the H5T module.
 */

#ifndef _H5Tpublic_H
#define _H5Tpublic_H

/* Public headers needed by this file */
#include <H5public.h>
#include <H5Apublic.h>

/* These are the various classes of data types */
typedef enum H5T_class_t {
   H5T_NO_CLASS		=-1,	/*error					*/
   H5T_INTEGER		=0,	/*integer types				*/
   H5T_FLOAT		=1,	/*floating-point types			*/
   H5T_TIME		=2,	/*date and time	types			*/
   H5T_STRING		=3,	/*character string types		*/
   H5T_BITFIELD		=4,	/*bit field types			*/
   H5T_OPAQUE		=5, 	/*opaque types				*/
   H5T_COMPOUND		=6	/*compound types			*/
} H5T_class_t;

/* Byte orders */
typedef enum H5T_order_t {
   H5T_ORDER_ERROR	=-1, 	/*error					*/
   H5T_ORDER_LE		=0, 	/*little endian				*/
   H5T_ORDER_BE		=1, 	/*bit endian				*/
   H5T_ORDER_VAX	=2, 	/*VAX mixed endian			*/
   H5T_ORDER_NONE	=3	/*no particular order (strings, bits,..)*/
   /*H5T_ORDER_NONE must be last*/
} H5T_order_t;

/* Types of integer sign schemes */
typedef enum H5T_sign_t {
   H5T_SGN_ERROR	=-1, 	/*error					*/
   H5T_SGN_NONE		=0, 	/*this is an unsigned type		*/
   H5T_SGN_2		=1,  	/*two's complement			*/
   
   H5T_SGN_N		=2	/*this must be last			*/
} H5T_sign_t;

/* Floating-point normalization schemes */
typedef enum H5T_norm_t {
   H5T_NORM_ERROR	=-1, 	/*error					*/
   H5T_NORM_IMPLIED	=0,	/*msb of mantissa isn't stored, always 1*/
   H5T_NORM_MSBSET	=1, 	/*msb of mantissa is always 1		*/
   H5T_NORM_NONE	=2	/*not normalized			*/
   /*H5T_NORM_NONE must be last*/
} H5T_norm_t;

/* Character set to use for text strings */
typedef enum H5T_cset_t {
   H5T_CSET_ERROR	=-1,	/*error					*/
   H5T_CSET_ASCII	=0	/*US ASCII				*/
} H5T_cset_t;

/* Type of padding to use in character strings */
typedef enum H5T_str_t {
   H5T_STR_ERROR	=-1, 	/*error					*/
   H5T_STR_NULL		=0, 	/*pad with null term like in C		*/
   H5T_STR_SPACE	=1 	/*pad with spaces like in Fortran	*/
} H5T_str_t;

/* Type of padding to use in other atomic types */
typedef enum H5T_pad_t {
   H5T_PAD_ERROR	=-1, 	/*error					*/
   H5T_PAD_ZERO		=0, 	/*always set to zero			*/
   H5T_PAD_ONE		=1, 	/*always set to one			*/
   H5T_PAD_BACKGROUND	=2, 	/*set to background value		*/
   
   H5T_NPAD		=3	/*THIS MUST BE LAST			*/
} H5T_pad_t;

#define HOFFSET(S,M)	((const char*)&S.M-(const char*)&S)
#define HPOFFSET(P,M)	((const char*)&(P->M)-(const char*)P)

/* The predefined types */
#define H5T_NATIVE_CHAR		(H5init(), H5T_NATIVE_CHAR_g)
#define H5T_NATIVE_UCHAR	(H5init(), H5T_NATIVE_UCHAR_g)
#define H5T_NATIVE_SHORT	(H5init(), H5T_NATIVE_SHORT_g)
#define H5T_NATIVE_USHORT	(H5init(), H5T_NATIVE_USHORT_g)
#define H5T_NATIVE_INT		(H5init(), H5T_NATIVE_INT_g)
#define H5T_NATIVE_UINT		(H5init(), H5T_NATIVE_UINT_g)
#define H5T_NATIVE_LONG		(H5init(), H5T_NATIVE_LONG_g)
#define H5T_NATIVE_ULONG	(H5init(), H5T_NATIVE_ULONG_g)
#define H5T_NATIVE_FLOAT	(H5init(), H5T_NATIVE_FLOAT_g)
#define H5T_NATIVE_DOUBLE	(H5init(), H5T_NATIVE_DOUBLE_g)

extern hid_t H5T_NATIVE_CHAR_g;
extern hid_t H5T_NATIVE_UCHAR_g;
extern hid_t H5T_NATIVE_SHORT_g;
extern hid_t H5T_NATIVE_USHORT_g;
extern hid_t H5T_NATIVE_INT_g;
extern hid_t H5T_NATIVE_UINT_g;
extern hid_t H5T_NATIVE_LONG_g;
extern hid_t H5T_NATIVE_ULONG_g;
extern hid_t H5T_NATIVE_FLOAT_g;
extern hid_t H5T_NATIVE_DOUBLE_g;

#ifdef __cplusplus
extern "C" {
#endif

/* Operations defined on all data types */
hid_t H5Tcreate (H5T_class_t type, size_t size);
hid_t H5Tcopy (hid_t type_id);
herr_t H5Tclose (hid_t type_id);
hbool_t H5Tequal (hid_t type1_id, hid_t type2_id);

/* Operations defined on compound data types */
herr_t H5Tinsert (hid_t parent_id, const char *name, off_t offset,
		  hid_t member_id);
herr_t H5Tpack (hid_t type_id);

/* Querying property values */
H5T_class_t H5Tget_class (hid_t type_id);
size_t H5Tget_size (hid_t type_id);
H5T_order_t H5Tget_order (hid_t type_id);
size_t H5Tget_precision (hid_t type_id);
size_t H5Tget_offset (hid_t type_id);
H5T_sign_t H5Tget_sign (hid_t type_id);
herr_t H5Tget_fields (hid_t type_id, size_t *spos/*out*/,
		      size_t *epos/*out*/, size_t *esize/*out*/,
		      size_t *mpos/*out*/, size_t *msize/*out*/);
size_t H5Tget_ebias (hid_t type_id);
H5T_norm_t H5Tget_norm (hid_t type_id);
intn H5Tget_nmembers (hid_t type_id);
char *H5Tget_member_name (hid_t type_id, int membno);
size_t H5Tget_member_offset (hid_t type_id, int membno);
int H5Tget_member_dims (hid_t type_id, int membno,
			int dims[]/*out*/, int perm[]/*out*/);
hid_t H5Tget_member_type (hid_t type_id, int membno);

/* Setting property values */
herr_t H5Tset_size (hid_t type_id, size_t size);
herr_t H5Tset_order (hid_t type_id, H5T_order_t order);
herr_t H5Tset_precision (hid_t type_id, size_t prec);
herr_t H5Tset_offset (hid_t type_id, size_t offset);
herr_t H5Tset_sign (hid_t type_id, H5T_sign_t sign);
herr_t H5Tset_fields (hid_t type_id, size_t spos, size_t epos, size_t esize,
		      size_t mpos, size_t msize);
herr_t H5Tset_ebias (hid_t type_id, size_t ebias);
herr_t H5Tset_norm (hid_t type_id, H5T_norm_t norm);


#ifdef __cplusplus
}
#endif

#endif