summaryrefslogtreecommitdiffstats
path: root/src/H5public.h
blob: 6663e0e0237e57d65bcf1c1f07ebf44e939a5607 (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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/****************************************************************************
 * 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.                                                        *
 *                                                                          *
 ****************************************************************************/

#ifdef RCSID
static char             RcsId[] = "@(#)$Revision$";
#endif

/* $Id$ */


/*
 * This file contains public declarations for the HDF5 module.
 */
#ifndef _H5public_H
#define _H5public_H

/*
 * Undefine things that might get redefined in the H5config.h file if hdf5 is
 * being included by other packages that use autoconf. The problem is that
 * if the C preprocessor emits warning messages about redefinitions then
 * autoconf will become confused and think that the hdf5 header file doesn't
 * exist.
 */
#undef SIZEOF_INT8_T
#undef SIZEOF_INT_FAST8_T
#undef SIZEOF_INT_LEAST8_T
#undef SIZEOF_UINT8_T
#undef SIZEOF_UINT_FAST8_T
#undef SIZEOF_UINT_LEAST8_T

#undef SIZEOF_INT16_T
#undef SIZEOF_INT_FAST16_T
#undef SIZEOF_INT_LEAST16_T
#undef SIZEOF_UINT16_T
#undef SIZEOF_UINT_FAST16_T
#undef SIZEOF_UINT_LEAST16_T

#undef SIZEOF_INT32_T
#undef SIZEOF_INT_FAST32_T
#undef SIZEOF_INT_LEAST32_T
#undef SIZEOF_UINT32_T
#undef SIZEOF_UINT_FAST32_T
#undef SIZEOF_UINT_LEAST32_T

#undef SIZEOF_INT64_T
#undef SIZEOF_INT_FAST64_T
#undef SIZEOF_INT_LEAST64_T
#undef SIZEOF_UINT64_T
#undef SIZEOF_UINT_FAST64_T
#undef SIZEOF_UINT_LEAST64_T

/* Include files for public use... */
#include <H5config.h>           /*from configure                             */
#include <sys/types.h>
#ifdef STDC_HEADERS
#   include <limits.h>		/*for H5T_NATIVE_CHAR defn in H5Tpublic.h    */
#endif
#ifdef HAVE_STDINT_H
#   include <stdint.h>		/*for C9x types				     */
#endif
#ifdef HAVE_STDDEF_H
#   include <stddef.h>
#endif
#ifdef HAVE_PARALLEL
#   include <mpi.h>
#ifndef MPI_FILE_NULL		/*MPIO may be defined in mpi.h already*/
#   include <mpio.h>
#endif
#endif

#ifdef HAVE_GASS
#include "globus_common.h"
#include "globus_gass_file.h"
#endif

#include <H5api_adpt.h>

/* Version numbers */
#define H5_VERS_MAJOR	1       /* For major interface/format changes  	     */
#define H5_VERS_MINOR	3       /* For minor interface/format changes  	     */
#define H5_VERS_RELEASE	5      /* For tweaks, bug-fixes, or development     */

#define H5check()	H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR,	      \
				        H5_VERS_RELEASE)

/*
 * Status return values.  Failed integer functions in HDF5 result almost
 * always in a negative value (unsigned failing functions sometimes return
 * zero for failure) while successfull return is non-negative (often zero).
 * The negative failure value is most commonly -1, but don't bet on it.  The
 * proper way to detect failure is something like:
 *
 * 	if ((dset = H5Dopen (file, name))<0) {
 *	    fprintf (stderr, "unable to open the requested dataset\n");
 *	}
 */
typedef int herr_t;


/*
 * Boolean type.  Successful return values are zero (false) or positive
 * (true). The typical true value is 1 but don't bet on it.  Boolean
 * functions cannot fail.  Functions that return `htri_t' however return zero
 * (false), positive (true), or negative (failure). The proper way to test
 * for truth from a htri_t function is:
 *
 * 	if ((retval = H5Tcommitted(type))>0) {
 *	    printf("data type is committed\n");
 *	} else if (!retval) {
 * 	    printf("data type is not committed\n");
 *	} else {
 * 	    printf("error determining whether data type is committed\n");
 *	}
 */
typedef unsigned int hbool_t;
typedef int htri_t;

/*
 * The sizes of file objects have their own types defined here.  If large
 * sizes are enabled then use a 64-bit data type, otherwise use the size of
 * memory objects.
 */
#ifdef HAVE_LARGE_HSIZET
#   if SIZEOF_LONG_LONG>=8
typedef unsigned long long 	hsize_t;
typedef signed long long	hssize_t;
#   elif SIZEOF___INT64>=8
typedef unsigned __int64	hsize_t;
typedef signed __int64		hssize_t;
#   endif
#else
typedef size_t			hsize_t;
typedef ssize_t			hssize_t;
#endif

/*
 * File addresses have there own types.
 */
#if SIZEOF_UINT64_T>=8
    typedef uint64_t		haddr_t;
#   define HADDR_UNDEF		((haddr_t)(int64_t)(-1))
#elif SIZEOF_INT>=8
    typedef unsigned		haddr_t;
#   define HADDR_UNDEF		((haddr_t)(-1))
#elif SIZEOF_LONG>=8
    typedef unsigned long	haddr_t;
#   define HADDR_UNDEF		((haddr_t)(long)(-1))
#elif SIZEOF_LONG_LONG>=8
    typedef unsigned long long	haddr_t;
#   define HADDR_UNDEF		((haddr_t)(long long)(-1))
#elif SIZEOF___INT64>=8
    typedef unsigned __int64	haddr_t;
#   define HADDR_UNDEF		((haddr_t)(__int64)(-1))
#else
#   error "nothing appropriate for haddr_t"
#endif
#define HADDR_MAX		(HADDR_UNDEF-1)

#ifdef __cplusplus
extern "C" {
#endif

/* Functions in H5.c */
__DLL__ herr_t H5open(void);
__DLL__ herr_t H5close(void);
__DLL__ herr_t H5dont_atexit(void);
__DLL__ herr_t H5get_libversion(unsigned *majnum, unsigned *minnum,
				unsigned *relnum);
__DLL__ herr_t H5check_version(unsigned majnum, unsigned minnum,
			       unsigned relnum);

#ifdef __cplusplus
}
#endif
#endif