1a1e6e990461ce246c20f5293418e7a2c75589a4
[scilab.git] / scilab / modules / ast / includes / types / callable.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  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 #ifndef __CALLABLE_HXX__
18 #define __CALLABLE_HXX__
19
20 #include <string>
21 #include "internal.hxx"
22
23 #include "visitor.hxx"
24
25 //disable warnings about exports STL items
26 #ifdef _MSC_VER
27 #pragma warning (disable : 4251)
28 #endif
29
30 namespace types
31 {
32 class EXTERN_AST Callable : public InternalType
33 {
34 public :
35     enum ReturnValue
36     {
37         OK,
38         OK_NoResult,
39         Error
40     };
41
42     Callable(): InternalType()
43     {
44         m_iFirstLine = 0;
45         m_iLastLine = 0;
46     }
47     virtual             ~Callable() {}
48
49     bool                isCallable()
50     {
51         return true;
52     }
53
54     virtual ReturnValue call(typed_list &in, optional_list &opt, int _iRetCount, typed_list &out) = 0;
55
56     virtual bool invoke(typed_list & in, optional_list & opt, int _iRetCount, typed_list & out, const ast::Exp & e)  override;
57
58     virtual bool isInvokable() const
59     {
60         return true;
61     }
62
63     virtual bool hasInvokeOption() const
64     {
65         return true;
66     }
67
68     virtual int getInvokeNbIn()
69     {
70         return getNbInputArgument();
71     }
72
73     virtual int getInvokeNbOut()
74     {
75         return getNbOutputArgument();
76     }
77
78     void                  setName(const std::wstring& _wstName)
79     {
80         m_wstName = _wstName;
81     }
82     const std::wstring&   getName()
83     {
84         return m_wstName;
85     }
86     void                  setModule(const std::wstring& _wstModule)
87     {
88         m_wstModule = _wstModule;
89     }
90     std::wstring        getModule()
91     {
92         return m_wstModule;
93     }
94
95     /* return type as string ( double, int, cell, list, ... )*/
96     virtual std::wstring  getTypeStr() const
97     {
98         return L"callable";
99     }
100     /* return type as short string ( s, i, ce, l, ... )*/
101     virtual std::wstring  getShortTypeStr() const = 0;
102     virtual InternalType* clone(void) = 0;
103
104     virtual bool        isAssignable(void)
105     {
106         return true;
107     }
108
109     virtual int        getNbInputArgument(void)
110     {
111         return -1;
112     }
113
114     virtual int        getNbOutputArgument(void)
115     {
116         return -1;
117     }
118
119     virtual int        getFirstLine(void)
120     {
121         return m_iFirstLine;
122     }
123
124     virtual int        getLastLine(void)
125     {
126         return m_iLastLine;
127     }
128
129     virtual void       setLines(int _iFirstLine, int _iLastLine)
130     {
131         m_iFirstLine = _iFirstLine;
132         m_iLastLine  = _iLastLine;
133     }
134
135 protected :
136     std::wstring            m_wstName;
137     std::string             m_stName;
138     std::wstring            m_wstModule;
139     int                     m_iFirstLine;
140     int                     m_iLastLine;
141 };
142 }
143
144
145 #endif /* !__CALLABLE_HXX__ */