declaration moved in the *.cpp. Otherwise, the other source codes including isCoordIn...
[scilab.git] / scilab / modules / types / includes / 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 #include "dynlib_types.h"
25 }
26
27 namespace types
28 {
29 /*
30 ** Type
31 */
32 class TYPES_IMPEXP 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[50];
41     int                         m_iDims;
42
43
44     GenericType() : InternalType(), m_iRows(0), m_iCols(0), m_iSize(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     virtual bool                isComplex()
56     {
57         return false;
58     }
59     virtual bool                isScalar()
60     {
61         return false;
62     }
63     /*commun functions*/
64     int                         getCols();
65     int                         getRows();
66     int                         getSize();
67     int                         getDims();
68     int*                        getDimsArray();
69     int                         getVarMaxDim(int _iCurrentDim, int _iMaxDim);
70
71     std::wstring                DimToString();
72
73     bool                        isGenericType()
74     {
75         return true;
76     }
77
78     /* FIXME : should be : virtual GenericType* get(int _iPos) = 0; */
79     virtual GenericType*        getColumnValues(int _iPos) = 0;
80
81     bool                        isIdentity(void);
82     virtual bool                isAssignable(void)
83     {
84         return true;
85     }
86
87     virtual RealType            getType(void)
88     {
89         return RealGeneric;
90     }
91
92     /* return type as string ( double, int, cell, list, ... )*/
93     virtual std::wstring        getTypeStr()
94     {
95         return L"generictype";
96     }
97     /* return type as short string ( s, i, ce, l, ... )*/
98     virtual std::wstring        getShortTypeStr()
99     {
100         return L"";
101     }
102
103     virtual InternalType*       clone(void)
104     {
105         return NULL;
106     }
107
108     virtual bool                resize(int* _piDims, int _iDims)
109     {
110         return false;
111     }
112     virtual bool                resize(int _iNewRows, int _iNewCols)
113     {
114         return false;
115     }
116
117     virtual bool                reshape(int* _piDims, int _iDims)
118     {
119         return false;
120     }
121     virtual bool                reshape(int _iNewRows, int _iNewCols)
122     {
123         return false;
124     }
125
126 };
127
128 static int get_max_size(int* _piDims, int _iDims)
129 {
130     if (_iDims == 0)
131     {
132         return 0;
133     }
134
135     int iMax = 1;
136     for (int i = 0 ; i < _iDims ; i++)
137     {
138         iMax *= _piDims[i];
139     }
140     return iMax;
141 }
142 }
143 #endif /* !__TYPES_HXX__ */