File: Structures-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 (154 lines) | stat: -rw-r--r-- 6,399 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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<!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: Structures in Oct-Files</title>

<meta name="description" content="GNU Octave: Structures in Oct-Files">
<meta name="keywords" content="GNU Octave: Structures 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="Sparse-Matrices-in-Oct_002dFiles.html#Sparse-Matrices-in-Oct_002dFiles" rel="next" title="Sparse Matrices in Oct-Files">
<link href="Cell-Arrays-in-Oct_002dFiles.html#Cell-Arrays-in-Oct_002dFiles" rel="prev" title="Cell Arrays 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="Structures-in-Oct_002dFiles"></a>
<div class="header">
<p>
Next: <a href="Sparse-Matrices-in-Oct_002dFiles.html#Sparse-Matrices-in-Oct_002dFiles" accesskey="n" rel="next">Sparse Matrices in Oct-Files</a>, Previous: <a href="Cell-Arrays-in-Oct_002dFiles.html#Cell-Arrays-in-Oct_002dFiles" accesskey="p" rel="prev">Cell Arrays 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="Structures-in-Oct_002dFiles-1"></a>
<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;)
{
  octave_value retval;
  int nargin = args.length ();

  if (args.length () == 2)
    {
      octave_scalar_map arg0 = args(0).scalar_map_value ();
      //octave_map arg0 = args(0).map_value ();

      if (! error_state)
        {
          std::string arg1 = args(1).string_value ();

          if (! error_state)
            {
              octave_value tmp = arg0.contents (arg1);
              //octave_value tmp = arg0.contents (arg1)(0);

              if (tmp.is_defined ())
                {
                  octave_scalar_map st;

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

                  retval = octave_value (st);
                }
              else
                error (&quot;structdemo: struct does not have a field named '%s'\n&quot;,
                       arg1.c_str ());
            }
          else
            error (&quot;structdemo: ARG2 must be a character string&quot;);
        }
      else
        error (&quot;structdemo: ARG1 must be a struct&quot;);
    }
  else
    print_usage ();

  return retval;
}
</pre><pre class="example">
</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
this single-struct example we write
</p>
<div class="example">
<pre class="example">octave_value tmp = arg0.contents (arg1)(0);
</pre></div>

<p>where the trailing (0) is the () 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 () 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>
<hr>
<div class="header">
<p>
Next: <a href="Sparse-Matrices-in-Oct_002dFiles.html#Sparse-Matrices-in-Oct_002dFiles" accesskey="n" rel="next">Sparse Matrices in Oct-Files</a>, Previous: <a href="Cell-Arrays-in-Oct_002dFiles.html#Cell-Arrays-in-Oct_002dFiles" accesskey="p" rel="prev">Cell Arrays 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>