GNU Octave  4.0.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-2015 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 
117 
119 };
120 
121 #endif
octave_time t_checked
Definition: ov-mex-fcn.h:104
octave_idx_type length(void) const
Definition: oct-obj.h:89
bool is_system_fcn_file(void) const
Definition: ov-mex-fcn.h:78
octave_value subsref(const std::string &type, const std::list< octave_value_list > &idx)
Definition: ov-mex-fcn.h:55
void mark_fcn_file_up_to_date(const octave_time &t)
Definition: ov-mex-fcn.h:70
FloatComplex(* fptr)(const FloatComplex &, float, int, octave_idx_type &)
Definition: lo-specfun.cc:1732
#define DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
Definition: ov-base.h:142
static std::string fcn_file_name(const octave_value &fcn)
Definition: symtab.cc:1163
octave_function * function_value(bool=false)
Definition: ov-mex-fcn.h:66
octave_shlib get_shlib(void) const
Definition: ov-mex-fcn.h:89
bool is_builtin_function(void) const
Definition: ov-mex-fcn.h:80
void atexit(void(*fcn)(void))
Definition: ov-mex-fcn.h:87
octave_time time_checked(void) const
Definition: ov-mex-fcn.h:76
octave_shlib 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
return octave_value(v1.char_array_value().concat(v2.char_array_value(), ra_idx),((a1.is_sq_string()||a2.is_sq_string())? '\'': '"'))
octave_value_list & operator=(const octave_value_list &obj)
Definition: oct-obj.h:68