GNU Octave  4.2.1
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-2017 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 "octave-config.h"
27 
28 #include <string>
29 
30 #include "oct-shlib.h"
31 
32 #include "ov-fcn.h"
33 #include "ov-builtin.h"
34 #include "ov-typeinfo.h"
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::dynamic_library& shl,
51  const std::string& nm = "");
52 
53  ~octave_mex_function (void);
54 
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 
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::sys::time& t) { t_checked = t; }
71 
72  std::string fcn_file_name (void) const;
73 
74  octave::sys::time time_parsed (void) const;
75 
76  octave::sys::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 
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 };
119 
120 #endif
octave_idx_type length(void) const
Definition: ovl.h:96
bool is_system_fcn_file(void) const
Definition: ov-mex-fcn.h:78
idx subsref(val, idx) esult
Definition: ov.cc:3080
octave_value subsref(const std::string &type, const std::list< octave_value_list > &idx)
Definition: ov-mex-fcn.h:55
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function t
Definition: ov-usr-fcn.cc:935
octave_function * fcn
Definition: ov-class.cc:1743
JNIEnv void * args
Definition: ov-java.cc:67
#define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
Definition: ov-base.h:148
static std::string fcn_file_name(const octave_value &fcn)
Definition: symtab.cc:1168
OCTAVE_EXPORT octave_value_list isdir nd deftypefn *std::string nm
Definition: utils.cc:941
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function xample nargout(@histc)
Definition: ov-usr-fcn.cc:935
octave_function * function_value(bool=false)
Definition: ov-mex-fcn.h:66
double tmp
Definition: data.cc:6300
bool is_builtin_function(void) const
Definition: ov-mex-fcn.h:80
idx type
Definition: ov.cc:3129
void atexit(void(*fcn)(void))
Definition: ov-mex-fcn.h:87
octave::dynamic_library sh_lib
Definition: ov-mex-fcn.h:100
octave_mex_function(void)
Definition: ov-mex-fcn.h:46
const octave_function * function_value(bool=false) const
Definition: ov-mex-fcn.h:68
bool is_mex_function(void) const
Definition: ov-mex-fcn.h:82
FloatComplex(* fptr)(const FloatComplex &, float, int, octave_idx_type &)
Definition: lo-specfun.cc:1724
void mark_fcn_file_up_to_date(const octave::sys::time &t)
Definition: ov-mex-fcn.h:70
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
Definition: utils.cc:854
octave::sys::time time_checked(void) const
Definition: ov-mex-fcn.h:76
return octave_value(v1.char_array_value().concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string())? '\'': '"'))
octave::dynamic_library get_shlib(void) const
Definition: ov-mex-fcn.h:89
octave_value_list & operator=(const octave_value_list &obj)
Definition: ovl.h:75
octave::sys::time t_checked
Definition: ov-mex-fcn.h:104