1 //static const char* sccsid = "@(#)math_IntegerVector.cxx 3.2 95/01/10"; // Do not delete this line. Used by sccs.
4 #define No_Standard_RangeError
5 #define No_Standard_OutOfRange
6 #define No_Standard_DimensionError
9 #include <math_IntegerVector.ixx>
11 #include <Standard_DimensionError.hxx>
12 #include <Standard_RangeError.hxx>
16 math_IntegerVector::math_IntegerVector(const Standard_Integer First,
17 const Standard_Integer Last):
22 Standard_RangeError_Raise_if(First > Last, " ");
25 math_IntegerVector::math_IntegerVector(const Standard_Integer First,
26 const Standard_Integer Last,
27 const Standard_Integer InitialValue):
32 Standard_RangeError_Raise_if(First > Last, " ");
33 Array.Init(InitialValue);
37 math_IntegerVector::math_IntegerVector(const Standard_Address Tab,
38 const Standard_Integer First,
39 const Standard_Integer Last) :
42 Array(*((const Standard_Integer *)Tab),
45 Standard_RangeError_Raise_if(First > Last, " ");
49 void math_IntegerVector::Init(const Standard_Integer InitialValue)
51 Array.Init(InitialValue);
55 math_IntegerVector::math_IntegerVector(const math_IntegerVector& Other):
57 FirstIndex(Other.FirstIndex),
58 LastIndex(Other.LastIndex),
63 void math_IntegerVector::SetFirst(const Standard_Integer First) {
65 Array.SetLower(First);
66 LastIndex = LastIndex - FirstIndex + First;
71 Standard_Real math_IntegerVector::Norm() const {
72 Standard_Real Result = 0;
73 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
74 Result = Result + Array(Index) * Array(Index);
80 Standard_Real math_IntegerVector::Norm2() const {
81 Standard_Real Result = 0;
82 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
83 Result = Result + Array(Index) * Array(Index);
89 Standard_Integer math_IntegerVector::Max() const {
91 Standard_Real X = RealFirst();
92 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
93 if(Array(Index) > X) {
102 Standard_Integer math_IntegerVector::Min() const {
103 Standard_Integer I=0;
104 Standard_Real X = RealLast();
105 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
106 if(Array(Index) < X) {
115 void math_IntegerVector::Invert() {
118 Standard_Integer Temp;
120 for(Standard_Integer Index = FirstIndex;
121 Index <= FirstIndex + Length() / 2 ; Index++) {
122 J = LastIndex + FirstIndex - Index;
124 Array(Index) = Array(J);
130 math_IntegerVector math_IntegerVector::Inverse() const {
132 math_IntegerVector Result = *this;
138 void math_IntegerVector::Set(const Standard_Integer I1,
139 const Standard_Integer I2,
140 const math_IntegerVector &V) {
142 Standard_DimensionError_Raise_if((I1 < FirstIndex) ||
145 (I2 - I1 + 1 != V.Length()), " ");
147 Standard_Integer I = V.Lower();
148 for(Standard_Integer Index = I1; Index <= I2; Index++) {
149 Array(Index) = V.Array(I);
155 void math_IntegerVector::Multiply(const Standard_Integer Right) {
157 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
158 Array(Index) = Array(Index) * Right;
163 void math_IntegerVector::Add(const math_IntegerVector& Right) {
165 Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
167 Standard_Integer I = Right.FirstIndex;
168 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
169 Array(Index) = Array(Index) + Right.Array(I);
175 void math_IntegerVector::Subtract(const math_IntegerVector& Right) {
177 Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
178 Standard_Integer I = Right.FirstIndex;
179 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
180 Array(Index) = Array(Index) - Right.Array(I);
186 math_IntegerVector math_IntegerVector::Slice(const Standard_Integer I1,
187 const Standard_Integer I2) const {
189 Standard_DimensionError_Raise_if((I1 < FirstIndex) || (I1 > LastIndex) ||
190 (I2 < FirstIndex) || (I2 > LastIndex),
194 math_IntegerVector Result(I1, I2);
195 for(Standard_Integer Index = I1; Index <= I2; Index++) {
196 Result.Array(Index) = Array(Index);
201 math_IntegerVector Result(I2, I1);
202 for(Standard_Integer Index = I1; Index >= I2; Index--) {
203 Result.Array(Index) = Array(Index);
209 Standard_Integer math_IntegerVector::Multiplied (const math_IntegerVector& Right) const {
211 Standard_Integer Result = 0;
213 Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
215 Standard_Integer I = Right.FirstIndex;
216 for(Standard_Integer Index = 0; Index < Length(); Index++) {
217 Result = Result + Array(Index) * Right.Array(I);
224 math_IntegerVector math_IntegerVector::Multiplied (const Standard_Integer Right)const {
226 math_IntegerVector Result(FirstIndex, LastIndex);
228 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
229 Result.Array(Index) = Array(Index) * Right;
234 math_IntegerVector math_IntegerVector::TMultiplied (const Standard_Integer Right)const {
236 math_IntegerVector Result(FirstIndex, LastIndex);
238 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
239 Result.Array(Index) = Array(Index) * Right;
245 math_IntegerVector math_IntegerVector::Added (const math_IntegerVector& Right) const {
247 Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
249 math_IntegerVector Result(FirstIndex, LastIndex);
251 Standard_Integer I = Right.FirstIndex;
252 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
253 Result.Array(Index) = Array(Index) + Right.Array(I);
261 math_IntegerVector math_IntegerVector::Opposite() {
263 math_IntegerVector Result(FirstIndex, LastIndex);
265 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
266 Result.Array(Index) = - Array(Index);
272 math_IntegerVector math_IntegerVector::Subtracted (const math_IntegerVector& Right) const {
274 Standard_DimensionError_Raise_if(Length() != Right.Length(), " ");
276 math_IntegerVector Result(FirstIndex, LastIndex);
278 Standard_Integer I = Right.FirstIndex;
279 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
280 Result.Array(Index) = Array(Index) - Right.Array(I);
286 void math_IntegerVector::Add (const math_IntegerVector& Left,
287 const math_IntegerVector& Right) {
289 Standard_DimensionError_Raise_if((Length() != Right.Length()) ||
290 (Right.Length() != Left.Length()), " ");
292 Standard_Integer I = Left.FirstIndex;
293 Standard_Integer J = Right.FirstIndex;
294 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
295 Array(Index) = Left.Array(I) + Right.Array(J);
302 void math_IntegerVector::Subtract (const math_IntegerVector& Left,
303 const math_IntegerVector& Right) {
305 Standard_DimensionError_Raise_if((Length() != Right.Length()) ||
306 (Right.Length() != Left.Length()), " ");
308 Standard_Integer I = Left.FirstIndex;
309 Standard_Integer J = Right.FirstIndex;
310 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
311 Array(Index) = Left.Array(I) - Right.Array(J);
318 void math_IntegerVector::Multiply(const Standard_Integer Left,
319 const math_IntegerVector& Right)
321 Standard_DimensionError_Raise_if((Length() != Right.Length()),
323 for(Standard_Integer I = FirstIndex; I <= LastIndex; I++) {
324 Array(I) = Left * Right.Array(I);
329 math_IntegerVector& math_IntegerVector::Initialized (const math_IntegerVector& Other) {
331 Standard_DimensionError_Raise_if(Length() != Other.Length(), " ");
334 Standard_Integer I = Other.FirstIndex;
336 (Other.Array).Copy(Array);
342 void math_IntegerVector::Dump(Standard_OStream& o) const
344 o << "math_IntegerVector of Range = " << Length() << "\n";
345 for(Standard_Integer Index = FirstIndex; Index <= LastIndex; Index++) {
346 o << "math_IntegerVector(" << Index << ") = " << Array(Index) << "\n";