GNU Octave  8.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
ov-mex-fcn.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (C) 1996-2023 The Octave Project Developers
4 //
5 // See the file COPYRIGHT.md in the top-level directory of this
6 // distribution or <https://octave.org/copyright/>.
7 //
8 // This file is part of Octave.
9 //
10 // Octave is free software: you can redistribute it and/or modify it
11 // under the terms of the GNU General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // Octave is distributed in the hope that it will be useful, but
16 // WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License
21 // along with Octave; see the file COPYING. If not, see
22 // <https://www.gnu.org/licenses/>.
23 //
24 ////////////////////////////////////////////////////////////////////////
25 
26 #if ! defined (octave_ov_mex_fcn_h)
27 #define octave_ov_mex_fcn_h 1
28 
29 #include "octave-config.h"
30 
31 #include <string>
32 
33 #include "oct-shlib.h"
34 
35 #include "ov-fcn.h"
36 #include "ov-builtin.h"
37 #include "ov-typeinfo.h"
38 
39 class octave_value;
40 class octave_value_list;
41 
43 
44 class tree_evaluator;
45 
47 
48 // Dynamically-linked functions.
49 
50 class
52 {
53 public:
54 
56  : m_mex_fcn_ptr (nullptr), m_exit_fcn_ptr (nullptr), m_sh_lib (),
57  m_time_checked (), m_interleaved (false), m_is_fmex (false),
58  m_is_system_fcn_file (false)
59  { }
60 
61  octave_mex_function (void *fptr, bool interleaved, bool fmex,
62  const octave::dynamic_library& shl,
63  const std::string& nm = "");
64 
65  // No copying!
66 
68 
70 
71  ~octave_mex_function (void);
72 
73  octave_function * function_value (bool = false) { return this; }
74 
75  const octave_function * function_value (bool = false) const { return this; }
76 
77  void mark_fcn_file_up_to_date (const octave::sys::time& t)
78  {
79  m_time_checked = t;
80  }
81 
82  std::string fcn_file_name (void) const;
83 
84  octave::sys::time time_parsed (void) const;
85 
86  octave::sys::time time_checked (void) const { return m_time_checked; }
87 
88  bool is_system_fcn_file (void) const { return m_is_system_fcn_file; }
89 
90  bool is_builtin_function (void) const { return false; }
91 
92  bool is_mex_function (void) const { return true; }
93 
94  bool use_interleaved_complex (void) const { return m_interleaved; }
95 
97  execute (octave::tree_evaluator& tw, int nargout = 0,
98  const octave_value_list& args = octave_value_list ());
99 
100  void atexit (void (*fcn) (void)) { m_exit_fcn_ptr = fcn; }
101 
102  octave::dynamic_library get_shlib (void) const { return m_sh_lib; }
103 
104  void * mex_fcn_ptr (void) const { return m_mex_fcn_ptr; }
105 
106  bool is_fmex (void) const { return m_is_fmex; }
107 
108 private:
109 
111 
112  void (*m_exit_fcn_ptr) (void);
113 
114  octave::dynamic_library m_sh_lib;
115 
116  // The time the file was last checked to see if it needs to be
117  // parsed again.
118  octave::sys::time m_time_checked;
119 
121 
122  bool m_is_fmex;
123 
124  // True if this function came from a file that is considered to be a
125  // system function. This affects whether we check the time stamp
126  // on the file to see if it has changed.
128 
130 };
131 
132 #endif
OCTAVE_END_NAMESPACE(octave)
bool is_builtin_function(void) const
Definition: ov-mex-fcn.h:90
const octave_function * function_value(bool=false) const
Definition: ov-mex-fcn.h:75
bool is_fmex(void) const
Definition: ov-mex-fcn.h:106
void * mex_fcn_ptr(void) const
Definition: ov-mex-fcn.h:104
void atexit(void(*fcn)(void))
Definition: ov-mex-fcn.h:100
void mark_fcn_file_up_to_date(const octave::sys::time &t)
Definition: ov-mex-fcn.h:77
octave_mex_function(const octave_mex_function &fcn)=delete
octave::sys::time m_time_checked
Definition: ov-mex-fcn.h:118
bool is_mex_function(void) const
Definition: ov-mex-fcn.h:92
octave_function * function_value(bool=false)
Definition: ov-mex-fcn.h:73
octave::dynamic_library m_sh_lib
Definition: ov-mex-fcn.h:114
octave::sys::time time_checked(void) const
Definition: ov-mex-fcn.h:86
bool use_interleaved_complex(void) const
Definition: ov-mex-fcn.h:94
bool is_system_fcn_file(void) const
Definition: ov-mex-fcn.h:88
octave::dynamic_library get_shlib(void) const
Definition: ov-mex-fcn.h:102
octave_mex_function(void)
Definition: ov-mex-fcn.h:55
tree_evaluator & operator=(const tree_evaluator &)=delete
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
FloatComplex(* fptr)(const FloatComplex &, float, int, octave_idx_type &)
Definition: lo-specfun.cc:1102
#define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
Definition: ov-base.h:181