refactor subtraction operation
[scilab.git] / scilab / modules / ast / src / c / operations / matrix_subtraction.c
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2009 - 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 "core_math.h"
14 #include "matrix_subtraction.h"
15 #include "operations_tools.h"
16 #include "string.h"
17
18 //Matrix - eye
19 int iSubstractRealIdentityToRealMatrix(double _dblReal1, double* _pdblReal2, int _iRows2, int _iCols2, double* _pdblRealOut)
20 {
21     int i = 0;
22     memcpy(_pdblRealOut, _pdblReal2, sizeof(double) * _iRows2 * _iCols2);
23     for (i = 0 ; i < Min(_iRows2, _iCols2) ; i++)
24     {
25         _pdblRealOut[i * _iRows2 + i]   -= _dblReal1;
26     }
27     return 0;
28 }
29
30 int iSubstractRealIdentityToComplexMatrix(double _dblReal1, double* _pdblReal2, double* _pdblImg2, int _iRows2, int _iCols2, double* _pdblRealOut, double* _pdblImgOut)
31 {
32     int i = 0;
33     memcpy(_pdblRealOut, _pdblReal2, sizeof(double) * _iRows2 * _iCols2);
34     memcpy(_pdblImgOut,         _pdblImg2       , sizeof(double) * _iRows2 * _iCols2);
35     for (i = 0 ; i < Min(_iRows2, _iCols2) ; i++)
36     {
37         _pdblRealOut[i * _iRows2 + i]   -= _dblReal1;
38     }
39     return 0;
40 }
41
42 int iSubstractComplexIdentityToRealMatrix(double _dblReal1, double _dblImg1, double* _pdblReal2, int _iRows2, int _iCols2, double* _pdblRealOut, double* _pdblImgOut)
43 {
44     int i = 0;
45     memcpy(_pdblRealOut, _pdblReal2, sizeof(double) * _iRows2 * _iCols2);
46     memset(_pdblImgOut,         0x00, sizeof(double) * _iRows2 * _iCols2);
47     for (i = 0 ; i < Min(_iRows2, _iCols2) ; i++)
48     {
49         _pdblRealOut[i * _iRows2 + i]   -= _dblReal1;
50         _pdblImgOut[i * _iRows2 + i]    -= _dblImg1;
51     }
52     return 0;
53 }
54
55 int iSubstractComplexIdentityToComplexMatrix(double _dblReal1, double _dblImg1, double* _pdblReal2, double* _pdblImg2, int _iRows2, int _iCols2, double* _pdblRealOut, double* _pdblImgOut)
56 {
57     int i = 0;
58     memcpy(_pdblRealOut,        _pdblReal2, sizeof(double) * _iRows2 * _iCols2);
59     memcpy(_pdblImgOut,         _pdblImg2       , sizeof(double) * _iRows2 * _iCols2);
60     for (i = 0 ; i < Min(_iRows2, _iCols2) ; i++)
61     {
62         _pdblRealOut[i * _iRows2 + i]   -= _dblReal1;
63         _pdblImgOut[i * _iRows2 + i]    -= _dblImg1;
64     }
65     return 0;
66 }
67
68 //Scalar - Matrix
69 int iSubstractRealMatrixToRealScalar(double* _pdblReal1, int* _piDims1, int _iDims1, double _dblReal2, double* _pdblRealOut)
70 {
71     int i = 0;
72     int iSize1 = GetSize(_piDims1, _iDims1);
73     for (i = 0 ; i < iSize1 ; i++)
74     {
75         _pdblRealOut[i] = _dblReal2 - _pdblReal1[i];
76     }
77     return 0;
78 }
79
80 int iSubstractComplexMatrixToRealScalar(double* _pdblReal1, double* _pdblImg1, int* _piDims1, int _iDims1, double _dblReal2, double* _pdblRealOut, double* _pdblImgOut)
81 {
82     int i = 0;
83     int iSize1 = GetSize(_piDims1, _iDims1);
84     for (i = 0 ; i < iSize1 ; i++)
85     {
86         _pdblRealOut[i] = _dblReal2 - _pdblReal1[i];
87         _pdblImgOut[i]  = - _pdblImg1[i];
88     }
89     return 0;
90 }
91
92 int iSubstractRealMatrixToComplexScalar(double* _pdblReal1, int* _piDims1, int _iDims1, double _dblReal2, double _dblImg2, double* _pdblRealOut, double* _pdblImgOut)
93 {
94     int i = 0;
95     int iSize1 = GetSize(_piDims1, _iDims1);
96     for (i = 0 ; i < iSize1 ; i++)
97     {
98         _pdblRealOut[i] = _dblReal2 - _pdblReal1[i];
99         _pdblImgOut[i]  = _dblImg2;
100     }
101     return 0;
102 }
103
104 int iSubstractComplexMatrixToComplexScalar(double* _pdblReal1, double* _pdblImg1, int* _piDims1, int _iDims1, double _dblReal2, double _dblImg2, double* _pdblRealOut, double* _pdblImgOut)
105 {
106     int i = 0;
107     int iSize1 = GetSize(_piDims1, _iDims1);
108     for (i = 0 ; i < iSize1 ; i++)
109     {
110         _pdblRealOut[i] = _dblReal2 - _pdblReal1[i];
111         _pdblImgOut[i]  = _dblImg2  - _pdblImg1[i];
112     }
113     return 0;
114 }
115
116 //Matrix - Scalar
117 int iSubstractRealScalarToRealMatrix(double _dblReal1, double* _pdblReal2, int* _piDims2, int _iDims2, double* _pdblRealOut)
118 {
119     int i = 0;
120     int iSize2 = GetSize(_piDims2, _iDims2);
121     for (i = 0 ; i < iSize2 ; i++)
122     {
123         _pdblRealOut[i] = _pdblReal2[i] - _dblReal1;
124     }
125     return 0;
126 }
127
128 int iSubstractComplexScalarToRealMatrix(double _dblReal1, double _dblImg1, double* _pdblReal2, int* _piDims2, int _iDims2, double* _pdblRealOut, double* _pdblImgOut)
129 {
130     int i = 0;
131     int iSize2 = GetSize(_piDims2, _iDims2);
132     for (i = 0 ; i < iSize2 ; i++)
133     {
134         _pdblRealOut[i] = _pdblReal2[i] - _dblReal1;
135         _pdblImgOut[i]  = - _dblImg1;
136     }
137     return 0;
138 }
139
140 int iSubstractRealScalarToComplexMatrix(double _dblReal1, double* _pdblReal2, double* _pdblImg2, int* _piDims2, int _iDims2, double* _pdblRealOut, double* _pdblImgOut)
141 {
142     int i = 0;
143     int iSize2 = GetSize(_piDims2, _iDims2);
144     for (i = 0 ; i < iSize2 ; i++)
145     {
146         _pdblRealOut[i] = _pdblReal2[i] - _dblReal1;
147         _pdblImgOut[i]  = _pdblImg2[i];
148     }
149     return 0;
150 }
151
152 int iSubstractComplexScalarToComplexMatrix(double _dblReal1, double _dblImg1, double* _pdblReal2, double* _pdblImg2, int* _piDims2, int _iDims2, double* _pdblRealOut, double* _pdblImgOut)
153 {
154     int i = 0;
155     int iSize2 = GetSize(_piDims2, _iDims2);
156     for (i = 0 ; i < iSize2 ; i++)
157     {
158         _pdblRealOut[i] = _pdblReal2[i] - _dblReal1;
159         _pdblImgOut[i]  = _pdblImg2[i] - _dblImg1;
160     }
161     return 0;
162 }
163
164
165 //Matrix - Matrix
166 int iSubstractRealMatrixToRealMatrix(double* _pdblReal1, double* _pdblReal2, int* _piDims, int _iDims, double* _pdblRealOut)
167 {
168     int i = 0;
169     int iSize = GetSize(_piDims, _iDims);
170     for (i = 0 ; i < iSize ; i++)
171     {
172         _pdblRealOut[i] = _pdblReal2[i] - _pdblReal1[i];
173     }
174     return 0;
175 }
176
177 int iSubstractComplexMatrixToRealMatrix(double* _pdblReal1, double* _pdblImg1, double* _pdblReal2, int* _piDims, int _iDims, double* _pdblRealOut, double* _pdblImgOut)
178 {
179     int i = 0;
180     int iSize = GetSize(_piDims, _iDims);
181     for (i = 0 ; i < iSize ; i++)
182     {
183         _pdblRealOut[i] = _pdblReal2[i] - _pdblReal1[i];
184         _pdblImgOut[i]  = - _pdblImg1[i];
185     }
186     return 0;
187 }
188
189 int iSubstractRealMatrixToComplexMatrix(double* _pdblReal1, double* _pdblReal2, double* _pdblImg2, int* _piDims, int _iDims, double* _pdblRealOut, double* _pdblImgOut)
190 {
191     int i = 0;
192     int iSize = GetSize(_piDims, _iDims);
193     for (i = 0 ; i < iSize ; i++)
194     {
195         _pdblRealOut[i] = _pdblReal2[i] - _pdblReal1[i];
196         _pdblImgOut[i]  = _pdblImg2[i];
197     }
198     return 0;
199 }
200
201 int iSubstractComplexMatrixToComplexMatrix(double* _pdblReal1, double* _pdblImg1, double* _pdblReal2, double* _pdblImg2, int* _piDims, int _iDims, double* _pdblRealOut, double* _pdblImgOut)
202 {
203     int i = 0;
204     int iSize = GetSize(_piDims, _iDims);
205     for (i = 0 ; i < iSize ; i++)
206     {
207         _pdblRealOut[i] = _pdblReal2[i] - _pdblReal1[i];
208         _pdblImgOut[i]  = _pdblImg2[i] - _pdblImg1[i];
209     }
210     return 0;
211 }
212
213