00001 #include "arraybse.h"
00002 #include "vecbse.h"
00003 #include "matbse.h"
00004 #include "bnengine.h"
00005
00006 #include <signal.h>
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 CAMarrayBase::CAMarrayBase()
00033 : Structure()
00034 {
00035 DataP = 0;
00036 typeValue = 0;
00037 referenceFlag = 0;
00038 arrayBaseReferenceCount = 0;
00039 }
00040
00041 CAMarrayBase::CAMarrayBase(int d_type)
00042 : Structure()
00043 {
00044 DataP = 0;
00045 typeValue = d_type;
00046 referenceFlag = 0;
00047 arrayBaseReferenceCount = 0;
00048 }
00049
00050 CAMarrayBase::CAMarrayBase(const CAMarrayBase& A)
00051 :Structure(A.Structure)
00052 {
00053 if(A.DataP == 0)
00054 {DataP = 0;}
00055 else
00056 {
00057 if(A.referenceFlag == 1)
00058 {DataP = A.DataP; }
00059 else if(A.DataP->getTemporaryFlag() == 1)
00060 {
00061 DataP = new CAMdataHandler(*(A.DataP));
00062 DataP ->setReferenceCount(1);
00063 }
00064 else
00065 {
00066 A.Structure.initializeMinStructure(Structure);
00067 DataP = new CAMdataHandler(Structure.getFullDataCount(),A.DataP->getDataType());
00068 DataP->setReferenceCount(1);
00069
00070
00071
00072 CAMbinaryEngine::doubleAequalToB(Structure, *DataP, A.Structure, *A.DataP);
00073
00074
00075
00076 }
00077 }
00078 typeValue = A.typeValue;
00079 referenceFlag = 0;
00080 arrayBaseReferenceCount = 0;
00081 }
00082
00083 CAMarrayBase::CAMarrayBase(int d_type, const CAMrange& R1, const CAMrange& R2 ,
00084 const CAMrange& R3 , const CAMrange&R4 ,
00085 const CAMrange& R5 , const CAMrange&R6 ,
00086 const CAMrange& R7)
00087 :Structure(R1,R2,R3,R4,R5,R6,R7)
00088 {
00089 DataP = new CAMdataHandler(Structure.getFullDataCount(),d_type);
00090 DataP->setReferenceCount(1);
00091 typeValue = d_type;
00092 referenceFlag = 0;
00093 arrayBaseReferenceCount = 0;
00094 }
00095
00096
00097
00098
00099
00100
00101 CAMarrayBase::~CAMarrayBase()
00102 {
00103 if(DataP != 0)
00104 {
00105 DataP->decrementReferenceCount();
00106 if(DataP->getReferenceCount() < 0)
00107 {
00108 cerr << " Error : Reference Count < 0" << endl;
00109 }
00110 if(DataP->getReferenceCount() == 0) delete DataP;
00111 }
00112 }
00113
00114
00115
00116
00117
00118 void CAMarrayBase::operator =(double value)
00119 {
00120
00121
00122
00123 if(DataP == 0)
00124 {
00125 Structure.initialize(_(1,1));
00126 DataP = new CAMdataHandler(1,CAMType::typeDouble);
00127 DataP->setReferenceCount(1);
00128 referenceFlag = 0;
00129 arrayBaseReferenceCount = 0;
00130 }
00131 else
00132 {
00133 CAMstructureBase AStructure(_(1,1));
00134 if(Structure.isConformingTo(AStructure) != 1)
00135 {CAMarrayBase::nonConformingMessage(Structure,AStructure);}
00136 }
00137
00138 CAMbinaryEngine::doubleAequalToAlpha(Structure, *DataP, value);
00139 }
00140 void CAMarrayBase::operator =( const CAMarrayBase& A)
00141 {
00142
00143
00144
00145 if(DataP == 0)
00146 {
00147 A.Structure.initializeMinStructure(Structure);
00148 DataP = new CAMdataHandler(Structure.getFullDataCount(),typeValue);
00149 DataP->setReferenceCount(1);
00150 typeValue = CAMType::typeDouble;
00151 referenceFlag = 0;
00152 arrayBaseReferenceCount = 0;
00153 }
00154 else
00155 {
00156 if(Structure.isConformingTo(A.Structure) != 1)
00157 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00158 }
00159
00160 CAMbinaryEngine::doubleAequalToB(Structure, *DataP, A.Structure, *A.DataP);
00161 }
00162 ostream& operator <<(ostream& out_stream, const CAMarrayBase& A)
00163 {
00164 const long* beginPtr = A.Structure.indexBegin.getDataPointer();
00165 const long* endPtr = A.Structure.indexEnd.getDataPointer();
00166 const long* stridePtr = A.Structure.indexStride.getDataPointer();
00167 long i1, i2, i3, i4, i5, i6, i7;
00168 long i;
00169
00170 int saveWidth=out_stream.width();
00171 double OutValue;
00172
00173
00174
00175 switch(A.Structure.dataDimension)
00176 {
00177 case 1 :
00178 for(i1 = *beginPtr; i1 <= *endPtr; i1+= *stridePtr)
00179 {
00180 out_stream.width(saveWidth);
00181 OutValue =*((double*)A.getDataPointer(i1));
00182 if(OutValue < 0 )
00183 out_stream << OutValue <<" ";
00184 else
00185 out_stream << " " << OutValue <<" ";
00186
00187
00188 }
00189 break;
00190
00191 case 2 :
00192
00193
00194
00195 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00196 i >= 1; i--)
00197 {
00198 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00199
00200 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00201 {
00202 out_stream.width(saveWidth);
00203 OutValue =*((double*)A.getDataPointer(i1,i2));
00204 if(OutValue < 0 )
00205 out_stream << OutValue <<" ";
00206 else
00207 out_stream << " " << OutValue <<" ";
00208
00209
00210 }
00211 out_stream << endl;
00212 }
00213
00214 break;
00215
00216 case 3 :
00217 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00218 {
00219 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00220 i >= 1; i--)
00221 {
00222 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00223
00224 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00225 {
00226
00227 out_stream.width(saveWidth);
00228 OutValue =*((double*)A.getDataPointer(i1,i2,i3));
00229 if(OutValue < 0 )
00230 out_stream << OutValue <<" ";
00231 else
00232 out_stream << " " << OutValue <<" ";
00233
00234
00235 }
00236 out_stream << endl;
00237 }
00238 out_stream << endl << endl;
00239 }
00240
00241 break;
00242
00243 case 4 :
00244
00245 for(i4 = *(beginPtr + 3); i4 <= *(endPtr + 3); i4+= *(stridePtr + 3))
00246 {
00247 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00248 {
00249 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00250 i >= 1; i--)
00251 {
00252 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00253
00254 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00255 {
00256 out_stream.width(saveWidth);
00257 OutValue =*((double*)A.getDataPointer(i1,i2,i3,i4));
00258 if(OutValue < 0 )
00259 out_stream << OutValue <<" ";
00260 else
00261 out_stream << " " << OutValue <<" ";
00262
00263
00264 }
00265 out_stream << endl;
00266 }
00267 out_stream << endl << endl;
00268 }
00269 out_stream << endl << endl;
00270 }
00271
00272 break;
00273
00274 case 5 :
00275
00276 for(i5 = *(beginPtr + 4); i5 <= *(endPtr + 4); i5+= *(stridePtr + 4))
00277 {
00278 for(i4 = *(beginPtr + 3); i4 <= *(endPtr + 3); i4+= *(stridePtr + 3))
00279 {
00280 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00281 {
00282 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00283 i >= 1; i--)
00284 {
00285 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00286
00287 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00288 {
00289
00290 out_stream.width(saveWidth);
00291 OutValue =*((double*)A.getDataPointer(i1,i2,i3,i4,i5));
00292 if(OutValue < 0 )
00293 out_stream << OutValue <<" ";
00294 else
00295 out_stream << " " << OutValue <<" ";
00296
00297
00298 }
00299 out_stream << endl;
00300 }
00301 out_stream << endl << endl;
00302 }
00303 out_stream << endl << endl;
00304 }
00305 out_stream << endl << endl;
00306 }
00307
00308 case 6 :
00309
00310 for(i6 = *(beginPtr + 5); i6 <= *(endPtr + 5); i6+= *(stridePtr + 5))
00311 {
00312 for(i5 = *(beginPtr + 4); i5 <= *(endPtr + 4); i5+= *(stridePtr + 4))
00313 {
00314 for(i4 = *(beginPtr + 3); i4 <= *(endPtr + 3); i4+= *(stridePtr + 3))
00315 {
00316 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00317 {
00318 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00319 i >= 1; i--)
00320 {
00321 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00322
00323 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00324 {
00325 out_stream.width(saveWidth);
00326 OutValue =*((double*)A.getDataPointer(i1,i2,i3,i4,i5,i6));
00327 if(OutValue < 0 )
00328 out_stream << OutValue <<" ";
00329 else
00330 out_stream << " " << OutValue <<" ";
00331
00332
00333 }
00334 out_stream << endl;
00335 }
00336 out_stream << endl << endl;
00337 }
00338 out_stream << endl << endl;
00339 }
00340 out_stream << endl << endl;
00341 }
00342 out_stream << endl << endl;
00343 }
00344 break;
00345
00346
00347 case 7 :
00348
00349 for(i7 = *(beginPtr + 6); i7 <= *(endPtr + 6); i7+= *(stridePtr + 6))
00350 {
00351 for(i6 = *(beginPtr + 5); i6 <= *(endPtr + 5); i6+= *(stridePtr + 5))
00352 {
00353 for(i5 = *(beginPtr + 4); i5 <= *(endPtr + 4); i5+= *(stridePtr + 4))
00354 {
00355 for(i4 = *(beginPtr + 3); i4 <= *(endPtr + 3); i4+= *(stridePtr + 3))
00356 {
00357 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00358 {
00359 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00360 i >= 1; i--)
00361 {
00362 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00363
00364 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00365 {
00366
00367 out_stream.width(saveWidth);
00368 OutValue =*((double*)A.getDataPointer(i1,i2,i3,i4,i5,i6,i7));
00369 if(OutValue < 0 )
00370 out_stream << OutValue <<" ";
00371 else
00372 out_stream << " " << OutValue <<" ";
00373
00374
00375 }
00376 out_stream << endl;
00377 }
00378 out_stream << endl << endl;
00379 }
00380 out_stream << endl << endl;
00381 }
00382 out_stream << endl << endl;
00383 }
00384 out_stream << endl << endl;
00385 }
00386 out_stream << endl << endl;
00387 }
00388 break;
00389 }
00390 return(out_stream);
00391
00392 }
00393 istream& operator >>(istream& in_stream, CAMarrayBase& A)
00394 {
00395 const long* beginPtr = A.Structure.indexBegin.getDataPointer();
00396 const long* endPtr = A.Structure.indexEnd.getDataPointer();
00397 const long* stridePtr = A.Structure.indexStride.getDataPointer();
00398 long i1, i2, i3, i4, i5, i6, i7;
00399 long i;
00400
00401 if( A.Structure.getFullDataCount() == 0)
00402 {CAMarrayBase::nullOperandError(">>");}
00403
00404
00405
00406 switch(A.Structure.dataDimension)
00407 {
00408 case 1 :
00409 for(i1 = *beginPtr; i1 <= *endPtr; i1+= *stridePtr)
00410 {
00411 if( !( in_stream >> *((double*)A.getDataPointer(i1))))
00412 CAMarrayBase::inputSizeError();
00413
00414
00415 }
00416 break;
00417
00418 case 2 :
00419
00420
00421
00422 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00423 i >= 1; i--)
00424 {
00425 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00426
00427 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00428 {
00429 if( !( in_stream >> *((double*)A.getDataPointer(i1,i2))))
00430 CAMarrayBase::inputSizeError();
00431
00432
00433 }}
00434
00435 break;
00436
00437 case 3 :
00438 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00439 {
00440 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00441 i >= 1; i--)
00442 {
00443 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00444
00445 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00446 {
00447
00448 if( !( in_stream >> *((double*)A.getDataPointer(i1,i2,i3))))
00449 CAMarrayBase::inputSizeError();
00450
00451
00452 }}}
00453
00454 break;
00455
00456 case 4 :
00457
00458 for(i4 = *(beginPtr + 3); i4 <= *(endPtr + 3); i4+= *(stridePtr + 3))
00459 {
00460 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00461 {
00462 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00463 i >= 1; i--)
00464 {
00465 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00466
00467 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00468 {
00469 if( !( in_stream >> *((double*)A.getDataPointer(i1,i2,i3,i4))))
00470 CAMarrayBase::inputSizeError();
00471
00472
00473 }}}}
00474
00475 break;
00476
00477 case 5 :
00478
00479 for(i5 = *(beginPtr + 4); i5 <= *(endPtr + 4); i5+= *(stridePtr + 4))
00480 {
00481 for(i4 = *(beginPtr + 3); i4 <= *(endPtr + 3); i4+= *(stridePtr + 3))
00482 {
00483 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00484 {
00485 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00486 i >= 1; i--)
00487 {
00488 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00489
00490 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00491 {
00492
00493 if( !( in_stream >> *((double*)A.getDataPointer(i1,i2,i3,i4,i5))))
00494 CAMarrayBase::inputSizeError();
00495
00496
00497 }}}}}
00498
00499 case 6 :
00500
00501 for(i6 = *(beginPtr + 5); i6 <= *(endPtr + 5); i6+= *(stridePtr + 5))
00502 {
00503 for(i5 = *(beginPtr + 4); i5 <= *(endPtr + 4); i5+= *(stridePtr + 4))
00504 {
00505 for(i4 = *(beginPtr + 3); i4 <= *(endPtr + 3); i4+= *(stridePtr + 3))
00506 {
00507 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00508 {
00509 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00510 i >= 1; i--)
00511 {
00512 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00513
00514 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00515 {
00516
00517 if( !( in_stream >> *((double*)A.getDataPointer(i1,i2,i3,i4,i5,i6))))
00518 CAMarrayBase::inputSizeError();
00519
00520
00521 }}}}}}
00522 break;
00523
00524
00525 case 7 :
00526
00527 for(i7 = *(beginPtr + 6); i7 <= *(endPtr + 6); i7+= *(stridePtr + 6))
00528 {
00529 for(i6 = *(beginPtr + 5); i6 <= *(endPtr + 5); i6+= *(stridePtr + 5))
00530 {
00531 for(i5 = *(beginPtr + 4); i5 <= *(endPtr + 4); i5+= *(stridePtr + 4))
00532 {
00533 for(i4 = *(beginPtr + 3); i4 <= *(endPtr + 3); i4+= *(stridePtr + 3))
00534 {
00535 for(i3 = *(beginPtr + 2); i3 <= *(endPtr + 2); i3+= *(stridePtr + 2))
00536 {
00537 for(i = ((*(endPtr +1) - *(beginPtr +1))/(*(stridePtr + 1))) + 1;
00538 i >= 1; i--)
00539 {
00540 i2 = *(beginPtr +1) + (i-1)*(*(stridePtr + 1));
00541
00542 for(i1 = *beginPtr; i1 <= *endPtr; i1 += *stridePtr)
00543 {
00544
00545 if( !( in_stream >> *((double*)A.getDataPointer(i1,i2,i3,i4,i5,i6,i7))))
00546 CAMarrayBase::inputSizeError();
00547
00548
00549 }}}}}}}
00550 break;
00551 }
00552 return(in_stream);
00553
00554 }
00555
00556
00557
00558
00559
00560
00561
00562 void CAMarrayBase::initialize()
00563 {
00564 Structure.initialize();
00565 if(DataP != 0)
00566 {
00567 DataP->decrementReferenceCount();
00568 if(DataP->getReferenceCount() == 0) delete DataP;
00569 }
00570 DataP = 0;
00571 typeValue = 0;
00572 referenceFlag = 0;
00573 arrayBaseReferenceCount = 0;
00574 }
00575
00576 void CAMarrayBase::initialize(int d_type)
00577 {
00578 Structure.initialize();
00579 if(DataP != 0)
00580 {
00581 DataP->decrementReferenceCount();
00582 if(DataP->getReferenceCount() == 0) delete DataP;
00583 }
00584 DataP = 0;
00585 typeValue = d_type;
00586 referenceFlag = 0;
00587 arrayBaseReferenceCount = 0;
00588 }
00589
00590 void CAMarrayBase::initialize(const CAMarrayBase& A)
00591 {
00592
00593
00594
00595 if(DataP != 0)
00596 {
00597 DataP->decrementReferenceCount();
00598 if(DataP->getReferenceCount() == 0) delete DataP;
00599 }
00600
00601 if(A.DataP != 0)
00602 {
00603 A.Structure.initializeMinStructure(Structure);
00604
00605 DataP = new CAMdataHandler(Structure.getFullDataCount(),A.DataP->getDataType());
00606 DataP->setReferenceCount(1);
00607 CAMbinaryEngine::doubleAequalToB(Structure, *DataP, A.Structure, *A.DataP);
00608 }
00609 else
00610 {
00611 DataP = 0;
00612 Structure.initialize();
00613 }
00614
00615 typeValue = A.typeValue;
00616 referenceFlag = 0;
00617 arrayBaseReferenceCount = 0;
00618 }
00619
00620 void CAMarrayBase::initialize(int d_type, const CAMrange& R1, const CAMrange& R2 ,
00621 const CAMrange& R3 , const CAMrange&R4 ,
00622 const CAMrange& R5 , const CAMrange&R6 ,
00623 const CAMrange& R7 )
00624 {
00625 Structure.initialize(R1,R2,R3,R4,R5,R6,R7);
00626
00627 if(DataP != 0)
00628 {
00629 DataP->decrementReferenceCount();
00630 if(DataP->getReferenceCount() == 0) delete DataP;
00631 }
00632
00633 DataP = new CAMdataHandler(Structure.getFullDataCount(),d_type);
00634 DataP->setReferenceCount(1);
00635 typeValue = d_type;
00636 referenceFlag = 0;
00637 arrayBaseReferenceCount = 0;
00638 }
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648 void CAMarrayBase::initializeReturnArgument(const CAMarrayBase& A)
00649 {
00650 A.Structure.initializeMinStructure(Structure);
00651 DataP = new CAMdataHandler(Structure.getFullDataCount(),A.DataP->getDataType());
00652 DataP->setReferenceCount(1);
00653 }
00654 void CAMarrayBase::initializeReturnArgument(const CAMstructureBase& S, int dataT)
00655 {
00656 S.initializeMinStructure(Structure);
00657 DataP = new CAMdataHandler(Structure.getFullDataCount(), dataT);
00658 DataP->setReferenceCount(1);
00659 }
00660 void CAMarrayBase::initializeMinDuplicate(const CAMarrayBase& A)
00661 {
00662
00663 if(A.DataP == 0) return;
00664
00665 long i;
00666 long icount = 0;
00667 long dimension = 0;
00668
00669 for(i = 1; i <= A.Structure.getDimension(); i++)
00670 if(A.Structure[i].getIndexCount() != 1) dimension++;
00671
00672
00673 if(dimension == 0) dimension = 1;
00674 Structure.initialize(dimension);
00675
00676
00677 for(i = 1; i <= A.Structure.getDimension(); i++)
00678 {
00679 if(A.Structure[i].getIndexCount() != 1)
00680 {
00681 Structure.indexBegin[icount] = 1;
00682 Structure.indexBeginBase[icount] = 1;
00683 Structure.indexEndBase[icount] = A.Structure[i].getIndexCount();
00684 Structure.indexEnd[icount] = A.Structure[i].getIndexCount();
00685 Structure.indexStride[icount] = 1;
00686 icount++;
00687 }
00688 }
00689
00690 if(icount == 0)
00691 {
00692 Structure.indexBegin[icount] = 1;
00693 Structure.indexBeginBase[icount] = 1;
00694 Structure.indexEndBase[icount] = 1;
00695 Structure.indexEnd[icount] = 1;
00696 Structure.indexStride[icount] = 1;
00697 }
00698 DataP = new CAMdataHandler(Structure.getFullDataCount(), A.typeValue);
00699 DataP->setReferenceCount(1);
00700
00701
00702
00703 *this = A;
00704 }
00705
00706
00707
00708
00709
00710 CAMarrayBase CAMarrayBase::operator-() const
00711 {
00712
00713
00714
00715 CAMarrayBase S;
00716 S.initializeReturnArgument(*this);
00717
00718 CAMbinaryEngine::doubleAequalToMinusB(S.Structure, *S.DataP, Structure, *DataP);
00719 S.setTemporaryFlag();
00720 return S;
00721 }
00722
00723 CAMarrayBase CAMarrayBase::operator+(const CAMarrayBase& A) const
00724 {
00725 if(Structure.isConformingTo(A.Structure) != 1)
00726 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00727
00728
00729
00730 CAMarrayBase S;
00731 S.initializeReturnArgument(A.Structure,A.DataP->getDataType());
00732
00733 CAMbinaryEngine::doubleCequalAplusB(Structure, *DataP, A.Structure, *A.DataP,
00734 S.Structure, *S.DataP);
00735
00736 S.setTemporaryFlag();
00737 return S;
00738 }
00739 CAMarrayBase CAMarrayBase::operator-(const CAMarrayBase& A) const
00740 {
00741 if(Structure.isConformingTo(A.Structure) != 1)
00742 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00743
00744
00745
00746 CAMarrayBase S;
00747 S.initializeReturnArgument(A.Structure,A.DataP->getDataType());
00748
00749 CAMbinaryEngine::doubleCequalAminusB(Structure, *DataP, A.Structure, *A.DataP,
00750 S.Structure, *S.DataP);
00751
00752 S.setTemporaryFlag();
00753 return S;
00754 }
00755 CAMarrayBase CAMarrayBase::operator*(const CAMarrayBase& A) const
00756 {
00757 if(Structure.isConformingTo(A.Structure) != 1)
00758 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00759
00760
00761
00762 CAMarrayBase S;
00763 S.initializeReturnArgument(A);
00764
00765 CAMbinaryEngine::doubleCequalAtimesB(Structure, *DataP, A.Structure, *A.DataP,
00766 S.Structure, *S.DataP);
00767
00768 S.setTemporaryFlag();
00769 return S;
00770 }
00771 CAMarrayBase CAMarrayBase::operator/(const CAMarrayBase& A) const
00772 {
00773 if(Structure.isConformingTo(A.Structure) != 1)
00774 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00775
00776
00777
00778 CAMarrayBase S;
00779 S.initializeReturnArgument(A);
00780
00781 CAMbinaryEngine::doubleCequalAdivideB(Structure, *DataP, A.Structure, *A.DataP,
00782 S.Structure, *S.DataP);
00783
00784 S.setTemporaryFlag();
00785 return S;
00786 }
00787
00788
00789
00790
00791
00792
00793 void CAMarrayBase::operator+=(const CAMarrayBase& A)
00794 {
00795 if(Structure.isConformingTo(A.Structure) != 1)
00796 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00797
00798
00799
00800
00801 CAMbinaryEngine::doubleAplusEqualB(Structure, *DataP, A.Structure, *A.DataP);
00802 }
00803 void CAMarrayBase::operator-=(const CAMarrayBase& A)
00804 {
00805 if(Structure.isConformingTo(A.Structure) != 1)
00806 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00807
00808
00809
00810
00811 CAMbinaryEngine::doubleAminusEqualB(Structure, *DataP, A.Structure, *A.DataP);
00812 }
00813 void CAMarrayBase::operator*=(const CAMarrayBase& A)
00814 {
00815 if(Structure.isConformingTo(A.Structure) != 1)
00816 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00817
00818
00819
00820
00821 CAMbinaryEngine::doubleAtimesEqualB(Structure, *DataP, A.Structure, *A.DataP);
00822 }
00823
00824 void CAMarrayBase::operator/=(const CAMarrayBase& A)
00825 {
00826 if(Structure.isConformingTo(A.Structure) != 1)
00827 {CAMarrayBase::nonConformingMessage(Structure,A.Structure);}
00828
00829
00830
00831
00832 CAMbinaryEngine::doubleAdivideEqualB(Structure, *DataP, A.Structure, *A.DataP);
00833 }
00834
00835
00836
00837
00838
00839 CAMarrayBase CAMarrayBase::operator +(const double value) const
00840 {
00841
00842
00843
00844 CAMstructureBase AStructure(_(1,1));
00845 if(Structure.isConformingTo(AStructure) != 1)
00846 {CAMarrayBase::nonConformingMessage(Structure,AStructure);}
00847
00848 CAMarrayBase S(*this);
00849 CAMbinaryEngine::doubleAplusEqualAlpha(S.Structure, *(S.DataP), value);
00850
00851 S.setTemporaryFlag();
00852 return S;
00853 }
00854 CAMarrayBase operator +(const double value, const CAMarrayBase& A)
00855 {
00856
00857
00858
00859 CAMstructureBase BStructure(_(1,1));
00860 if(A.Structure.isConformingTo(BStructure) != 1)
00861 {CAMarrayBase::nonConformingMessage(A.Structure,BStructure);}
00862
00863 CAMarrayBase S(A);
00864 CAMbinaryEngine::doubleAplusEqualAlpha(S.Structure, *(S.DataP), value);
00865
00866 S.setTemporaryFlag();
00867 return S;
00868 }
00869
00870 CAMarrayBase CAMarrayBase::operator -(const double value) const
00871 {
00872
00873
00874
00875 CAMstructureBase AStructure(_(1,1));
00876 if(Structure.isConformingTo(AStructure) != 1)
00877 {CAMarrayBase::nonConformingMessage(Structure,AStructure);}
00878
00879 CAMarrayBase S(*this);
00880 CAMbinaryEngine::doubleAminusEqualAlpha(S.Structure, *(S.DataP), value);
00881
00882 S.setTemporaryFlag();
00883 return S;
00884 }
00885
00886 CAMarrayBase operator -(const double value, const CAMarrayBase& A)
00887 {
00888
00889
00890
00891 CAMstructureBase BStructure(_(1,1));
00892 if(A.Structure.isConformingTo(BStructure) != 1)
00893 {CAMarrayBase::nonConformingMessage(A.Structure,BStructure);}
00894
00895 CAMarrayBase S(A);
00896 CAMbinaryEngine::doubleAminusEqualAlpha(S.Structure, *(S.DataP), value);
00897
00898 S.setTemporaryFlag();
00899 return S;
00900 }
00901
00902 void CAMarrayBase::operator +=(const double value)
00903 {
00904
00905
00906
00907 CAMstructureBase AStructure(_(1,1));
00908 if(Structure.isConformingTo(AStructure) != 1)
00909 {CAMarrayBase::nonConformingMessage(Structure,AStructure);}
00910
00911 CAMbinaryEngine::doubleAplusEqualAlpha(Structure, *(DataP), value);
00912 }
00913
00914 void CAMarrayBase::operator -=(const double value)
00915 {
00916
00917
00918
00919 CAMstructureBase AStructure(_(1,1));
00920 if(Structure.isConformingTo(AStructure) != 1)
00921 {CAMarrayBase::nonConformingMessage(Structure,AStructure);}
00922
00923 CAMbinaryEngine::doubleAminusEqualAlpha(Structure, *(DataP), value);
00924 }
00925
00926 CAMarrayBase CAMarrayBase::operator*(double value) const
00927 {
00928
00929
00930
00931 CAMarrayBase S(*this);
00932 CAMbinaryEngine::doubleAtimesEqualAlpha(S.Structure, *S.DataP, value);
00933 S.setTemporaryFlag();
00934 return S;
00935 }
00936
00937 CAMarrayBase operator *(double value, const CAMarrayBase& A)
00938 {
00939
00940
00941
00942 CAMarrayBase S(A);
00943 CAMbinaryEngine::doubleAtimesEqualAlpha(S.Structure, *S.DataP, value);
00944 S.setTemporaryFlag();
00945 return S;
00946 }
00947
00948 CAMarrayBase CAMarrayBase::operator /(double value) const
00949 {
00950
00951
00952
00953 CAMarrayBase S(*this);
00954 CAMbinaryEngine::doubleAdivideEqualAlpha(S.Structure, *S.DataP, value);
00955 S.setTemporaryFlag();
00956 return S;
00957 }
00958
00959 CAMarrayBase operator /(double value, const CAMarrayBase& A)
00960 {
00961
00962
00963
00964 CAMarrayBase S(A);
00965 CAMbinaryEngine::doubleAdivideEqualAlpha(S.Structure, *S.DataP, value);
00966 S.setTemporaryFlag();
00967 return S;
00968 }
00969
00970 void CAMarrayBase::operator *=(double value)
00971 {
00972
00973
00974
00975 CAMbinaryEngine::doubleAtimesEqualAlpha(Structure, *DataP, value);
00976 }
00977
00978 void CAMarrayBase::operator /=(double value)
00979 {
00980 CAMbinaryEngine::doubleAdivideEqualAlpha(Structure, *DataP, value);
00981 }
00982
00983
00984
00985 void CAMarrayBase::setToValue(double value)
00986 {
00987
00988
00989
00990 CAMbinaryEngine::doubleAequalToAlpha(Structure, *DataP, value);
00991 }
00992
00993 CAMarrayBase CAMarrayBase::plusValue(double value)
00994 {
00995
00996
00997
00998 CAMarrayBase S(*this);
00999 CAMbinaryEngine::doubleAplusEqualAlpha(S.Structure, *S.DataP, value);
01000 S.setTemporaryFlag();
01001 return S;
01002 }
01003
01004 CAMarrayBase CAMarrayBase::minusValue(double value)
01005 {
01006
01007
01008
01009 CAMarrayBase S(*this);
01010 CAMbinaryEngine::doubleAminusEqualAlpha(S.Structure, *S.DataP, value);
01011 S.setTemporaryFlag();
01012 return S;
01013 }
01014
01015
01016
01017
01018
01019
01020 void CAMarrayBase::exchangeContentsWith(CAMarrayBase& B)
01021 {
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032 CAMstructureBase S_temp(Structure);
01033 CAMdataHandler* DataP_temp = DataP;
01034 int typeValue_temp = typeValue;
01035 int referenceFlag_temp = referenceFlag;
01036 long arrayBaseReferenceCount_temp = arrayBaseReferenceCount;
01037
01038 Structure.initialize(B.Structure);
01039 DataP = B.DataP;
01040 typeValue = B.typeValue;
01041 referenceFlag = B.referenceFlag;
01042 arrayBaseReferenceCount = B.arrayBaseReferenceCount;
01043
01044 B.Structure.initialize(S_temp);
01045 B.DataP = DataP_temp;
01046 B.typeValue = typeValue_temp;
01047 B.referenceFlag = referenceFlag_temp;
01048 B.arrayBaseReferenceCount = arrayBaseReferenceCount_temp;
01049 }
01050
01051 void CAMarrayBase::initializeReferenceDuplicate(const CAMarrayBase& B)
01052 {
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063 if(DataP != 0)
01064 {
01065 DataP->decrementReferenceCount();
01066 if(DataP->getReferenceCount() == 0) delete DataP;
01067 }
01068
01069 Structure.initialize(B.Structure);
01070 DataP = B.DataP;
01071 DataP->incrementReferenceCount();
01072 DataP->incrementReferenceCount();
01073 typeValue = B.typeValue;
01074 referenceFlag = 1;
01075 arrayBaseReferenceCount = 0;
01076 }
01077
01078
01079
01080
01081
01082 CAMmatrixBase CAMarrayBase::asMatrix() const
01083 {
01084 CAMmatrixBase S;
01085 if(DataP == 0) return S;
01086
01087 CAMrange R1; CAMrange R2;
01088 long i;
01089 long dimension = 0;
01090
01091 for(i = 1; i <= getDimension(); i++)
01092 {
01093 if(Structure[i].getIndexCount() != 1)
01094 {
01095 dimension++;
01096 if(dimension == 1)
01097 R1.initialize(Structure[i].getIndexBase(),Structure[i].getIndexBound());
01098 if(dimension == 2)
01099 R2.initialize(Structure[i].getIndexBase(),Structure[i].getIndexBound());
01100 }
01101 }
01102 switch (dimension)
01103 {
01104 case 0 :
01105 R1.initialize(Structure[1].getIndexBase(),Structure[1].getIndexBound());
01106 R2.initialize(Structure[1].getIndexBaseBase(),Structure[1].getIndexBaseBase());
01107 break;
01108
01109 case 1 :
01110 R2.initialize(Structure[1].getIndexBaseBase(),Structure[1].getIndexBaseBase());
01111 break;
01112
01113 case 2 :
01114 break;
01115 default :
01116 CAMarrayBase::objectConversionError(Structure);
01117 }
01118
01119
01120 S.initialize(CAMType::typeDouble, R1,R2);
01121 CAMbinaryEngine::doubleAequalToB(S.Structure, *(S.DataP), Structure, *DataP);
01122
01123
01124 S.setTemporaryFlag();
01125 return S;
01126 }
01127 CAMvectorBase CAMarrayBase::asVector() const
01128 {
01129 CAMvectorBase S;
01130 if(DataP == 0) return S;
01131
01132 CAMrange R1;
01133 long i;
01134 long dimension = 0;
01135
01136 for(i = 1; i <= getDimension(); i++)
01137 {
01138 if(Structure[i].getIndexCount() != 1)
01139 {
01140 dimension++;
01141 if(dimension == 1)
01142 R1.initialize(Structure[i].getIndexBase(),Structure[i].getIndexBound());
01143 }
01144 }
01145 switch (dimension)
01146 {
01147 case 0 :
01148 R1.initialize(Structure[1].getIndexBase(),Structure[1].getIndexBound());
01149 break;
01150
01151 case 1 :
01152 break;
01153 default :
01154 CAMarrayBase::objectConversionError(Structure);
01155
01156 }
01157
01158
01159 S.initialize(CAMType::typeDouble, R1);
01160 CAMbinaryEngine::doubleAequalToB(S.Structure, *(S.DataP), Structure, *DataP);
01161
01162
01163 S.setTemporaryFlag();
01164 return S;
01165 }
01166
01167
01168
01169
01170
01171 CAMstructureBase& CAMarrayBase::operator[](long i)
01172 {
01173 if((i < 0)||(i > Structure.dataDimension))
01174 {CAMstructureBase::illegalDimension(i, Structure.dataDimension);}
01175
01176 Structure.exchangeReferenceIndex(i);
01177
01178 return Structure;
01179 }
01180
01181 const CAMstructureBase& CAMarrayBase::operator[](long i) const
01182 {
01183 if((i < 0)||(i > Structure.dataDimension))
01184 {CAMstructureBase::illegalDimension(i, Structure.dataDimension);}
01185
01186 Structure.exchangeReferenceIndex(i);
01187
01188 return Structure;
01189 }
01190
01191
01192
01193
01194
01195 void* CAMarrayBase::getDataPointer(long i1, long i2, long i3, long i4,
01196 long i5, long i6, long i7) const
01197 {
01198 const long* beginPtr = Structure.indexBeginBase.getDataPointer();
01199 const long* endPtr = Structure.indexEndBase.getDataPointer();
01200 long i[7];
01201
01202 i[0] = i1; i[1] = i2; i[2] = i3; i[3] = i4;
01203 i[4] = i5; i[5] = i6; i[6] = i7;
01204
01205
01206
01207 double* dataPtr = (double*)(DataP->dataPointer);
01208
01209 long offset;
01210 offset = (i[Structure.dataDimension - 1]
01211 - *(beginPtr + (Structure.dataDimension - 1)));
01212 for(long j = Structure.dataDimension - 2; j >= 0; j--)
01213 {
01214 offset = (i[j] - *(beginPtr + j)) +
01215 offset*((*(endPtr + j) - *(beginPtr + j)) + 1);
01216 }
01217
01218 return (void*)(dataPtr + offset);
01219 }
01220
01221
01222
01223
01224
01225
01226 void CAMarrayBase::incrementReferenceCount()
01227 {
01228 if(arrayBaseReferenceCount == 0) CAMarrayBase::referenceCountError();
01229 arrayBaseReferenceCount++;
01230 }
01231
01232 void CAMarrayBase::referenceCountError()
01233 {
01234 cerr << " Cannot Use Reference Counting on Objects New\'d by the Compiler " << endl;
01235 CAMmvaExit();
01236 }
01237
01238
01239
01240
01241
01242
01243 void CAMarrayBase::indexCheck(const CAMstructureBase &S, long i1)
01244 {
01245 if(S.dataDimension != 1)
01246 {
01247 cerr << " Error : Incorrect Array Index Dimension " << endl;
01248 cerr << " Object Dimension = " << S.dataDimension
01249 << " --- Dimension Used = "<< 1 << endl;
01250 CAMmvaExit();
01251 }
01252 const long* indexBeginP = S.indexBegin.getDataPointer();
01253 const long* indexEndP = S.indexEnd.getDataPointer();
01254 if((i1 < *indexBeginP)||(i1 > *indexEndP))
01255 {
01256 CAMarrayBase::indexErrorMessage(1, *(indexBeginP), *(indexEndP), i1);
01257 }
01258 }
01259
01260 void CAMarrayBase::indexCheck(const CAMstructureBase &S, long i1, long i2)
01261 {
01262 if(S.dataDimension != 2)
01263 {
01264 cerr << " Error : Incorrect Array Index Dimension " << endl;
01265 cerr << " Object Dimension = " << S.dataDimension
01266 << "--- Dimension Used = "<< 2 << endl;
01267 CAMmvaExit();
01268 }
01269 const long* indexBeginP = S.indexBegin.getDataPointer();
01270 const long* indexEndP = S.indexEnd.getDataPointer();
01271 if((i1 < *indexBeginP)||(i1 > *indexEndP))
01272 {
01273 CAMarrayBase::indexErrorMessage(1, *(indexBeginP), *(indexEndP), i1);
01274 }
01275 if((i2 < *(indexBeginP +1))||(i2 > *(indexEndP+1)))
01276 {
01277 CAMarrayBase::indexErrorMessage(2, *(indexBeginP+1), *(indexEndP+1), i2);
01278 }
01279 }
01280
01281 void CAMarrayBase::indexCheck(const CAMstructureBase &S, long i1, long i2, long i3)
01282 {
01283 if(S.dataDimension != 3)
01284 {
01285 cerr << " Error : Incorrect Array Index Dimension " << endl;
01286 cerr << " Object Dimension = " << S.dataDimension
01287 << "--- Dimension Used = "<< 3 << endl;
01288 CAMmvaExit();
01289 }
01290 const long* indexBeginP = S.indexBegin.getDataPointer();
01291 const long* indexEndP = S.indexEnd.getDataPointer();
01292 if((i1 < *indexBeginP)||(i1 > *indexEndP))
01293 {
01294 CAMarrayBase::indexErrorMessage(1, *(indexBeginP), *(indexEndP), i1);
01295 }
01296 if((i2 < *(indexBeginP +1))||(i2 > *(indexEndP+1)))
01297 {
01298 CAMarrayBase::indexErrorMessage(2, *(indexBeginP+1), *(indexEndP+1), i2);
01299 }
01300 if((i3 < *(indexBeginP +2))||(i3 > *(indexEndP+2)))
01301 {
01302 CAMarrayBase::indexErrorMessage(3, *(indexBeginP+2), *(indexEndP+2), i3);
01303 }
01304 }
01305
01306 void CAMarrayBase::indexCheck(const CAMstructureBase &S, long i1, long i2, long i3, long i4)
01307 {
01308 if(S.dataDimension != 4)
01309 {
01310 cerr << " Error : Incorrect Array Index Dimension " << endl;
01311 cerr << " Object Dimension = " << S.dataDimension
01312 << "--- Dimension Used = "<< 4 << endl;
01313 CAMmvaExit();
01314 }
01315 const long* indexBeginP = S.indexBegin.getDataPointer();
01316 const long* indexEndP = S.indexEnd.getDataPointer();
01317 if((i1 < *indexBeginP)||(i1 > *indexEndP))
01318 {
01319 CAMarrayBase::indexErrorMessage(1, *(indexBeginP), *(indexEndP), i1);
01320 }
01321 if((i2 < *(indexBeginP +1))||(i2 > *(indexEndP+1)))
01322 {
01323 CAMarrayBase::indexErrorMessage(2, *(indexBeginP+1), *(indexEndP+1), i2);
01324 }
01325 if((i3 < *(indexBeginP +2))||(i3 > *(indexEndP+2)))
01326 {
01327 CAMarrayBase::indexErrorMessage(3, *(indexBeginP+2), *(indexEndP+2), i3);
01328 }
01329 if((i4 < *(indexBeginP +3))||(i4 > *(indexEndP+3)))
01330 {
01331 CAMarrayBase::indexErrorMessage(4, *(indexBeginP+3), *(indexEndP+3), i4);
01332 }
01333
01334 }
01335
01336 void CAMarrayBase::indexCheck(const CAMstructureBase &S, long i1, long i2, long i3, long i4, long i5)
01337 {
01338 if(S.dataDimension != 5)
01339 {
01340 cerr << " Error : Incorrect Array Index Dimension " << endl;
01341 cerr << " Object Dimension = " << S.dataDimension
01342 << "--- Dimension Used = "<< 5 << endl;
01343 CAMmvaExit();
01344 }
01345 const long* indexBeginP = S.indexBegin.getDataPointer();
01346 const long* indexEndP = S.indexEnd.getDataPointer();
01347 if((i1 < *indexBeginP)||(i1 > *indexEndP))
01348 {
01349 CAMarrayBase::indexErrorMessage(1, *(indexBeginP), *(indexEndP), i1);
01350 }
01351 if((i2 < *(indexBeginP +1))||(i2 > *(indexEndP+1)))
01352 {
01353 CAMarrayBase::indexErrorMessage(2, *(indexBeginP+1), *(indexEndP+1), i2);
01354 }
01355 if((i3 < *(indexBeginP +2))||(i3 > *(indexEndP+2)))
01356 {
01357 CAMarrayBase::indexErrorMessage(3, *(indexBeginP+2), *(indexEndP+2), i3);
01358 }
01359 if((i4 < *(indexBeginP +3))||(i4 > *(indexEndP+3)))
01360 {
01361 CAMarrayBase::indexErrorMessage(4, *(indexBeginP+3), *(indexEndP+3), i4);
01362 }
01363 if((i5 < *(indexBeginP +4))||(i5 > *(indexEndP+4)))
01364 {
01365 CAMarrayBase::indexErrorMessage(5, *(indexBeginP+4), *(indexEndP+4), i5);
01366 }
01367 }
01368
01369 void CAMarrayBase::indexCheck(const CAMstructureBase &S, long i1, long i2, long i3, long i4, long i5, long i6)
01370 {
01371 if(S.dataDimension != 6)
01372 {
01373 cerr << " Error : Incorrect Array Index Dimension " << endl;
01374 cerr << " Object Dimension = " << S.dataDimension
01375 << "--- Dimension Used = "<< 6 << endl;
01376 CAMmvaExit();
01377 }
01378 const long* indexBeginP = S.indexBegin.getDataPointer();
01379 const long* indexEndP = S.indexEnd.getDataPointer();
01380 if((i1 < *indexBeginP)||(i1 > *indexEndP))
01381 {
01382 CAMarrayBase::indexErrorMessage(1, *(indexBeginP), *(indexEndP), i1);
01383 }
01384 if((i2 < *(indexBeginP +1))||(i2 > *(indexEndP+1)))
01385 {
01386 CAMarrayBase::indexErrorMessage(2, *(indexBeginP+1), *(indexEndP+1), i2);
01387 }
01388 if((i3 < *(indexBeginP +2))||(i3 > *(indexEndP+2)))
01389 {
01390 CAMarrayBase::indexErrorMessage(3, *(indexBeginP+2), *(indexEndP+2), i3);
01391 }
01392 if((i4 < *(indexBeginP +3))||(i4 > *(indexEndP+3)))
01393 {
01394 CAMarrayBase::indexErrorMessage(4, *(indexBeginP+3), *(indexEndP+3), i4);
01395 }
01396 if((i5 < *(indexBeginP +4))||(i5 > *(indexEndP+4)))
01397 {
01398 CAMarrayBase::indexErrorMessage(5, *(indexBeginP+4), *(indexEndP+4), i5);
01399 }
01400 if((i6 < *(indexBeginP +5))||(i6 > *(indexEndP+5)))
01401 {
01402 CAMarrayBase::indexErrorMessage(6, *(indexBeginP+5), *(indexEndP+5), i6);
01403 }
01404 }
01405
01406 void CAMarrayBase::indexCheck(const CAMstructureBase &S, long i1, long i2, long i3, long i4, long i5, long i6, long i7)
01407 {
01408 if(S.dataDimension != 7)
01409 {
01410 cerr << " Error : Incorrect Array Index Dimension " << endl;
01411 cerr << " Object Dimension = " << S.dataDimension
01412 << "--- Dimension Used = "<< 7 << endl;
01413 CAMmvaExit();
01414 }
01415 const long* indexBeginP = S.indexBegin.getDataPointer();
01416 const long* indexEndP = S.indexEnd.getDataPointer();
01417 if((i1 < *indexBeginP)||(i1 > *indexEndP))
01418 {
01419 CAMarrayBase::indexErrorMessage(1, *(indexBeginP), *(indexEndP), i1);
01420 }
01421 if((i2 < *(indexBeginP +1))||(i2 > *(indexEndP+1)))
01422 {
01423 CAMarrayBase::indexErrorMessage(2, *(indexBeginP+1), *(indexEndP+1), i2);
01424 }
01425 if((i3 < *(indexBeginP +2))||(i3 > *(indexEndP+2)))
01426 {
01427 CAMarrayBase::indexErrorMessage(3, *(indexBeginP+2), *(indexEndP+2), i3);
01428 }
01429 if((i4 < *(indexBeginP +3))||(i4 > *(indexEndP+3)))
01430 {
01431 CAMarrayBase::indexErrorMessage(4, *(indexBeginP+3), *(indexEndP+3), i4);
01432 }
01433 if((i5 < *(indexBeginP +4))||(i5 > *(indexEndP+4)))
01434 {
01435 CAMarrayBase::indexErrorMessage(5, *(indexBeginP+4), *(indexEndP+4), i5);
01436 }
01437 if((i6 < *(indexBeginP +5))||(i6 > *(indexEndP+5)))
01438 {
01439 CAMarrayBase::indexErrorMessage(6, *(indexBeginP+5), *(indexEndP+5), i6);
01440 }
01441 if((i7 < *(indexBeginP +6))||(i7 > *(indexEndP+6)))
01442 {
01443 CAMarrayBase::indexErrorMessage(7, *(indexBeginP+6), *(indexEndP+6), i7);
01444 }
01445 }
01446 void CAMarrayBase::indexErrorMessage(long indexDimension, long base, long bound, long index)
01447 {
01448 cerr << " Error : Index " << indexDimension << " Out of Range " << endl;
01449
01450 cerr << " Current Index Range :(" << base << ", " << bound << ")" << endl;
01451 cerr << " Index Used : " << index << endl;
01452 CAMmvaExit();
01453 }
01454 void CAMarrayBase::nonConformingMessage(const CAMstructureBase& A, const CAMstructureBase& B)
01455 {
01456 long i;
01457 cerr << endl;
01458 cerr << "Error : Object Dimensions not Compatable with Operation " << endl << endl;
01459 cerr << "Left Operand Dimensions : ";
01460 cerr << A[1].getIndexCount();
01461 for(i = 2; i <= A.dataDimension; i++)
01462 cerr << " x " << A[i].getIndexCount() ;
01463 cerr << endl << endl;
01464 cerr << "Right Operand Dimensions : ";
01465 cerr << B[1].getIndexCount();
01466 for(i = 2; i <= B.dataDimension; i++)
01467 cerr << " x " << B[i].getIndexCount();
01468 cerr << endl << endl;
01469 raise( SIGABRT );
01470
01471 }
01472 void CAMarrayBase::doubleConversionError(const CAMstructureBase& A)
01473 {
01474 long i;
01475 cerr << endl;
01476 cerr << "Dimensions not Compatable with Conversion to Double " << endl << endl;
01477 cerr << "Operand Dimensions : ";
01478 cerr << A[1].getIndexCount();
01479 for(i = 2; i <= A.dataDimension; i++)
01480 cerr << " x " << A[i].getIndexCount() ;
01481 cerr << endl << endl;
01482 CAMmvaExit();
01483 }
01484
01485 void CAMarrayBase::objectConversionError(const CAMstructureBase& A)
01486 {
01487 long i;
01488 cerr << endl;
01489 cerr << " Dimensions not Compatable with Conversion Operator " << endl << endl;
01490 cerr << "Operand Dimensions : ";
01491 cerr << A[1].getIndexCount();
01492 for(i = 2; i <= A.dataDimension; i++)
01493 cerr << " x " << A[i].getIndexCount() ;
01494 cerr << endl << endl;
01495 CAMmvaExit();
01496 }
01497 void CAMarrayBase::nullOperandError()
01498 {
01499 cerr << endl;
01500 cerr << " Error : Null Object Used As Operand " << endl;
01501 CAMmvaExit();
01502 }
01503 void CAMarrayBase::nullOperandError(char* Operation)
01504 {
01505 cerr << endl;
01506 cerr << " Error : Null Object Used As Operand With "<< Operation << endl;
01507 CAMmvaExit();
01508 }
01509 void CAMarrayBase::inputSizeError()
01510 {
01511 cerr << endl;
01512 cerr << " Input error : Insufficient # of data elements in input stream " << endl;
01513 CAMmvaExit();
01514 }
01515
01516
01517
01518
01519
01520
01521
01522
01523
01524
01525
01526
01527
01528
01529
01530
01531
01532