Update CHANGES.md before the release
[scilab.git] / scilab / modules / external_objects / src / cpp / EOType.hxx
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15
16 #include "user.hxx"
17 #include "callable.hxx"
18 #include "context.hxx"
19 #include "ScilabObjects.hxx"
20
21 namespace org_modules_external_objects
22 {
23 class EOType : public types::UserType
24 {
25 public :
26     EOType(int envId, bool isNew) : id(envId), isNew(isNew)
27     {
28         if (pFunc == nullptr)
29         {
30             symbol::Context* ctx = symbol::Context::getInstance();
31             types::InternalType* pIT = ctx->get(symbol::Symbol(ScilabObjects::_INVOKE_));
32             if (pIT && pIT->isCallable())
33             {
34                 pFunc = pIT->getAs<types::Callable>();
35             }
36         }
37     }
38     virtual ~EOType() {}
39
40     inline std::wstring getTypeStr() const override
41     {
42         return L"eotype";
43     }
44
45     inline std::wstring getShortTypeStr() const override
46     {
47         return L"eo";
48     }
49
50     EOType* clone() override
51     {
52         return new EOType(id, isNew);
53     }
54
55     inline bool hasToString() override
56     {
57         return true;
58     }
59
60     inline bool toString(std::wostringstream& ostr) override
61     {
62         ostr << "eotype" << std::endl;
63         return true;
64     }
65
66     inline bool isInvokable() const override
67     {
68         return true;
69     }
70
71     inline bool isAssignable() override
72     {
73         return false;
74     }
75
76     inline bool isCallable() override
77     {
78         return true;
79     }
80
81     bool invoke(types::typed_list & in, types::optional_list & /*opt*/, int /*_iRetCount*/, types::typed_list & out, const ast::Exp & /*e*/) override;
82
83 private:
84     static types::Callable* pFunc;
85     int id;
86     bool isNew;
87
88 };
89 }