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];