Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 3e60ff9d4d6f58c8fbd17208f14089fa > files > 237

octave-doc-3.2.3-3mdv2010.0.i586.rpm

<html lang="en">
<head>
<title>Input Parameter Checking in Oct-Files - Untitled</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Untitled">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Oct_002dFiles.html#Oct_002dFiles" title="Oct-Files">
<link rel="prev" href="Allocating-Local-Memory-in-Oct_002dFiles.html#Allocating-Local-Memory-in-Oct_002dFiles" title="Allocating Local Memory in Oct-Files">
<link rel="next" href="Exception-and-Error-Handling-in-Oct_002dFiles.html#Exception-and-Error-Handling-in-Oct_002dFiles" title="Exception and Error Handling in Oct-Files">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
</head>
<body>
<div class="node">
<a name="Input-Parameter-Checking-in-Oct-Files"></a>
<a name="Input-Parameter-Checking-in-Oct_002dFiles"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Exception-and-Error-Handling-in-Oct_002dFiles.html#Exception-and-Error-Handling-in-Oct_002dFiles">Exception and Error Handling in Oct-Files</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Allocating-Local-Memory-in-Oct_002dFiles.html#Allocating-Local-Memory-in-Oct_002dFiles">Allocating Local Memory in Oct-Files</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Oct_002dFiles.html#Oct_002dFiles">Oct-Files</a>
<hr>
</div>

<h4 class="subsection">A.1.11 Input Parameter Checking in Oct-Files</h4>

<p>As oct-files are compiled functions they have the possibility of causing
Octave to abort abnormally.  It is therefore important that
each and every function has the minimum of parameter
checking needed to ensure that Octave behaves well.

   <p>The minimum requirement, as previously discussed, is to check the number
of input arguments before using them to avoid referencing a non existent
argument.  However, it some case this might not be sufficient as the
underlying code imposes further constraints.  For example an external
function call might be undefined if the input arguments are not
integers, or if one of the arguments is zero.  Therefore, oct-files often
need additional input parameter checking.

   <p>There are several functions within Octave that might be useful for the
purposes of parameter checking.  These include the methods of the
octave_value class like <code>is_real_matrix</code>, etc., but equally include
more specialized functions.  Some of the more common ones are
demonstrated in the following example

<pre class="example"><pre class="verbatim">     #include &lt;octave/oct.h>
     
     DEFUN_DLD (paramdemo, args, nargout, 
     	   "Parameter Check Demo.")
     {
       int nargin = args.length ();
       octave_value retval;
     
       if (nargin != 1)
         print_usage();
       else if (nargout != 0)
         error ("paramdemo: function has no output arguments");
       else
         {
           NDArray m = args(0).array_value();
           double min_val = -10.0;
           double max_val = 10.0;
           octave_stdout &lt;&lt; "Properties of input array:\n";
           if (m.any_element_is_negative ())
             octave_stdout &lt;&lt; "  includes negative values\n";
           if (m.any_element_is_inf_or_nan())
             octave_stdout &lt;&lt; "  includes Inf or NaN values\n";
           if (m.any_element_not_one_or_zero())
             octave_stdout &lt;&lt; 
     	  "  includes other values than 1 and 0\n";
           if (m.all_elements_are_int_or_inf_or_nan())
             octave_stdout &lt;&lt; 
     	  "  includes only int, Inf or NaN values\n";
           if (m.all_integers (min_val, max_val))
             octave_stdout &lt;&lt; 
     	  "  includes only integers in [-10,10]\n";
         }
       return retval;
     }
</pre></pre>
   <p class="noindent">and an example of its use is

<pre class="example">     paramdemo ([1, 2, NaN, Inf])
     &rArr; Properties of input array:
           includes Inf or NaN values
           includes other values than 1 and 0
           includes only int, Inf or NaN values
</pre>
   </body></html>