Mercurial > forge
changeset 9604:88b9ad90dba5 octave-forge
sparsersb: added an interface to rsb_get_matrix_info_from_string().
author | michelemartone |
---|---|
date | Thu, 08 Mar 2012 17:48:03 +0000 |
parents | 7e209e97b77e |
children | 4fa3d0a20d75 |
files | main/sparsersb/src/sparsersb.cc |
diffstat | 1 files changed, 25 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/main/sparsersb/src/sparsersb.cc Thu Mar 08 17:18:32 2012 +0000 +++ b/main/sparsersb/src/sparsersb.cc Thu Mar 08 17:48:03 2012 +0000 @@ -1526,7 +1526,10 @@ If @var{m} and @var{n} are integers, equivalent to @code{"RSBOI_FNS" ([], [], [], @var{m}, @var{n}, 0)}\n\ \n\ @deftypefnx {Loadable Function} {@var{s} =} "RSBOI_FNS" (\"set\", @var{opn}, @var{opv})\n\ -If @var{opn} is a string representing a valid librsb option name and @var{opv} is a string representing a valid librsb option value, the correspondent librsb option will be set.\n\ +If @var{opn} is a string representing a valid librsb option name and @var{opv} is a string representing a valid librsb option value, the correspondent librsb option will be set to that value.\n\ +\n\ +@deftypefnx {Loadable Function} {@var{s} =} "RSBOI_FNS" (@var{A}, \"get\", @var{mif})\n\ +If @var{mif} is a string specifying a valid librsb matrix info string (valid for rsb_get_matrix_info_from_string()), then the correspondent value will be returned for matrix @var{A}.\n\ \n\ @deftypefnx {Loadable Function} {@var{s} =} "RSBOI_FNS" (@var{A}, @var{S})\n\ If @var{A} is a "RSBOI_FNS" matrix and @var{S} is a string, @var{S} will be interpreted as a query string about matrix @var{A}.\n\ @@ -1560,7 +1563,7 @@ RSBOI_0_ERROR(RSBOI_0_NOCOERRMSG); #endif install_sparse_rsb(); - if( nargin == 3 && args(0).is_string() && args(0).string_value()=="set" && args(1).is_string() && args(2).is_string()) + if( nargin == 3 && args(0).is_string() && args(0).string_value()=="set" && args(1).is_string() && args(2).is_string()) { rsb_err_t errval=RSB_ERR_NO_ERROR; const char *os=args(1).string_value().c_str(); @@ -1570,6 +1573,25 @@ goto ret; } + if (nargin == 3 && args(0).type_name()==RSB_OI_TYPEINFO_STRING + && args(1).is_string() && args(1).string_value()=="get" + && args(2).is_string()) + { + /* FIXME: undocumented feature */ + rsb_err_t errval=RSB_ERR_NO_ERROR; + const char *mis=args(2).string_value().c_str(); + rsb_real_t miv=RSBOI_ZERO;/* FIXME: this is extreme danger! */ + const struct rsb_matrix_t*matrix=((octave_sparse_rsb_matrix*)(args(0).internal_rep()))->A; + if(!matrix)goto ret;/* FIXME: error handling missing here */ + errval=rsb_get_matrix_info_from_string(matrix,mis,&miv); + /* FIXME: serious error handling missing here */ + if(RSBOI_SOME_ERROR(errval)) + retval.append(std::string("Error returned from rsb_get_matrix_info_from_string()")); + else + retval.append(octave_value(miv)); + goto ret; + } + if ( nargin == 1 || nargin == 2 ) { rsb_type_t typecode=RSBOI_TYPECODE; @@ -1579,6 +1601,7 @@ #else RSBOI_0_ERROR(RSBOI_0_NOCOERRMSG); #endif + if (nargin == 2 && args(0).type_name()==RSB_OI_TYPEINFO_STRING && args(1).is_string()) { char ss[RSBOI_INFOBUF];