declaration moved in the *.cpp. Otherwise, the other source codes including isCoordIn...
[scilab.git] / scilab / modules / types / src / cpp / types.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - 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 #include <sstream>
14 #include "types.hxx"
15
16 #include "scilabexception.hxx"
17
18 extern "C"
19 {
20 #include "localization.h"
21 #include "charEncoding.h"
22 #include "os_swprintf.h"
23 }
24
25
26
27 namespace types
28 {
29
30 static bool isCoordIndex(int _iIndex, int* _piCoord, int _iCoordCount)
31 {
32     bool bFind = false;
33     for (int j = 0 ; j < _iCoordCount ; j++)
34     {
35         if (_piCoord[j] == _iIndex)
36         {
37             bFind = true;
38             break;
39         }
40     }
41     return bFind;
42 }
43
44 bool InternalType::isGenericType(void)
45 {
46     return true;
47 }
48
49 /*commun functions*/
50 int GenericType::getCols()
51 {
52     return m_iCols;
53 }
54
55 int GenericType::getRows()
56 {
57     return m_iRows;
58 }
59
60 int GenericType::getSize()
61 {
62     return m_iSize;
63 }
64
65 std::wstring GenericType::DimToString()
66 {
67     std::wostringstream ostr;
68     ostr << getRows() << L"x" << getCols();
69     return ostr.str();
70 }
71
72 bool GenericType::isIdentity(void)
73 {
74     if (m_piDims)
75     {
76         for (int i = 0 ; i < getDims() ; i++)
77         {
78             if (m_piDims[i] != -1)
79             {
80                 return false;
81             }
82         }
83     }
84
85     return true;
86 }
87
88 bool GenericType::hasAllIndexesOfRow(int _iRow, int* _piCoord, int _iCoordCount)
89 {
90     bool bAll = true;
91     for (int i = 0 ; i < getCols() ; i++)
92     {
93         bool bFind = false;
94         //+1 to keep 1 based index
95         int iIdx = _iRow + i * getCols() + 1;
96
97
98         if (isCoordIndex(iIdx, _piCoord, _iCoordCount) == false)
99         {
100             bAll = false;
101             break;
102         }
103     }
104     return bAll;
105 }
106
107 bool GenericType::hasAllIndexesOfCol(int _iCol, int* _piCoord, int _iCoordCount)
108 {
109     bool bAll = true;
110     for (int i = 0 ; i < getRows() ; i++)
111     {
112         bool bFind = false;
113         //+1 to keep 1 based index
114         int iIdx = i + _iCol * getRows() + 1;
115
116
117         if (isCoordIndex(iIdx, _piCoord, _iCoordCount) == false)
118         {
119             bAll = false;
120             break;
121         }
122     }
123     return bAll;
124 }
125
126 int GenericType::getDims()
127 {
128     return m_iDims;
129 }
130
131 int* GenericType::getDimsArray()
132 {
133     return m_piDims;
134 }
135
136 int GenericType::getVarMaxDim(int _iCurrentDim, int _iMaxDim)
137 {
138     int iDim    = 1;
139     if (m_iDims != 0)
140     {
141         if (_iMaxDim != m_iDims)
142         {
143             //view as "vector", not all dimensions are used
144             if (_iCurrentDim == (_iMaxDim - 1))
145             {
146                 for (int i = _iCurrentDim ; i < m_iDims ; i++)
147                 {
148                     iDim *= m_piDims[i];
149                 }
150             }
151             else
152             {
153                 iDim = m_piDims[_iCurrentDim];
154             }
155         }
156         else
157         {
158             //normal view, all dimensions are used
159             iDim = m_piDims[_iCurrentDim];
160         }
161     }
162     else
163     {
164         //for non ArrayOf derived types, like list, tlist, mlist
165         iDim = getSize();
166     }
167
168     return iDim;
169 }
170 }
171