GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ov-mex-fcn.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 1996-2013 John W. Eaton
4 
5 This file is part of Octave.
6 
7 Octave is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 Octave is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with Octave; see the file COPYING. If not, see
19 <http://www.gnu.org/licenses/>.
20 
21 */
22 
23 #if !defined (octave_ov_mex_fcn_h)
24 #define octave_ov_mex_fcn_h 1
25 
26 #include <string>
27 
28 #include "oct-shlib.h"
29 
30 #include "ov-fcn.h"
31 #include "ov-builtin.h"
32 #include "ov-typeinfo.h"
33 
34 class octave_shlib;
35 
36 class octave_value;
37 class octave_value_list;
38 
39 // Dynamically-linked functions.
40 
41 class
43 {
44 public:
45 
47  : mex_fcn_ptr (), exit_fcn_ptr (), have_fmex (), sh_lib (),
48  t_checked (), system_fcn_file () { }
49 
50  octave_mex_function (void *fptr, bool fmex, const octave_shlib& shl,
51  const std::string& nm = std::string ());
52 
53  ~octave_mex_function (void);
54 
55  octave_value subsref (const std::string& type,
56  const std::list<octave_value_list>& idx)
57  {
58  octave_value_list tmp = subsref (type, idx, 1);
59  return tmp.length () > 0 ? tmp(0) : octave_value ();
60  }
61 
62  octave_value_list subsref (const std::string& type,
63  const std::list<octave_value_list>& idx,
64  int nargout);
65 
66  octave_function *function_value (bool = false) { return this; }
67 
68  const octave_function *function_value (bool = false) const { return this; }
69 
70  void mark_fcn_file_up_to_date (const octave_time& t) { t_checked = t; }
71 
72  std::string fcn_file_name (void) const;
73 
74  octave_time time_parsed (void) const;
75 
76  octave_time time_checked (void) const { return t_checked; }
77 
78  bool is_system_fcn_file (void) const { return system_fcn_file; }
79 
80  bool is_builtin_function (void) const { return false; }
81 
82  bool is_mex_function (void) const { return true; }
83 
85  do_multi_index_op (int nargout, const octave_value_list& args);
86 
87  void atexit (void (*fcn) (void)) { exit_fcn_ptr = fcn; }
88 
89  octave_shlib get_shlib (void) const
90  { return sh_lib; }
91 
92 private:
93 
94  void *mex_fcn_ptr;
95 
96  void (*exit_fcn_ptr) (void);
97 
98  bool have_fmex;
99 
101 
102  // The time the file was last checked to see if it needs to be
103  // parsed again.
105 
106  // True if this function came from a file that is considered to be a
107  // system function. This affects whether we check the time stamp
108  // on the file to see if it has changed.
110 
111  // No copying!
112 
114 
116 
118 
120 };
121 
122 #endif