(octave.info)Input Parameter Checking in Oct-Files


Next: Exception and Error Handling in Oct-Files Prev: Allocating Local Memory in Oct-Files Up: Oct-Files
Enter node , (file) or (file)node

A.1.11 Input Parameter Checking in Oct-Files
--------------------------------------------

Because oct-files are compiled functions they open up the possibility of
crashing Octave through careless function calls or memory faults.  It is
quite important that each and every function have a sufficient level of
parameter checking to ensure that Octave behaves well.

   The minimum requirement, as previously discussed, is to check the
number of input arguments before using them to avoid referencing a
nonexistent argument.  However, in some cases 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, or if
the input is complex and a real value was expected.  Therefore,
oct-files often need additional input parameter checking.

   There are several functions within Octave that can be useful for the
purposes of parameter checking.  These include the methods of the
‘octave_value’ class like ‘is_real_matrix’, ‘is_numeric_type’, etc.
(see ‘ov.h’).  Often, with a knowledge of the Octave m-file language,
you can guess at what the corresponding C++ routine will.  In addition
there are some more specialized input validation functions of which a
few are demonstrated below.

     #include <octave/oct.h>
     
     DEFUN_DLD (paramdemo, args, nargout, "Parameter Check Demo")
     {
       if (args.length () != 1)
         print_usage ();
     
       NDArray m = args(0).array_value ();
     
       double min_val = -10.0;
       double max_val = 10.0;
     
       octave_stdout << "Properties of input array:\n";
     
       if (m.any_element_is_negative ())
         octave_stdout << "  includes negative values\n";
     
       if (m.any_element_is_inf_or_nan ())
         octave_stdout << "  includes Inf or NaN values\n";
     
       if (m.any_element_not_one_or_zero ())
         octave_stdout << "  includes other values than 1 and 0\n";
     
       if (m.all_elements_are_int_or_inf_or_nan ())
         octave_stdout << "  includes only int, Inf or NaN values\n";
     
       if (m.all_integers (min_val, max_val))
         octave_stdout << "  includes only integers in [-10,10]\n";
     
       return octave_value_list ();
     }

An example of its use is:

     paramdemo ([1, 2, NaN, Inf])
     ⇒ Properties of input array:
          includes Inf or NaN values
          includes other values than 1 and 0
          includes only int, Inf or NaN values


automatically generated by info2www version 1.2.2.9