add runvisitor hierarchy
[scilab.git] / scilab / modules / types / includes / function.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - DIGITEO - Antoine ELIAS
4  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
5  *
6  *  This file must be used under the terms of the CeCILL.
7  *  This source file is licensed as described in the file COPYING, which
8  *  you should have received as part of this distribution.  The terms
9  *  are also available at
10  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 #ifndef __FUNCTION_HXX__
15 #define __FUNCTION_HXX__
16
17
18 #ifdef _MSC_VER
19 #pragma warning(disable: 4251)
20 #endif
21
22 #include <string>
23 #include "types.hxx"
24 #include "callable.hxx"
25
26 #define MAX_OUTPUT_VARIABLE             64
27
28 namespace types
29 {
30   class Function : public Callable
31   {
32   public :
33     typedef ReturnValue (*GW_FUNC)(typed_list &in, int _iRetCount, typed_list &out); 
34     typedef int (*OLDGW_FUNC)(char *fname, int* _piKey);
35     
36     Function():Callable() {};
37     Function(std::string _szName, GW_FUNC _pFunc, std::string _szModule);
38     ~Function();
39   
40     //FIXME : Should not return NULL
41     Function* clone() { return NULL; }
42
43     static Function *createFunction(std::string _szName, GW_FUNC _pFunc, std::string _szModule);
44     static Function *createFunction(std::string _szName, OLDGW_FUNC _pFunc, std::string _szModule);
45
46     Function *  getAsFunction(void);
47     RealType getType(void) { return RealFunction; }
48
49     void                                        whoAmI();
50
51     std::string toString(int _iPrecision, int _iLineLen);
52
53                 virtual ReturnValue call(typed_list &in, int _iRetCount, typed_list &out, ast::RunVisitor* execFunc);
54
55
56   private :
57     GW_FUNC                     m_pFunc;
58   };
59
60   class WrapFunction : public Function
61   {
62   public :
63     WrapFunction(std::string _szName, OLDGW_FUNC _pFunc, std::string _szModule);
64
65                 Callable::ReturnValue call(typed_list &in, int _iRetCount, typed_list &out, ast::RunVisitor* execFunc);
66   private :
67     OLDGW_FUNC m_pOldFunc;
68                 InternalType* m_pTempOut[MAX_OUTPUT_VARIABLE];
69   };
70
71   class GatewayStruct
72   {
73   public :
74     typed_list* m_pIn;
75     InternalType** m_pOut;
76     int*        m_piRetCount;
77     char* m_pstName;
78                 int* m_pOutOrder;
79
80     GatewayStruct(){};
81     ~GatewayStruct(){};
82   };
83 }
84
85
86 #endif /* !__FUNCTION_HXX__ */