New C API for Scilab gateways (once again ...)
[scilab.git] / scilab / modules / ast / includes / types / struct.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2011 - DIGITEO - Antoine ELIAS
4 *
5 *  This file must be used under the terms of the CeCILL.
6 *  This source file is licensed as described in the file COPYING, which
7 *  you should have received as part of this distribution.  The terms
8 *  are also available at
9 *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 *
11 */
12
13 #ifndef __STRUCT_HXX__
14 #define __STRUCT_HXX__
15
16 #include "list.hxx"
17 #include "arrayof.hxx"
18 #include "singlestruct.hxx"
19
20 extern "C"
21 {
22 #include "localization.h"
23 }
24
25 namespace types
26 {
27 class EXTERN_AST Struct : public ArrayOf<SingleStruct*>
28 {
29 public :
30     ~Struct();
31     Struct();
32     Struct(int _iRows, int _iCols);
33     Struct(int _iDims, const int* _piDims);
34
35 private :
36     Struct(Struct* _oCellCopyMe);
37
38 public :
39
40     void                        whoAmI(void)
41     {
42         std::cout << "types::Struct";
43     };
44
45     inline ScilabType           getType(void)
46     {
47         return ScilabStruct;
48     }
49     inline ScilabId             getId(void)
50     {
51         return IdStruct;
52     }
53
54     bool                        isStruct()
55     {
56         return true;
57     }
58     bool                        isEmpty();
59
60     bool transpose(InternalType *& out);
61
62
63     /**
64     ** Clone
65     ** Create a new List and Copy all values.
66     */
67     InternalType*               clone();
68
69     bool                        set(int _iRows, int _iCols, SingleStruct* _pIT);
70     bool                        set(int _iRows, int _iCols, const SingleStruct* _pIT);
71     bool                        set(int _iIndex, SingleStruct* _pIT);
72     bool                        set(int _iIndex, const SingleStruct* _pIT);
73     bool                        set(SingleStruct** _pIT);
74
75     bool                        operator==(const InternalType& it);
76     bool                        operator!=(const InternalType& it);
77
78     /* return type as string ( double, int, cell, list, ... )*/
79     virtual std::wstring        getTypeStr()
80     {
81         return L"struct";
82     }
83     /* return type as short string ( s, i, ce, l, ... )*/
84     virtual std::wstring        getShortTypeStr()
85     {
86         return L"st";
87     }
88     virtual bool                isContainer(void)
89     {
90         return true;
91     }
92
93     bool isTrue()
94     {
95         return false;
96     }
97
98     virtual bool neg(InternalType *& /*out*/)
99     {
100         return false;
101     }
102
103     bool                        subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims) override;
104     String*                     getFieldNames();
105     bool                        exists(const std::wstring& _sKey);
106     Struct*                     addField(const std::wstring& _sKey);
107     Struct*                     addFieldFront(const std::wstring& _sKey);
108     Struct*                     removeField(const std::wstring& _sKey);
109     bool                        toString(std::wostringstream& ostr);
110     List*                       extractFieldWithoutClone(const std::wstring& _wstField);
111     std::vector<InternalType*>  extractFields(std::vector<std::wstring> _wstFields);
112     std::vector<InternalType*>  extractFields(typed_list* _pArgs);
113     inline InternalType *       extractField(const std::wstring& wstField);
114
115     bool                        resize(int* _piDims, int _iDims);
116     bool                        resize(int _iNewRows, int _iNewCols);
117
118     /*specials functions to disable clone operation during copydata*/
119     InternalType*               insertWithoutClone(typed_list* _pArgs, InternalType* _pSource);
120     InternalType*               extractWithoutClone(typed_list* _pArgs);
121     void                        setCloneInCopyValue(bool _val);
122
123     using ArrayOf<SingleStruct *>::extract;
124     bool extract(const std::wstring& name, InternalType *& out);
125
126     virtual bool invoke(typed_list & in, optional_list & opt, int _iRetCount, typed_list & out, const ast::Exp & e) override;
127
128     virtual int getInvokeNbOut()
129     {
130         return -1;
131     }
132
133 private :
134     virtual SingleStruct*       getNullValue();
135     virtual Struct*             createEmpty(int _iDims, int* _piDims, bool _bComplex = false);
136     virtual Struct*             createEmpty();
137     virtual SingleStruct*       copyValue(SingleStruct* _pData);
138     virtual void                deleteAll();
139     virtual void                deleteImg();
140     virtual SingleStruct**      allocData(int _iSize);
141     virtual void                deleteData(SingleStruct* data);
142
143     bool                        m_bDisableCloneInCopyValue;
144
145 };
146 }
147
148 #ifdef _MSC_VER
149 template class types::ArrayOf<types::SingleStruct*>; //Struct
150 #endif
151 #endif /* !__STRUCT_HXX__ */