File: Structures-in-Oct_002dFiles.html

package info (click to toggle)
octave 7.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 130,464 kB
  • sloc: cpp: 332,823; ansic: 71,320; fortran: 20,963; objc: 8,562; sh: 8,115; yacc: 4,882; lex: 4,438; perl: 1,554; java: 1,366; awk: 1,257; makefile: 652; xml: 173
file content (132 lines) | stat: -rw-r--r-- 5,509 bytes parent folder | download
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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 6.8, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Structures in Oct-Files (GNU Octave (version 7.3.0))</title>

<meta name="description" content="Structures in Oct-Files (GNU Octave (version 7.3.0))">
<meta name="keywords" content="Structures in Oct-Files (GNU Octave (version 7.3.0))">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">

<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Oct_002dFiles.html" rel="up" title="Oct-Files">
<link href="Sparse-Matrices-in-Oct_002dFiles.html" rel="next" title="Sparse Matrices in Oct-Files">
<link href="Cell-Arrays-in-Oct_002dFiles.html" rel="prev" title="Cell Arrays in Oct-Files">
<style type="text/css">
<!--
a.copiable-anchor {visibility: hidden; text-decoration: none; line-height: 0em}
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
div.display {margin-left: 3.2em}
div.example {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}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
span:hover a.copiable-anchor {visibility: visible}
ul.no-bullet {list-style: none}
-->
</style>
<link rel="stylesheet" type="text/css" href="octave.css">


</head>

<body lang="en">
<div class="subsection" id="Structures-in-Oct_002dFiles">
<div class="header">
<p>
Next: <a href="Sparse-Matrices-in-Oct_002dFiles.html" accesskey="n" rel="next">Sparse Matrices in Oct-Files</a>, Previous: <a href="Cell-Arrays-in-Oct_002dFiles.html" accesskey="p" rel="prev">Cell Arrays in Oct-Files</a>, Up: <a href="Oct_002dFiles.html" 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" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<span id="Structures-in-Oct_002dFiles-1"></span><h4 class="subsection">A.1.5 Structures in Oct-Files</h4>

<p>A structure in Octave is a map between a number of fields represented and their
values.  The Standard Template Library <code>map</code> class is used, with the pair
consisting of a <code>std::string</code> and an Octave <code>Cell</code> variable.
</p>
<p>A simple example demonstrating the use of structures within oct-files is
</p>
<div class="example">
<pre class="verbatim">#include &lt;octave/oct.h&gt;
#include &lt;octave/ov-struct.h&gt;

DEFUN_DLD (structdemo, args, , &quot;Struct Demo&quot;)
{
  if (args.length () != 2)
    print_usage ();

  if (! args(0).isstruct ())
    error (&quot;structdemo: ARG1 must be a struct&quot;);

  octave_scalar_map arg0 = args(0).scalar_map_value ();
  //octave_map arg0 = args(0).map_value ();

  if (! args(1).is_string ())
    error (&quot;structdemo: ARG2 must be a character string&quot;);

  std::string arg1 = args(1).string_value ();

  octave_value tmp = arg0.contents (arg1);
  //octave_value tmp = arg0.contents (arg1)(0);

  if (! tmp.is_defined ())
    error (&quot;structdemo: struct does not have a field named '%s'\n&quot;,
           arg1.c_str ());

  octave_scalar_map st;

  st.assign (&quot;selected&quot;, tmp);

  return octave_value (st);
}
</pre></div>

<p>An example of its use is
</p>
<div class="example">
<pre class="example">x.a = 1; x.b = &quot;test&quot;; x.c = [1, 2];
structdemo (x, &quot;b&quot;)
&rArr; selected = test
</pre></div>

<p>The example above specifically uses the <code>octave_scalar_map</code> class which is
for representing a single struct.  For structure arrays, the <code>octave_map</code>
class is used instead.  The commented code shows how the demo could be modified
to handle a structure array.  In that case, the <code>contents</code> method returns
a <code>Cell</code> which may have more than one element.  Therefore, to obtain the
underlying <code>octave_value</code> in the single struct example we would write
</p>
<div class="example">
<pre class="example">octave_value tmp = arg0.contents (arg1)(0);
</pre></div>

<p>where the trailing <code>(0)</code> is the <code>()</code> operator on the <code>Cell</code>
object.  If this were a true structure array with multiple elements we could
iterate over the elements using the <code>()</code> operator.
</p>
<p>Structures are a relatively complex data container and there are more functions
available in <samp>oct-map.h</samp> which make coding with them easier than relying
on just <code>contents</code>.
</p>
</div>
<hr>
<div class="header">
<p>
Next: <a href="Sparse-Matrices-in-Oct_002dFiles.html">Sparse Matrices in Oct-Files</a>, Previous: <a href="Cell-Arrays-in-Oct_002dFiles.html">Cell Arrays in Oct-Files</a>, Up: <a href="Oct_002dFiles.html">Oct-Files</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>