fb826b2223499ca535c584f528d732fccfbc48f2
[scilab.git] / scilab / modules / ast / includes / types / cell.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
4 *  Copyright (C) 2011 - DIGITEO - Antoine ELIAS
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
18 //#ifndef __ARRAYOF_HXX__
19 //    #error This file must only be include by arrayof.hxx
20 //#endif
21
22 #ifndef __CELL_HXX__
23 #define __CELL_HXX__
24
25 #include <vector>
26
27 #include "list.hxx"
28 #include "arrayof.hxx"
29
30 namespace types
31 {
32 class EXTERN_AST Cell : public ArrayOf<InternalType*>
33 {
34 public :
35     ~Cell();
36     Cell();
37     Cell(int _iRows, int _iCols, InternalType** data = nullptr);
38     Cell(int _iDims, const int* _piDims, InternalType** data = nullptr);
39
40 private :
41     Cell(Cell* _oCellCopyMe);
42     void createCell(int _iDims, const int* _piDims, InternalType** data);
43 public :
44
45     void                whoAmI(void)
46     {
47         std::cout << "types::Cell";
48     };
49
50     ScilabType            getType(void)
51     {
52         return ScilabCell;
53     }
54     ScilabId            getId(void)
55     {
56         return IdCell;
57     }
58     bool                isCell()
59     {
60         return true;
61     }
62     bool                isEmpty();
63
64
65     /**
66     ** Clone
67     ** Create a new List and Copy all values.
68     */
69     Cell*               clone();
70
71     Cell*               set(int _iRows, int _iCols, InternalType* _pIT);
72     Cell*               set(int _iRows, int _iCols, const InternalType* _pIT);
73     Cell*               set(int _iIndex, InternalType* _pIT);
74     Cell*               set(int _iIndex, const InternalType* _pIT);
75     Cell*               set(InternalType** _pIT);
76
77     bool                operator==(const InternalType& it);
78     bool                operator!=(const InternalType& it);
79
80     Cell*               insertCell(typed_list* _pArgs, InternalType* _pSource);
81     static Cell*        insertNewCell(typed_list* _pArgs, InternalType* _pSource);
82     List*               extractCell(typed_list* _pArgs);
83
84     /* return type as string ( double, int, cell, list, ... )*/
85     virtual std::wstring getTypeStr() const
86     {
87         return L"cell";
88     }
89     /* return type as short string ( s, i, ce, l, ... )*/
90     virtual std::wstring getShortTypeStr() const
91     {
92         return L"ce";
93     };
94     virtual bool        isContainer(void)
95     {
96         return true;
97     }
98     bool                subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims) override;
99
100     bool isTrue()
101     {
102         return false;
103     }
104
105     virtual bool neg(InternalType *& /*out*/)
106     {
107         return false;
108     }
109
110     virtual bool transpose(InternalType *& out);
111
112     bool getMemory(long long* _piSize, long long* _piSizePlusType);
113
114 private :
115     virtual InternalType*   getNullValue();
116     virtual Cell*           createEmpty(int _iDims, int* _piDims, bool _bComplex = false);
117     virtual Cell*           createEmpty();
118     virtual InternalType*   copyValue(InternalType* _pData);
119     virtual void            deleteAll();
120     virtual void            deleteImg();
121     virtual InternalType**  allocData(int _iSize);
122     virtual void            deleteData(InternalType* _pData);
123 };
124 }
125
126 #ifdef _MSC_VER
127 template class types::ArrayOf<types::InternalType*>; //Cell
128 #endif
129 #endif /* !__CELL_HXX__ */