Mercurial > hg > what-is-octave
annotate FEMTEC2013/examples/myobject.cc @ 8:50abddcc3409 default tip
Presentation delivered by cdf at OctConf 2013.
author | Carlo de Falco <cdf@users.sourceforge.net> |
---|---|
date | Mon, 22 Jul 2013 21:54:27 +0200 |
parents | 60233b0075a9 |
children |
rev | line source |
---|---|
4
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
1 // Copyright (C) 2012 Carlo de Falco <carlo.defalco@gmail.com> |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
2 // |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
3 // This program is free software; you can redistribute it and/or modify it under |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
4 // the terms of the GNU General Public License as published by the Free Software |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
5 // Foundation; either version 3 of the License, or (at your option) any later |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
6 // version. |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
7 // |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
8 // This program is distributed in the hope that it will be useful, but WITHOUT |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
9 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
10 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
11 // details. |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
12 // |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
13 // You should have received a copy of the GNU General Public License along with |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
14 // this program; if not, see <http://www.gnu.org/licenses/>. |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
15 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
16 #include <octave/oct.h> |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
17 #include <myobject.h> |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
18 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
19 void load_myobject_type () |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
20 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
21 myobject::register_type (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
22 myobject_type_loaded = true; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
23 mlock (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
24 std::cout << "myobject_type_loaded" << std::endl; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
25 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
26 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
27 const std::string & myobject::get_str () const |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
28 { return str; } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
29 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
30 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
31 void myobject::set_str (std::string & _str) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
32 { str = _str; } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
33 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
34 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
35 // PKG_ADD: autoload ("myobject_get_str", "myobject.oct"); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
36 DEFUN_DLD (myobject_get_str, args, , |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
37 "get the str field") |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
38 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
39 octave_value retval; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
40 octave_idx_type nargin = args.length (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
41 if (nargin < 1 || nargin > 1) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
42 print_usage (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
43 else |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
44 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
45 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
46 if (! myobject_type_loaded) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
47 load_myobject_type (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
48 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
49 if (args(0).type_id () == myobject::static_type_id ()) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
50 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
51 const myobject & mo = static_cast<const myobject&> (args(0).get_rep ()); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
52 retval = octave_value (mo.get_str ()); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
53 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
54 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
55 return retval; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
56 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
57 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
58 // PKG_ADD: autoload ("myobject_init", "myobject.oct"); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
59 DEFUN_DLD (myobject_init, args, , "initialize a myobject") |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
60 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
61 octave_value retval = 0; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
62 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
63 octave_idx_type nargin = args.length (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
64 if (nargin != 3) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
65 print_usage (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
66 else |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
67 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
68 if (! myobject_type_loaded) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
69 load_myobject_type (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
70 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
71 std::string str = args(0).string_value (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
72 int i = args(1).int_value (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
73 double dbl = args(2).double_value (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
74 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
75 if (!error_state) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
76 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
77 retval = new myobject (str, i, dbl); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
78 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
79 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
80 return retval; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
81 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
82 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
83 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
84 // PKG_ADD: autoload ("myobject_set_str", "myobject.oct"); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
85 DEFUN_DLD (myobject_set_str, args, nargout, |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
86 "set the str field") |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
87 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
88 octave_value retval; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
89 octave_idx_type nargin = args.length (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
90 if (nargin < 2 || nargin > 2) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
91 print_usage (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
92 else |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
93 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
94 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
95 if (! myobject_type_loaded) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
96 load_myobject_type (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
97 |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
98 std::string str = args(1).string_value (); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
99 if (args(0).type_id () == myobject::static_type_id ()) |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
100 { |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
101 const myobject mo (static_cast<const myobject&> (args(0).get_rep ())); |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
102 *(mo.p_str) = str; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
103 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
104 } |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
105 return retval; |
0a1567794b40
[mq]: folder_reorganization
Carlo de Falco <cdf@users.sourceforge.net>
parents:
diff
changeset
|
106 } |