Improve performance for loop and insertion
[scilab.git] / scilab / modules / ast / includes / types / types.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2010 - DIGITEO - Bruno JOFRET
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 __TYPES_HXX__
14 #define __TYPES_HXX__
15
16 #include <vector>
17 #include <iostream>
18 #include <string>
19 #include "internal.hxx"
20
21 extern "C"
22 {
23 #include "core_math.h"
24 }
25
26 #define MAX_DIMS 32
27 namespace types
28 {
29 /*
30 ** Type
31 */
32 class EXTERN_AST GenericType : public InternalType
33 {
34
35 protected :
36     int                         m_iRows;
37     int                         m_iCols;
38     int                         m_iSize;
39     int                         m_iSizeMax;
40     int                         m_piDims[MAX_DIMS];
41     int                         m_iDims;
42
43
44     GenericType() : InternalType(), m_iRows(0), m_iCols(0), m_iSize(0), m_iSizeMax(0), m_iDims(0) {}
45
46     bool                        hasAllIndexesOfRow(int _iRow, int* _piCoord, int _iCoordCount);
47     bool                        hasAllIndexesOfCol(int _iCol, int* _piCoord, int _iCoordCount);
48
49 public :
50     virtual                     ~GenericType() {}
51     void                        whoAmI(void)
52     {
53         std::cout << "types::GenericType";
54     }
55
56     virtual bool                isComplex()
57     {
58         return false;
59     }
60
61     bool                        isScalar();
62
63     /*commun functions*/
64     inline int                  getCols()
65     {
66         return m_iCols;
67     }
68
69     inline int                  getRows()
70     {
71         return m_iRows;
72     }
73
74     inline int                  getSize()
75     {
76         return m_iSize;
77     }
78
79     inline int                  getDims()
80     {
81         return m_iDims;
82     }
83
84     inline int*                 getDimsArray()
85     {
86         return m_piDims;
87     }
88
89     int                         getVarMaxDim(int _iCurrentDim, int _iMaxDim);
90
91     std::wstring                DimToString();
92
93     inline bool                 isGenericType()
94     {
95         return true;
96     }
97
98     virtual GenericType*        getColumnValues(int /*_iPos*/)
99     {
100         return NULL;
101     }
102
103     bool                        isIdentity(void);
104     virtual bool                isAssignable(void)
105     {
106         return true;
107     }
108
109     virtual ScilabType          getType(void)
110     {
111         return ScilabGeneric;
112     }
113
114     /* return type as string ( double, int, cell, list, ... )*/
115     virtual std::wstring        getTypeStr()
116     {
117         return L"generictype";
118     }
119     /* return type as short string ( s, i, ce, l, ... )*/
120     virtual std::wstring        getShortTypeStr()
121     {
122         return L"";
123     }
124
125     virtual InternalType*       clone(void)
126     {
127         return NULL;
128     }
129
130     virtual bool                resize(int* /*_piDims*/, int /*_iDims*/)
131     {
132         return false;
133     }
134
135     virtual bool                resize(int /*_iNewRows*/, int /*_iNewCols*/)
136     {
137         return false;
138     }
139
140     virtual bool                reshape(int* /*_piDims*/, int /*_iDims*/)
141     {
142         return false;
143     }
144
145     virtual bool                reshape(int /*_iNewRows*/, int /*_iNewCols*/)
146     {
147         return false;
148     }
149
150     virtual InternalType*       insert(typed_list* /*_pArgs*/, InternalType* /*_pSource*/)
151     {
152         return NULL;
153     }
154
155     virtual bool                extract(const std::wstring & /*name*/, InternalType *& /*out*/)
156     {
157         return false;
158     }
159
160     virtual InternalType*       extract(typed_list* /*_pArgs*/)
161     {
162         return NULL;
163     }
164
165 };
166 }
167 #endif /* !__TYPES_HXX__ */