00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #if !defined (octave_builtin_h)
00025 #define octave_builtin_h 1
00026
00027 #include <string>
00028
00029 #include "ov-fcn.h"
00030 #include "ov-typeinfo.h"
00031
00032 class octave_value;
00033 class octave_value_list;
00034
00035
00036
00037 class
00038 OCTINTERP_API
00039 octave_builtin : public octave_function
00040 {
00041 public:
00042
00043 octave_builtin (void) { }
00044
00045 typedef octave_value_list (*fcn) (const octave_value_list&, int);
00046
00047 octave_builtin (fcn ff, const std::string& nm = std::string (),
00048 const std::string& ds = std::string ())
00049 : octave_function (nm, ds), f (ff) { }
00050
00051 ~octave_builtin (void) { }
00052
00053 octave_value subsref (const std::string& type,
00054 const std::list<octave_value_list>& idx)
00055 {
00056 octave_value_list tmp = subsref (type, idx, 1);
00057 return tmp.length () > 0 ? tmp(0) : octave_value ();
00058 }
00059
00060 octave_value_list subsref (const std::string& type,
00061 const std::list<octave_value_list>& idx,
00062 int nargout);
00063
00064 octave_function *function_value (bool = false) { return this; }
00065
00066 const octave_function *function_value (bool = false) const { return this; }
00067
00068 bool is_builtin_function (void) const { return true; }
00069
00070 octave_value_list
00071 do_multi_index_op (int nargout, const octave_value_list& args);
00072
00073 protected:
00074
00075
00076 fcn f;
00077
00078 private:
00079
00080
00081
00082 octave_builtin (const octave_builtin& ob);
00083
00084 octave_builtin& operator = (const octave_builtin& ob);
00085
00086 DECLARE_OCTAVE_ALLOCATOR
00087
00088 DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
00089 };
00090
00091 #endif
00092
00093
00094
00095
00096
00097