135 lines
5.6 KiB
C++
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
|