AnalysisSystemForRadionucli.../include/armadillo_bits/def_hdf5.hpp
2024-06-04 15:25:02 +08:00

135 lines
5.6 KiB
C++

// Copyright (C) 2014 National ICT Australia (NICTA)
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// -------------------------------------------------------------------
//
// Written by Ryan Curtin
#if defined(ARMA_USE_HDF5)
#if !defined(ARMA_USE_HDF5_ALT)
// macros needed if the wrapper run-time library is not being used
#define arma_H5Tcopy H5Tcopy
#define arma_H5Tcreate H5Tcreate
#define arma_H5Tinsert H5Tinsert
#define arma_H5Tequal H5Tequal
#define arma_H5Tclose H5Tclose
#define arma_H5Dopen H5Dopen
#define arma_H5Dget_type H5Dget_type
#define arma_H5Dclose H5Dclose
#define arma_H5Dwrite H5Dwrite
#define arma_H5Dget_space H5Dget_space
#define arma_H5Dread H5Dread
#define arma_H5Dcreate H5Dcreate
#define arma_H5Sget_simple_extent_ndims H5Sget_simple_extent_ndims
#define arma_H5Sget_simple_extent_dims H5Sget_simple_extent_dims
#define arma_H5Sclose H5Sclose
#define arma_H5Screate_simple H5Screate_simple
#define arma_H5Ovisit H5Ovisit
#define arma_H5Eset_auto H5Eset_auto
#define arma_H5Eget_auto H5Eget_auto
#define arma_H5Fopen H5Fopen
#define arma_H5Fcreate H5Fcreate
#define arma_H5Fclose H5Fclose
#define arma_H5Fis_hdf5 H5Fis_hdf5
#define arma_H5T_NATIVE_UCHAR H5T_NATIVE_UCHAR
#define arma_H5T_NATIVE_CHAR H5T_NATIVE_CHAR
#define arma_H5T_NATIVE_SHORT H5T_NATIVE_SHORT
#define arma_H5T_NATIVE_USHORT H5T_NATIVE_USHORT
#define arma_H5T_NATIVE_INT H5T_NATIVE_INT
#define arma_H5T_NATIVE_UINT H5T_NATIVE_UINT
#define arma_H5T_NATIVE_LONG H5T_NATIVE_LONG
#define arma_H5T_NATIVE_ULONG H5T_NATIVE_ULONG
#define arma_H5T_NATIVE_LLONG H5T_NATIVE_LLONG
#define arma_H5T_NATIVE_ULLONG H5T_NATIVE_ULLONG
#define arma_H5T_NATIVE_FLOAT H5T_NATIVE_FLOAT
#define arma_H5T_NATIVE_DOUBLE H5T_NATIVE_DOUBLE
#else
// prototypes for the wrapper functions defined in the wrapper run-time library (src/wrapper.cpp)
extern "C"
{
// Wrapper functions for H5* functions.
hid_t arma_H5Tcopy(hid_t dtype_id);
hid_t arma_H5Tcreate(H5T_class_t cl, size_t size);
herr_t arma_H5Tinsert(hid_t dtype_id, const char* name, size_t offset, hid_t field_id);
htri_t arma_H5Tequal(hid_t dtype_id1, hid_t dtype_id2);
herr_t arma_H5Tclose(hid_t dtype_id);
hid_t arma_H5Dopen(hid_t loc_id, const char* name, hid_t dapl_id);
hid_t arma_H5Dget_type(hid_t dataset_id);
herr_t arma_H5Dclose(hid_t dataset_id);
hid_t arma_H5Dcreate(hid_t loc_id, const char* name, hid_t dtype_id, hid_t space_id, hid_t lcpl_id, hid_t dcpl_id, hid_t dapl_id);
herr_t arma_H5Dwrite(hid_t dataset_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id, hid_t xfer_plist_id, const void* buf);
hid_t arma_H5Dget_space(hid_t dataset_id);
herr_t arma_H5Dread(hid_t dataset_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id, hid_t xfer_plist_id, void* buf);
int arma_H5Sget_simple_extent_ndims(hid_t space_id);
int arma_H5Sget_simple_extent_dims(hid_t space_id, hsize_t* dims, hsize_t* maxdims);
herr_t arma_H5Sclose(hid_t space_id);
hid_t arma_H5Screate_simple(int rank, const hsize_t* current_dims, const hsize_t* maximum_dims);
herr_t arma_H5Ovisit(hid_t object_id, H5_index_t index_type, H5_iter_order_t order, H5O_iterate_t op, void* op_data);
herr_t arma_H5Eset_auto(hid_t estack_id, H5E_auto_t func, void* client_data);
herr_t arma_H5Eget_auto(hid_t estack_id, H5E_auto_t* func, void** client_data);
hid_t arma_H5Fopen(const char* name, unsigned flags, hid_t fapl_id);
hid_t arma_H5Fcreate(const char* name, unsigned flags, hid_t fcpl_id, hid_t fapl_id);
herr_t arma_H5Fclose(hid_t file_id);
htri_t arma_H5Fis_hdf5(const char* name);
// Wrapper variables that represent the hid_t values for the H5T_NATIVE_*
// types. Note that H5T_NATIVE_UCHAR itself is a macro that resolves to about
// forty other macros, and we definitely don't want to hijack those,
// so this is the best way to go about wrapping these...
extern hid_t arma_H5T_NATIVE_UCHAR;
extern hid_t arma_H5T_NATIVE_CHAR;
extern hid_t arma_H5T_NATIVE_SHORT;
extern hid_t arma_H5T_NATIVE_USHORT;
extern hid_t arma_H5T_NATIVE_INT;
extern hid_t arma_H5T_NATIVE_UINT;
extern hid_t arma_H5T_NATIVE_LONG;
extern hid_t arma_H5T_NATIVE_ULONG;
extern hid_t arma_H5T_NATIVE_LLONG;
extern hid_t arma_H5T_NATIVE_ULLONG;
extern hid_t arma_H5T_NATIVE_FLOAT;
extern hid_t arma_H5T_NATIVE_DOUBLE;
}
// Lastly, we have to hijack H5open() and H5check_version(), which are called
// by some expanded macros of the other H5* functions. This means we can't
// create arma_H5open(), because we can't modify those macros. Instead, we'll
// create arma::H5open() and arma::H5check_version(), and then issue a using
// directive so that arma::H5open() and arma::H5check_version() are always
// called.
//
// There is potential danger in the use of a using directive like this, but in
// this case, I can't think of a better way to solve the problem, and I doubt
// this will cause problems in any situations that aren't truly bizarre. And
// if it does cause problems, the user can #define ARMA_DONT_USE_WRAPPER or
// #undef ARMA_USE_WRAPPER in their Armadillo configuration.
herr_t H5open();
herr_t H5check_version(unsigned majnum, unsigned minnum, unsigned relnum);
using arma::H5open;
using arma::H5check_version;
#endif
#endif