236 lines
7.1 KiB
C++
236 lines
7.1 KiB
C++
/* Published header for libmat, the mat library.
|
|
Copyright 1984-2018 The MathWorks, Inc.
|
|
This file containes types, macros, and declarations necessary to
|
|
interface MEX files with the current version of MATLAB.
|
|
|
|
See the release notes for information on supporting earlier versions. */
|
|
|
|
#ifndef mat_h
|
|
#define mat_h
|
|
|
|
#include "matrix.h"
|
|
|
|
#if defined(TARGET_API_VERSION)
|
|
#if !(TARGET_API_VERSION == 700 || TARGET_API_VERSION == 800)
|
|
#error invalid TARGET_VERSION_API definition
|
|
#elif defined(MEX_DOUBLE_HANDLE) && TARGET_API_VERSION != 700
|
|
#error It is illegal to use MEX_DOUBLE_HANDLE with linear versioning
|
|
#elif defined(MX_COMPAT_32) && TARGET_API_VERSION != 700
|
|
#error It is illegal to use MX_COMPAT_32 with linear versioning
|
|
#endif
|
|
#endif
|
|
|
|
|
|
#if TARGET_API_VERSION == 800
|
|
|
|
#define matOpen matOpen_800
|
|
#define matClose matClose_800
|
|
#define matGetFp matGetFp_800
|
|
#define matPutVariable matPutVariable_800
|
|
#define matPutVariableAsGlobal matPutVariableAsGlobal_800
|
|
#define matGetVariable matGetVariable_800
|
|
#define matGetNextVariable matGetNextVariable_800
|
|
#define matGetNextVariableInfo matGetNextVariableInfo_800
|
|
#define matGetVariableInfo matGetVariableInfo_800
|
|
#define matDeleteVariable matDeleteVariable_800
|
|
#define matGetDir matGetDir_800
|
|
#define matGetErrno matGetErrno_800
|
|
|
|
#endif /* TARGET_API_VERSION */
|
|
/*
|
|
* Copyright 1984-2018 The MathWorks, Inc.
|
|
* All Rights Reserved.
|
|
*/
|
|
|
|
#if defined(_MSC_VER)
|
|
# pragma once
|
|
#endif
|
|
#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3))
|
|
# pragma once
|
|
#endif
|
|
|
|
#ifdef mat_core_api_h
|
|
#error the published and developer mat APIs cannot be combined
|
|
#endif
|
|
|
|
#ifndef mat_published_c_api_h
|
|
#define mat_published_c_api_h
|
|
|
|
#ifndef EXTERN_C
|
|
# ifdef __cplusplus
|
|
# define EXTERN_C extern "C"
|
|
# else
|
|
# define EXTERN_C extern
|
|
# endif
|
|
#endif
|
|
|
|
#ifndef LIBMAT_API
|
|
# define LIBMAT_API
|
|
#endif
|
|
|
|
#include <stdio.h> /* for FILE */
|
|
|
|
#include "matrix.h" /* for mxArray */
|
|
|
|
/**
|
|
* \file
|
|
* \ingroup mat_pub_C_api
|
|
*/
|
|
|
|
|
|
/* incomplete typedef for MATFile */
|
|
#ifdef __cplusplus
|
|
class MATFile;
|
|
#else
|
|
typedef struct MatFile_tag MATFile;
|
|
#endif
|
|
|
|
#ifndef LIBMAT_API_OFFERS_ERROR_ENUMS
|
|
typedef int matError;
|
|
#endif
|
|
|
|
/*
|
|
* Open a MAT-file "filename" using mode "mode". Return
|
|
* a pointer to a MATFile for use with other MAT API functions.
|
|
*
|
|
* Current valid entries for "mode" are
|
|
* "r" == read only.
|
|
* "w" == write only (deletes any existing file with name <filename>).
|
|
* "w4" == as "w", but create a MATLAB 4.0 MAT-file.
|
|
* "w7.3" == as "w", but create a MATLAB 7.3 MAT-file.
|
|
* "u" == update. Read and write allowed, existing file is not deleted.
|
|
*
|
|
* Return NULL if an error occurs.
|
|
*/
|
|
EXTERN_C LIBMAT_API MATFile* matOpen(const char *filename, const char * mode);
|
|
|
|
|
|
/*
|
|
* Close a MAT-file opened with matOpen.
|
|
* The pointer-to-MATfile argument is invalid, once matClose returns.
|
|
* Return zero for success, EOF on error.
|
|
*/
|
|
EXTERN_C LIBMAT_API matError matClose(MATFile *pMF);
|
|
|
|
/*
|
|
* Return zero if MATFile is successfully openedno error, nonzero value otherwise.
|
|
*/
|
|
EXTERN_C LIBMAT_API matError matGetErrno(MATFile *pMF);
|
|
|
|
|
|
/*
|
|
* Return the ANSI C FILE pointer obtained when the MAT-file was opened.
|
|
* Warning: the FILE pointer may be NULL in the case of a MAT file format
|
|
* that does not allow access to the raw file pointer.
|
|
*/
|
|
EXTERN_C LIBMAT_API FILE * matGetFp(MATFile *pMF);
|
|
|
|
|
|
/*
|
|
* Write array value with the specified name to the MAT-file, deleting any
|
|
* previously existing variable with that name in the MAT-file.
|
|
*
|
|
* Return zero for success, nonzero for error.
|
|
*/
|
|
EXTERN_C LIBMAT_API matError matPutVariable(MATFile * pMF, const char * name, const mxArray * pA);
|
|
|
|
|
|
/*
|
|
* Write array value with the specified name to the MAT-file pMF, deleting any
|
|
* previously existing variable in the MAT-file with the same name.
|
|
*
|
|
* The variable will be written such that when the MATLAB LOAD command
|
|
* loads the variable, it will automatically place it in the
|
|
* global workspace and establish a link to it in the local
|
|
* workspace (as if the command "global <varname>" had been
|
|
* issued after the variable was loaded.)
|
|
*
|
|
* Return zero for success, nonzero for error.
|
|
*/
|
|
EXTERN_C LIBMAT_API matError matPutVariableAsGlobal(MATFile * pMF, const char * name, const mxArray * pA);
|
|
|
|
|
|
/*
|
|
* Read the array value for the specified variable name from a MAT-file.
|
|
*
|
|
* Return NULL if an error occurs.
|
|
*/
|
|
EXTERN_C LIBMAT_API mxArray * matGetVariable(MATFile * pMF, const char * name);
|
|
|
|
|
|
/*
|
|
* Read the next array value from the current file location of the MAT-file
|
|
* pMF. This function should only be used in conjunction with
|
|
* matOpen and matClose. Passing pMF to any other API functions
|
|
* will cause matGetNextVariable() to work incorrectly.
|
|
*
|
|
* Return NULL if an error occurs.
|
|
*/
|
|
EXTERN_C LIBMAT_API mxArray * matGetNextVariable(MATFile *pMF, const char **nameptr);
|
|
|
|
|
|
/*
|
|
* Read the array header of the next array value in a MAT-file.
|
|
* This function should only be used in conjunction with
|
|
* matOpen and matClose. Passing pMF to any other API functions
|
|
* will cause matGetNextVariableInfo to work incorrectly.
|
|
*
|
|
* See the description of matGetVariableInfo() for the definition
|
|
* and valid uses of an array header.
|
|
*
|
|
* Return NULL if an error occurs.
|
|
*/
|
|
EXTERN_C LIBMAT_API mxArray * matGetNextVariableInfo(MATFile *pMF, const char **nameptr);
|
|
|
|
|
|
/*
|
|
* Read the array header for the variable with the specified name from
|
|
* the MAT-file.
|
|
*
|
|
* An array header contains all the same information as an
|
|
* array, except that the pr, pi, ir, and jc data structures are
|
|
* not allocated for non-recursive data types. That is,
|
|
* Cells, structures, and objects contain pointers to other
|
|
* array headers, but numeric, string, and sparse arrays do not
|
|
* contain valid data in their pr, pi, ir, or jc fields.
|
|
*
|
|
* The purpose of an array header is to gain fast access to
|
|
* information about an array without reading all the array's
|
|
* actual data. Thus, functions such as mxGetM, mxGetN, and mxGetClassID
|
|
* can be used with array headers, but mxGetPr, mxGetPi, mxGetIr, mxGetJc,
|
|
* mxSetPr, mxSetPi, mxSetIr, and mxSetJc cannot.
|
|
*
|
|
* An array header should NEVER be returned to MATLAB (for example via the
|
|
* MEX API), or any other non-matrix access API function that expects a
|
|
* full mxArray (examples include engPutVariable(), matPutVariable(), and
|
|
* mexPutVariable()).
|
|
*
|
|
* Return NULL if an error occurs.
|
|
*/
|
|
EXTERN_C LIBMAT_API mxArray * matGetVariableInfo(MATFile *pMF, const char * name);
|
|
|
|
|
|
/*
|
|
* Remove a variable with with the specified name from the MAT-file pMF.
|
|
*
|
|
* Return zero on success, non-zero on error.
|
|
*/
|
|
EXTERN_C LIBMAT_API matError matDeleteVariable(MATFile *pMF, const char *name);
|
|
|
|
|
|
/*
|
|
* Get a list of the names of the arrays in a MAT-file.
|
|
* The array of strings returned by this function contains "num"
|
|
* entries. It is allocated with one call to mxCalloc, and so
|
|
* can (must) be freed with one call to mxFree.
|
|
*
|
|
* If there are no arrays in the MAT-file, return value
|
|
* is NULL and num is set to zero. If an error occurs,
|
|
* return value is NULL and num is set to a negative number.
|
|
*/
|
|
EXTERN_C LIBMAT_API char ** matGetDir(MATFile * pMF, int *num);
|
|
|
|
#endif /* mat_published_c_api_h */
|
|
|
|
#endif /* mat_h */
|