diff options
author | Xavier Delacour <xavier.delacour@gmail.com> | 2011-08-31 20:55:12 +0000 |
---|---|---|
committer | Xavier Delacour <xavier.delacour@gmail.com> | 2011-08-31 20:55:12 +0000 |
commit | 458dfd497bbda565f413bc5a6b27654f66ab379a (patch) | |
tree | c9dff800bf06734f0772a9a8930a639aff669aae /Doc | |
parent | 2f68aa0a34bb365058b3e115f8935966aa126a2b (diff) | |
download | swig-458dfd497bbda565f413bc5a6b27654f66ab379a.tar.gz |
Updated bits of the documentation, mostly about the Octave-specific command-line arguments and the module command-line arguments that were added in swig 2.0.4, and the new module-loading behaviour. Also changed example_wrap.cxx to example_wrap.cpp, since mkoctfile doesn't recognise .cxx as a C++ extension. (thanks to Karl Wette)
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@12795 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/Manual/Octave.html | 110 |
1 files changed, 87 insertions, 23 deletions
diff --git a/Doc/Manual/Octave.html b/Doc/Manual/Octave.html index 3c08d849b..fabc7b0c4 100644 --- a/Doc/Manual/Octave.html +++ b/Doc/Manual/Octave.html @@ -15,6 +15,7 @@ <li><a href="#Octave_nn2">Preliminaries</a> <li><a href="#Octave_nn3">Running SWIG</a> <ul> +<li><a href="#Octave_nn4">Command-line options</a> <li><a href="#Octave_nn5">Compiling a dynamic module</a> <li><a href="#Octave_nn6">Using your module</a> </ul> @@ -61,6 +62,10 @@ Also, there are a dozen or so examples in the Examples/octave directory, and hun The SWIG implemention was first based on Octave 2.9.12, so this is the minimum version required. Testing has only been done on Linux. </p> +<p> +As of SWIG 2.0.5, the Octave module should work with Octave versions 3.0.5, 3.2.4, and 3.4.0. +</p> + <H2><a name="Octave_nn3"></a>29.2 Running SWIG</H2> @@ -80,24 +85,43 @@ extern double Foo; </pre></div> To build an Octave module when wrapping C code, run SWIG using the <tt>-octave</tt> option: </p> -<div class="shell"><pre>$ swig -octave example.i </pre></div> +<div class="shell"><pre>$ swig -octave -o example_wrap.cpp example.i </pre></div> <p> The <tt>-c++</tt> option is also required when wrapping C++ code: </p> -<div class="shell"><pre>$ swig -octave -c++ example.i </pre></div> +<div class="shell"><pre>$ swig -octave -c++ -o example_wrap.cpp example.i </pre></div> + +<p> +This creates a C++ source file <tt>example_wrap.cpp</tt>. A C++ file is generated even when wrapping C code as Octave is itself written in C++ and requires wrapper code to be in the same language. The generated C++ source file contains the low-level wrappers that need to be compiled and linked with the rest of your C/C++ application (in this case, the gcd implementation) to create an extension module. +</p> + +<H3><a name="Octave_nn4"></a>29.2.1 Command-line options</H3> <p> -This creates a C++ source file <tt>example_wrap.cxx</tt>. A C++ file is generated even when wrapping C code as Octave is itself written in C++ and requires wrapper code to be in the same language. The generated C++ source file contains the low-level wrappers that need to be compiled and linked with the rest of your C/C++ application (in this case, the gcd implementation) to create an extension module. +The swig command line has a number of options you can use, like to redirect its output. Use <tt>swig -help</tt> to learn about these. +Options specific to the Octave module are: </p> +<div class="shell"> +<pre>$ swig -octave -help +... +Octave Options (available with -octave) + -global - Load all symbols into the global namespace [default] + -globals <em>name</em> - Set <em>name</em> used to access C global variables [default: 'cvar'] + -noglobal - Do not load all symbols into the global namespace + -opprefix <em>str</em> - Prefix <em>str</em> for global operator functions [default: 'op_'] +</pre></div> + <p> -The swig command line has a number of options you can use, like to redirect it's output. Use <tt>swig --help</tt> to learn about these. +The <em>-global</em> and <em>-noglobal</em> options determine whether the Octave module will load all symbols into the global namespace in addition to the global namespace. +The <em>-globals</em> option sets the name of the variable which is the namespace for C global variables exported by the module. +The <em>-opprefix</em> options sets the prefix of the names of global/friend <a href="#Octave_nn18">operator</a> functions. </p> -<H3><a name="Octave_nn5"></a>29.2.1 Compiling a dynamic module</H3> +<H3><a name="Octave_nn5"></a>29.2.2 Compiling a dynamic module</H3> <p> @@ -106,8 +130,8 @@ Building an oct file is usually done with the mkoctfile command (either within O </p> <div class="shell"><pre> -$ swig -octave -c++ example.i -o example_wrap.cxx -$ mkoctfile example_wrap.cxx example.c +$ swig -octave -c++ -o example_wrap.cpp example.i +$ mkoctfile example_wrap.cpp example.c </pre></div> <p> @@ -124,7 +148,7 @@ $ mkoctfile example_wrap.cxx example.c <div class="targetlang"><pre>octave:1> example</pre></div> -<H3><a name="Octave_nn6"></a>29.2.2 Using your module</H3> +<H3><a name="Octave_nn6"></a>29.2.3 Using your module</H3> <p> @@ -157,34 +181,70 @@ When Octave is asked to invoke <tt>example</tt>, it will try to find the .m or . </p> <p> -Giving this function a parameter "global" will cause it to load all symbols into the global namespace in addition to the <tt>example</tt> namespace. For example: +An Octave module takes three options, <em>-global</em>, <em>-noglobal</em>, and <em>-globals</em>, which behave the same as the corresponding swig <a href="#Octave_nn4">command-line options</a>. +Here are some example usages: </p> - <div class="targetlang"><pre>$ octave -q -octave:1> example("global") -octave:2> gcd(4,6) + <div class="targetlang"><pre> +octave:1> example -help +usage: example [-global|-noglobal] [-globals <name>] +octave:2> example -global +octave:3> gcd(4,6) ans = 2 +octave:4> cvar.Foo +ans = 3 +octave:5> cvar.Foo=4; +octave:6> cvar.Foo +ans = 4 +</pre></div> +<br> + <div class="targetlang"><pre> +octave:1> example -noglobal +octave:2> gcd(6,9) +ans = 3 octave:3> cvar.Foo +error: `cvar' undefined near line 3 column 1 +octave:3> example.cvar.Foo +ans = 3 +</pre></div> +<br> + <div class="targetlang"><pre> +octave:1> example -globals mycvar +octave:2> cvar.Foo +error: `cvar' undefined near line 2 column 1 +octave:2> mycvar.Foo ans = 3 -octave:4> cvar.Foo=4; -octave:5> cvar.Foo -ans = 4 </pre></div> + <p> - It is also possible to rename the module namespace with an assignment, as in: <br> - <div class="targetlang"><pre>octave:1> example; + It is also possible to rename the module / global variables namespaces with an assignment, as in: <br> + <div class="targetlang"><pre> +octave:1> example octave:2> c=example; octave:3> c.gcd(10,4) -ans = 2 </pre></div> +ans = 2 +octave:4> some_vars = cvar; +octave:5> some_vars.Foo +ans = 3 +</pre></div> <p> -All global variables are put into the cvar namespace object. This is accessible either as <tt>my_module.cvar</tt>, or just <tt>cvar</tt> (if the module is imported into the global namespace). -</p> -<p> -One can also rename it by simple assignment, e.g., +Modules can also be loaded from within functions, even before being loaded in the base context. +If the module is also used in the base context, however, it must first be loaded again: </p> + <div class="targetlang"><pre> -octave:1> some_vars = cvar; +octave:1> function l = my_lcm(a,b) +> example +> l = abs(a*b)/example.gcd(a,b); +> endfunction +octave:2> my_lcm(4,6) +ans = 12 +octave:3> example.gcd(4,6) +error: can't perform indexing operations for <unknown type> type +octave:3> example; +octave:4> example.gcd(4,6) +ans = 2 </pre></div> <H3><a name="Octave_nn9"></a>29.3.2 Functions</H3> @@ -580,6 +640,10 @@ On the C++ side, the default mappings are as follows: %rename(__brace) *::operator[]; </pre></div> +<p> +Octave can also utilise friend (i.e. non-member) operators with a simple %rename: see the example in the Examples/octave/operator directory. +</p> + <H3><a name="Octave_nn19"></a>29.3.10 Class extension with %extend</H3> |