From 03ff113ac48f21956247b164a83000b5f6ab311d Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 25 Sep 2018 18:24:57 +0200 Subject: Add support for checking features at run-time --- matlab/mex/astra_mex_c.cpp | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'matlab/mex') diff --git a/matlab/mex/astra_mex_c.cpp b/matlab/mex/astra_mex_c.cpp index f494ce6..43c438e 100644 --- a/matlab/mex/astra_mex_c.cpp +++ b/matlab/mex/astra_mex_c.cpp @@ -35,6 +35,7 @@ along with the ASTRA Toolbox. If not, see . #include "mexInitFunctions.h" #include "astra/Globals.h" +#include "astra/Features.h" #include "astra/AstraObjectManager.h" #ifdef ASTRA_CUDA @@ -132,6 +133,7 @@ void astra_mex_set_gpu_index(int nlhs, mxArray* plhs[], int nrhs, const mxArray* #endif } +//----------------------------------------------------------------------------------------- /** get_gpu_info = astra_mex('get_gpu_info'); * * Get GPU info @@ -148,6 +150,38 @@ void astra_mex_get_gpu_info(int nlhs, mxArray* plhs[], int nrhs, const mxArray* } +//----------------------------------------------------------------------------------------- +/** has_feature = astra_mex('has_feature'); + * + * Check a feature flag. See include/astra/Features.h. + */ +void astra_mex_has_feature(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) +{ + if (2 > nrhs) { + mexErrMsgTxt("Usage: astra_mex('has_feature', feature);\n"); + return; + } + + string sMode = mexToString(prhs[0]); + bool ret = false; + + // NB: When adding features here, also document them centrally in + // include/astra/Features.h + if (sMode == "mex_link") { +#ifdef USE_MATLAB_UNDOCUMENTED + ret = true; +#else + ret = false; +#endif + } else { + ret = astra::hasFeature(sMode); + } + + plhs[0] = mxCreateDoubleScalar(ret ? 1 : 0); +} + + + //----------------------------------------------------------------------------------------- /** version_number = astra_mex('version'); * @@ -208,7 +242,7 @@ void astra_mex_delete(int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[] static void printHelp() { mexPrintf("Please specify a mode of operation.\n"); - mexPrintf(" Valid modes: version, use_cuda, credits, set_gpu_index, info, delete\n"); + mexPrintf(" Valid modes: version, use_cuda, credits, set_gpu_index, has_feature, info, delete\n"); } //----------------------------------------------------------------------------------------- @@ -241,6 +275,8 @@ void mexFunction(int nlhs, mxArray* plhs[], astra_mex_set_gpu_index(nlhs, plhs, nrhs, prhs); } else if (sMode == std::string("get_gpu_info")) { astra_mex_get_gpu_info(nlhs, plhs, nrhs, prhs); + } else if (sMode == std::string("has_feature")) { + astra_mex_has_feature(nlhs, plhs, nrhs, prhs); } else if (sMode == std::string("info")) { astra_mex_info(nlhs, plhs, nrhs, prhs); } else if (sMode == std::string("delete")) { -- cgit v1.2.3