License Header change: Removed the LICENSE_END before beta
[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     }
46     virtual             ~Callable() {}
47
48     bool                isCallable()
49     {
50         return true;
51     }
52
53     virtual ReturnValue call(typed_list &in, optional_list &opt, int _iRetCount, typed_list &out) = 0;
54
55     virtual bool invoke(typed_list & in, optional_list & opt, int _iRetCount, typed_list & out, const ast::Exp & e)  override;
56
57     virtual bool isInvokable() const
58     {
59         return true;
60     }
61
62     virtual bool hasInvokeOption() const
63     {
64         return true;
65     }
66
67     virtual int getInvokeNbIn()
68     {
69         return getNbInputArgument();
70     }
71
72     virtual int getInvokeNbOut()
73     {
74         return getNbOutputArgument();
75     }
76
77     void                  setName(const std::wstring& _wstName)
78     {
79         m_wstName = _wstName;
80     }
81     const std::wstring&   getName()
82     {
83         return m_wstName;
84     }
85     void                  setModule(const std::wstring& _wstModule)
86     {
87         m_wstModule = _wstModule;
88     }
89     std::wstring        getModule()
90     {
91         return m_wstModule;
92     }
93
94     /* return type as string ( double, int, cell, list, ... )*/
95     virtual std::wstring  getTypeStr()
96     {
97         return L"callable";
98     }
99     /* return type as short string ( s, i, ce, l, ... )*/
100     virtual std::wstring  getShortTypeStr() = 0;
101     virtual InternalType* clone(void) = 0;
102
103     virtual bool        isAssignable(void)
104     {
105         return true;
106     }
107
108     virtual int        getNbInputArgument(void)
109     {
110         return -1;
111     }
112
113     virtual int        getNbOutputArgument(void)
114     {
115         return -1;
116     }
117
118     virtual int        getFirstLine(void)
119     {
120         return m_iFirstLine;
121     }
122
123     virtual int        getLastLine(void)
124     {
125         return m_iLastLine;
126     }
127
128     virtual void       setLines(int _iFirstLine, int _iLastLine)
129     {
130         m_iFirstLine = _iFirstLine;
131         m_iLastLine  = _iLastLine;
132     }
133
134 protected :
135     std::wstring            m_wstName;
136     std::string             m_stName;
137     std::wstring            m_wstModule;
138     int                     m_iFirstLine;
139     int                     m_iLastLine;
140 };
141 }
142
143
144 #endif /* !__CALLABLE_HXX__ */