File: Input-Parameter-Checking-in-Oct_002dFiles.html

package info (click to toggle)
octave 3.8.2-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 84,396 kB
  • ctags: 45,547
  • sloc: cpp: 293,356; ansic: 42,041; fortran: 23,669; sh: 13,629; objc: 7,890; yacc: 7,093; lex: 3,442; java: 2,125; makefile: 1,589; perl: 1,009; awk: 974; xml: 34
file content (135 lines) | stat: -rw-r--r-- 6,641 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Octave: Input Parameter Checking in Oct-Files</title>

<meta name="description" content="GNU Octave: Input Parameter Checking in Oct-Files">
<meta name="keywords" content="GNU Octave: Input Parameter Checking in Oct-Files">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Oct_002dFiles.html#Oct_002dFiles" rel="up" title="Oct-Files">
<link href="Exception-and-Error-Handling-in-Oct_002dFiles.html#Exception-and-Error-Handling-in-Oct_002dFiles" rel="next" title="Exception and Error Handling in Oct-Files">
<link href="Allocating-Local-Memory-in-Oct_002dFiles.html#Allocating-Local-Memory-in-Oct_002dFiles" rel="prev" title="Allocating Local Memory in Oct-Files">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Input-Parameter-Checking-in-Oct_002dFiles"></a>
<div class="header">
<p>
Next: <a href="Exception-and-Error-Handling-in-Oct_002dFiles.html#Exception-and-Error-Handling-in-Oct_002dFiles" accesskey="n" rel="next">Exception and Error Handling in Oct-Files</a>, Previous: <a href="Allocating-Local-Memory-in-Oct_002dFiles.html#Allocating-Local-Memory-in-Oct_002dFiles" accesskey="p" rel="prev">Allocating Local Memory in Oct-Files</a>, Up: <a href="Oct_002dFiles.html#Oct_002dFiles" accesskey="u" rel="up">Oct-Files</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Input-Parameter-Checking-in-Oct_002dFiles-1"></a>
<h4 class="subsection">A.1.11 Input Parameter Checking in Oct-Files</h4>

<p>As 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.
</p>
<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, 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.
</p>
<p>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 <code>is_real_matrix</code>, <code>is_numeric_type</code>, etc.
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.
</p>
<div class="example">
<pre class="verbatim">#include &lt;octave/oct.h&gt;

DEFUN_DLD (paramdemo, args, nargout, &quot;Parameter Check Demo&quot;)
{
  octave_value retval;
  int nargin = args.length ();

  if (nargin != 1)
    print_usage ();
  else if (nargout != 0)
    error (&quot;paramdemo: OUTPUT argument required&quot;);
  else
    {
      NDArray m = args(0).array_value ();
      double min_val = -10.0;
      double max_val = 10.0;
      octave_stdout &lt;&lt; &quot;Properties of input array:\n&quot;;
      if (m.any_element_is_negative ())
        octave_stdout &lt;&lt; &quot;  includes negative values\n&quot;;
      if (m.any_element_is_inf_or_nan ())
        octave_stdout &lt;&lt; &quot;  includes Inf or NaN values\n&quot;;
      if (m.any_element_not_one_or_zero ())
        octave_stdout &lt;&lt; &quot;  includes other values than 1 and 0\n&quot;;
      if (m.all_elements_are_int_or_inf_or_nan ())
        octave_stdout &lt;&lt; &quot;  includes only int, Inf or NaN values\n&quot;;
      if (m.all_integers (min_val, max_val))
        octave_stdout &lt;&lt; &quot;  includes only integers in [-10,10]\n&quot;;
    }
  return retval;
}
</pre><pre class="example">
</pre></div>

<p>An example of its use is:
</p>
<div class="example">
<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></div>

<hr>
<div class="header">
<p>
Next: <a href="Exception-and-Error-Handling-in-Oct_002dFiles.html#Exception-and-Error-Handling-in-Oct_002dFiles" accesskey="n" rel="next">Exception and Error Handling in Oct-Files</a>, Previous: <a href="Allocating-Local-Memory-in-Oct_002dFiles.html#Allocating-Local-Memory-in-Oct_002dFiles" accesskey="p" rel="prev">Allocating Local Memory in Oct-Files</a>, Up: <a href="Oct_002dFiles.html#Oct_002dFiles" accesskey="u" rel="up">Oct-Files</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>