annotate libinterp/corefcn/dynamic-ld.cc @ 23627:0a6e87804cab

don't use singleton pattern for dynamic_loader class * dynamic-ld.h, dynamic-ld.cc (dynamic_loader): Don't use singleton. Use Octave coding standard for member names. Change all uses. * interpreter.h, interpreter.cc (interpreter::m_dynamic_loader): New data member. (interpreter::get_dynamic_loader): New access function. * interpreter-private.h interpreter-private.cc (__get_dynamic_loader__): New function.
author John W. Eaton <jwe@octave.org>
date Fri, 16 Jun 2017 14:42:35 -0400
parents 5cb3a2bb5e1e
children ccf3c11aab06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2
23219
3ac9f9ecfae5 maint: Update copyright dates.
John W. Eaton <jwe@octave.org>
parents: 23083
diff changeset
3 Copyright (C) 1993-2017 John W. Eaton
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
4
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
5 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
6
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
8 under the terms of the GNU General Public License as published by
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
9 the Free Software Foundation; either version 3 of the License, or
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
10 (at your option) any later version.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
11
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
12 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22407
diff changeset
15 GNU General Public License for more details.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
16
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6323
diff changeset
18 along with Octave; see the file COPYING. If not, see
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 6323
diff changeset
19 <http://www.gnu.org/licenses/>.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
20
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
21 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
22
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21301
diff changeset
23 #if defined (HAVE_CONFIG_H)
21301
40de9f8f23a6 Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents: 21200
diff changeset
24 # include "config.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
25 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
26
8950
d865363208d6 include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
27 #include <iostream>
4219
23d06c9e1edd [project @ 2002-12-06 21:29:17 by jwe]
jwe
parents: 4009
diff changeset
28 #include <list>
23d06c9e1edd [project @ 2002-12-06 21:29:17 by jwe]
jwe
parents: 4009
diff changeset
29
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
30 #include "file-stat.h"
6323
ea65de49e18e [project @ 2007-02-17 02:51:02 by jwe]
jwe
parents: 6221
diff changeset
31 #include "oct-env.h"
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
32 #include "oct-time.h"
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
33 #include "singleton-cleanup.h"
707
d7c4962ec7a0 [project @ 1994-09-16 13:50:20 by jwe]
jwe
parents: 527
diff changeset
34
23466
5da300c55e89 use "" instead of <> for including defaults.h and version.h
John W. Eaton <jwe@octave.org>
parents: 23457
diff changeset
35 #include "defaults.h"
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
36 #include "defun.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
37 #include "dynamic-ld.h"
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23554
diff changeset
38 #include "interpreter-private.h"
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
39 #include "interpreter.h"
7336
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
40 #include "ov-fcn.h"
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
41 #include "ov-dld-fcn.h"
745a8299c2b5 [project @ 2007-12-28 20:56:55 by jwe]
jwe
parents: 7017
diff changeset
42 #include "ov-mex-fcn.h"
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
43 #include "parse.h"
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
44 #include "unwind-prot.h"
1352
19c10b8657d5 [project @ 1995-09-05 08:11:57 by jwe]
jwe
parents: 1315
diff changeset
45 #include "utils.h"
707
d7c4962ec7a0 [project @ 1994-09-16 13:50:20 by jwe]
jwe
parents: 527
diff changeset
46 #include "variables.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
47
5864
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
48 #define STRINGIFY(s) STRINGIFY1(s)
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
49 #define STRINGIFY1(s) #s
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
50
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
51 namespace octave
1664
913a157f1e02 [project @ 1995-12-24 07:00:22 by jwe]
jwe
parents: 1488
diff changeset
52 {
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
53 void
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
54 dynamic_loader::shlibs_list::append (const dynamic_library& shl)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
55 {
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
56 m_lib_list.push_back (shl);
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
57 }
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
58
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
59 std::list<std::string>
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
60 dynamic_loader::shlibs_list::remove (dynamic_library& shl)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
61 {
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
62 std::list<std::string> removed_fcns;
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
63
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
64 for (iterator p = m_lib_list.begin (); p != m_lib_list.end (); p++)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
65 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
66 if (*p == shl)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
67 {
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
68 m_lib_list.erase (p);
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
69
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
70 removed_fcns = shl.close ();
2894
f1c5f8151397 [project @ 1997-04-28 05:39:26 by jwe]
jwe
parents: 2893
diff changeset
71
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
72 break;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
73 }
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
74 }
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
75
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
76 return removed_fcns;
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
77 }
2894
f1c5f8151397 [project @ 1997-04-28 05:39:26 by jwe]
jwe
parents: 2893
diff changeset
78
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
79 dynamic_library
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
80 dynamic_loader::shlibs_list::find_file (const std::string& file_name) const
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
81 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
82 dynamic_library retval;
3321
6923abb04e16 [project @ 1999-10-26 18:15:30 by jwe]
jwe
parents: 3222
diff changeset
83
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
84 for (const auto& lib : m_lib_list)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
85 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
86 if (lib.file_name () == file_name)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
87 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
88 retval = lib;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
89 break;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
90 }
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
91 }
1664
913a157f1e02 [project @ 1995-12-24 07:00:22 by jwe]
jwe
parents: 1488
diff changeset
92
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
93 return retval;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
94 }
1664
913a157f1e02 [project @ 1995-12-24 07:00:22 by jwe]
jwe
parents: 1488
diff changeset
95
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
96 void
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
97 dynamic_loader::shlibs_list::display (void) const
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
98 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
99 std::cerr << "current shared libraries:" << std::endl;
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
100 for (const auto& lib : m_lib_list)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
101 std::cerr << " " << lib.file_name () << std::endl;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
102 }
1664
913a157f1e02 [project @ 1995-12-24 07:00:22 by jwe]
jwe
parents: 1488
diff changeset
103
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
104 void
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
105 dynamic_loader::clear_function (const std::string& fcn_name)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
106 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
107 warning_with_id ("Octave:reload-forces-clear", " %s", fcn_name.c_str ());
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2895
diff changeset
108
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
109 // FIXME: is there a way to avoid this? Can we manage the list of
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
110 // functions that are loaded in the symbol table completely outside
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
111 // of the dynamic_loader class?
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
112
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
113 symbol_table& symtab = m_interpreter.get_symbol_table ();
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23554
diff changeset
114
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23554
diff changeset
115 symtab.clear_dld_function (fcn_name);
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
116 }
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
117
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
118 void
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
119 dynamic_loader::clear (dynamic_library& oct_file)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
120 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
121 if (oct_file.number_of_functions_loaded () > 1)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
122 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
123 warning_with_id ("Octave:reload-forces-clear",
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
124 "reloading %s clears the following functions:",
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
125 oct_file.file_name ().c_str ());
2926
66ef74ee5d9f [project @ 1997-05-05 03:20:52 by jwe]
jwe
parents: 2895
diff changeset
126
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
127 std::list<std::string> removed_fcns = m_loaded_shlibs.remove (oct_file);
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
128
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
129 for (const auto& fcn_name : removed_fcns)
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
130 clear_function (fcn_name);
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
131 }
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
132 else
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
133 {
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
134 std::list<std::string> removed_fcns = m_loaded_shlibs.remove (oct_file);
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
135
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
136 // FIXME: is there a way to avoid this? Can we manage the list
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
137 // of functions that are loaded in the symbol table completely
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
138 // outside of the dynamic_loader class?
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
139
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
140 symbol_table& symtab = m_interpreter.get_symbol_table ();
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23554
diff changeset
141
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
142 for (const auto& fcn_name : removed_fcns)
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23554
diff changeset
143 symtab.clear_dld_function (fcn_name);
23554
b075b1629c26 don't use hook function in dynamic_library::dynlib_rep::close function
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
144 }
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
145 }
2894
f1c5f8151397 [project @ 1997-04-28 05:39:26 by jwe]
jwe
parents: 2893
diff changeset
146
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
147 octave_function *
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
148 dynamic_loader::load_oct (const std::string& fcn_name,
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
149 const std::string& file_name,
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
150 bool relative)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
151 {
23457
21baad6b35c4 maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents: 23220
diff changeset
152 octave_function *retval = nullptr;
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
153
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
154 unwind_protect frame;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
155
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
156 frame.protect_var (m_doing_load);
7745
0ff0fc033f28 better handling of functions found by relative lookup
John W. Eaton <jwe@octave.org>
parents: 7336
diff changeset
157
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
158 m_doing_load = true;
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
159
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
160 dynamic_library oct_file = m_loaded_shlibs.find_file (file_name);
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
161
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
162 if (oct_file && oct_file.is_out_of_date ())
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
163 clear (oct_file);
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
164
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
165 if (! oct_file)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
166 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
167 oct_file.open (file_name);
13983
7dd7cccf0757 clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents: 11586
diff changeset
168
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
169 if (oct_file)
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
170 m_loaded_shlibs.append (oct_file);
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
171 }
707
d7c4962ec7a0 [project @ 1994-09-16 13:50:20 by jwe]
jwe
parents: 527
diff changeset
172
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
173 if (! oct_file)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
174 error ("%s is not a valid shared library", file_name.c_str ());
2893
9fd1df4b464a [project @ 1997-04-28 02:07:38 by jwe]
jwe
parents: 2862
diff changeset
175
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
176 void *function = oct_file.search (fcn_name, name_mangler);
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
177
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
178 if (! function)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
179 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
180 // FIXME: can we determine this C mangling scheme
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
181 // automatically at run time or configure time?
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
182
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
183 function = oct_file.search (fcn_name, name_uscore_mangler);
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
184 }
6323
ea65de49e18e [project @ 2007-02-17 02:51:02 by jwe]
jwe
parents: 6221
diff changeset
185
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
186 if (function)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
187 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
188 octave_dld_fcn_getter f
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
189 = reinterpret_cast<octave_dld_fcn_getter> (function);
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
190
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
191 retval = f (oct_file, relative);
6323
ea65de49e18e [project @ 2007-02-17 02:51:02 by jwe]
jwe
parents: 6221
diff changeset
192
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
193 if (! retval)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
194 error ("failed to install .oct file function '%s'",
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
195 fcn_name.c_str ());
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
196 }
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
197
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
198 return retval;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
199 }
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
200
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
201 octave_function *
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
202 dynamic_loader::load_mex (const std::string& fcn_name,
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
203 const std::string& file_name,
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
204 bool /*relative*/)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
205 {
23457
21baad6b35c4 maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents: 23220
diff changeset
206 octave_function *retval = nullptr;
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
207
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
208 unwind_protect frame;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
209
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
210 frame.protect_var (m_doing_load);
7749
14e05160b99f reference counting for functions loaded from shared libraries
John W. Eaton <jwe@octave.org>
parents: 7748
diff changeset
211
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
212 m_doing_load = true;
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
213
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
214 dynamic_library mex_file = m_loaded_shlibs.find_file (file_name);
7749
14e05160b99f reference counting for functions loaded from shared libraries
John W. Eaton <jwe@octave.org>
parents: 7748
diff changeset
215
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
216 if (mex_file && mex_file.is_out_of_date ())
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
217 clear (mex_file);
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
218
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
219 if (! mex_file)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
220 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
221 mex_file.open (file_name);
7749
14e05160b99f reference counting for functions loaded from shared libraries
John W. Eaton <jwe@octave.org>
parents: 7748
diff changeset
222
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
223 if (mex_file)
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
224 m_loaded_shlibs.append (mex_file);
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
225 }
3325
2efa28a91e7a [project @ 1999-10-29 21:39:20 by jwe]
jwe
parents: 3321
diff changeset
226
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
227 if (! mex_file)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
228 error ("%s is not a valid shared library", file_name.c_str ());
20962
3aa293be0e8d maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents: 20831
diff changeset
229
23457
21baad6b35c4 maint: Use C++11 nullptr rather than 0 or NULL when possible.
Rik <rik@octave.org>
parents: 23220
diff changeset
230 void *function = nullptr;
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
231
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
232 bool have_fmex = false;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
233
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
234 function = mex_file.search (fcn_name, mex_mangler);
7996
6a7db240b3a3 configure.in: eliminate CXX_ABI and OCTAVE_CXX_PREPEND_UNDERSCORE
John W. Eaton <jwe@octave.org>
parents: 7872
diff changeset
235
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
236 if (! function)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
237 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
238 // FIXME: can we determine this C mangling scheme
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
239 // automatically at run time or configure time?
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
240
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
241 function = mex_file.search (fcn_name, mex_uscore_mangler);
7749
14e05160b99f reference counting for functions loaded from shared libraries
John W. Eaton <jwe@octave.org>
parents: 7748
diff changeset
242
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
243 if (! function)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
244 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
245 function = mex_file.search (fcn_name, mex_f77_mangler);
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
246
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
247 if (function)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
248 have_fmex = true;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
249 }
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
250 }
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
251
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
252 if (function)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
253 retval = new octave_mex_function (function, have_fmex, mex_file, fcn_name);
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
254 else
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
255 error ("failed to install .mex file function '%s'", fcn_name.c_str ());
7748
3dc91baee089 dynamic-ld.cc: cleanups
John W. Eaton <jwe@octave.org>
parents: 7745
diff changeset
256
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
257 return retval;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
258 }
20962
3aa293be0e8d maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents: 20831
diff changeset
259
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
260 bool
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
261 dynamic_loader::remove_oct (const std::string& fcn_name,
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
262 dynamic_library& shl)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
263 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
264 bool retval = false;
5864
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
265
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
266 // We don't need to do anything if this is called because we are in
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
267 // the process of reloading a .oct file that has changed.
5864
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
268
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
269 if (! m_doing_load)
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
270 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
271 retval = shl.remove (fcn_name);
5864
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
272
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
273 if (shl.number_of_functions_loaded () == 0)
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
274 m_loaded_shlibs.remove (shl);
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
275 }
5864
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
276
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
277 return retval;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
278 }
8832
9dddbad47122 automatically reload out of date mex files
John W. Eaton <jwe@octave.org>
parents: 7996
diff changeset
279
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
280 bool
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
281 dynamic_loader::remove_mex (const std::string& fcn_name,
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
282 dynamic_library& shl)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
283 {
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
284 bool retval = false;
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
285
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
286 // We don't need to do anything if this is called because we are in
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
287 // the process of reloading a .oct file that has changed.
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
288
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
289 if (! m_doing_load)
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
290 {
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
291 retval = shl.remove (fcn_name);
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
292
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
293 if (shl.number_of_functions_loaded () == 0)
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
294 m_loaded_shlibs.remove (shl);
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
295 }
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
296
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
297 return retval;
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
298 }
20962
3aa293be0e8d maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents: 20831
diff changeset
299
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
300 std::string
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
301 dynamic_loader::name_mangler (const std::string& name)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
302 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
303 return "G" + name;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
304 }
20555
f90c8372b7ba eliminate many more simple uses of error_state
John W. Eaton <jwe@octave.org>
parents: 20428
diff changeset
305
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
306 std::string
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
307 dynamic_loader::name_uscore_mangler (const std::string& name)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
308 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
309 return "_G" + name;
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
310 }
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
311
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
312 std::string
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
313 dynamic_loader::mex_mangler (const std::string&)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
314 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
315 return "mexFunction";
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
316 }
5864
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
317
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
318 std::string
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
319 dynamic_loader::mex_uscore_mangler (const std::string&)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
320 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
321 return "_mexFunction";
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
322 }
6221
8e0f1eda266b [project @ 2007-01-03 17:23:33 by jwe]
jwe
parents: 6063
diff changeset
323
23000
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
324 std::string
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
325 dynamic_loader::mex_f77_mangler (const std::string&)
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
326 {
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
327 return STRINGIFY (F77_FUNC (mexfunction, MEXFUNCTION));
f981282a3bd0 move octave_dynamic_loader into octave namespace
John W. Eaton <jwe@octave.org>
parents: 22999
diff changeset
328 }
5864
e884ab4f29ee [project @ 2006-06-22 00:57:27 by jwe]
jwe
parents: 5854
diff changeset
329 }