Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages | Examples

arraybse.cpp

Go to the documentation of this file.
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 //                    ARRAYBSE.CPP
00011 //***************************************************************
00012 //
00013 //
00014 //*****************************************************************
00015 //
00016 //            Chris Anderson
00017 //
00018 //            Mon Sep 11 12:49:20 1995
00019 //
00020 //*****************************************************************
00021 //
00022 //
00023 //*****************************************************************
00024 //                    CONSTRUCTORS
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       //  copy based on type
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 //                    DESTRUCTOR
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 //                    ASSIGNMENT
00116 //*****************************************************************
00117 //
00118 void CAMarrayBase::operator =(double value)
00119 {
00120 //
00121 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //    out_stream << *((double*)A.getDataPointer(i1)) << " ";
00188     }
00189     break;
00190 
00191     case 2 :
00192 //
00193 //  Use orientation of first quadrant of a cartesian grid.
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 //   out_stream << *((double*)A.getDataPointer(i1,i2)) << " ";
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 //    out_stream << *((double*)A.getDataPointer(i1,i2,i3)) << " ";
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 //    out_stream << *((double*)A.getDataPointer(i1,i2,i3,i4)) << " ";
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 //    out_stream << *((double*)A.getDataPointer(i1,i2,i3,i4,i5)) << " ";
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 //   out_stream << *((double*)A.getDataPointer(i1,i2,i3,i4,i5,i6)) << " ";
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 //     out_stream << *((double*)A.getDataPointer(i1,i2,i3,i4,i5,i6,i7)) << " ";
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 //  NEED CONVERSION CHECK
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 //    out_stream << *((double*)A.getDataPointer(i1)) << " ";
00415     }
00416     break;
00417 
00418     case 2 :
00419 //
00420 //  Use orientation of first quadrant of a cartesian grid.
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 //   out_stream << *((double*)A.getDataPointer(i1,i2)) << " ";
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 //    out_stream << *((double*)A.getDataPointer(i1,i2,i3)) << " ";
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 //    out_stream << *((double*)A.getDataPointer(i1,i2,i3,i4)) << " ";
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 //    out_stream << *((double*)A.getDataPointer(i1,i2,i3,i4,i5)) << " ";
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 //   out_stream << *((double*)A.getDataPointer(i1,i2,i3,i4,i5,i6)) << " ";
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 //     out_stream << *((double*)A.getDataPointer(i1,i2,i3,i4,i5,i6,i7)) << " ";
00549     }}}}}}}
00550     break;
00551     }
00552     return(in_stream);
00553 
00554 }
00555 
00556 //
00557 //*****************************************************************
00558 //             INITIALIZATION MEMBER_FUNCTIONS
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 //  NEED CONVERSION CHECK
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 //                    ARRAYOPS.CPP
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 //  copy over data
00702 //
00703     *this = A;
00704 }
00705 //
00706 //*****************************************************************
00707 //                    Operators
00708 //*****************************************************************
00709 //
00710 CAMarrayBase CAMarrayBase::operator-() const
00711 {
00712 //
00713 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //                    op = Operators
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
00830 //
00831 
00832     CAMbinaryEngine::doubleAdivideEqualB(Structure, *DataP, A.Structure, *A.DataP);
00833 }
00834 //
00835 //*****************************************************************
00836 //                    Operations with Scalers
00837 //*****************************************************************
00838 //
00839 CAMarrayBase  CAMarrayBase::operator +(const double value) const
00840 {
00841 //
00842 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
00989 //
00990     CAMbinaryEngine::doubleAequalToAlpha(Structure, *DataP, value);
00991 }
00992 
00993 CAMarrayBase  CAMarrayBase::plusValue(double value)
00994 {
00995 //
00996 //  NEED CONVERSION CHECK
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 //  NEED CONVERSION CHECK
01008 //
01009     CAMarrayBase S(*this);
01010     CAMbinaryEngine::doubleAminusEqualAlpha(S.Structure, *S.DataP, value);
01011     S.setTemporaryFlag();
01012     return S;
01013 }
01014 
01015 //
01016 //*****************************************************************
01017 //            Temporary and Reference Utilities
01018 //*****************************************************************
01019 //
01020 void  CAMarrayBase::exchangeContentsWith(CAMarrayBase& B)
01021 {
01022 //
01023 //  This routine exchanges the contents of *this with B.
01024 //  The routine is typically used with *this input as
01025 //  a null object and B a temporary object (i.e. the result
01026 //  of an operator or function which returns B with the
01027 //  temporary flag set). In such a case, the contents of
01028 //  B are captured by *this --- resulting in a transfer of the
01029 //  results without invoking a data copy.
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 //  This routine initializes *this with the contents of B and
01055 //  and sets the *this reference flag.  This results in a
01056 //  class instance whose data is that associated with B.
01057 //
01058 //  Typically this routine is used in a container class which
01059 //  contains arrays --- and one wants to have sub-array access
01060 //  for the contained class which is based upon the sub-array
01061 //  access of the array class. 
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();  //One Reference for local copy
01072     DataP->incrementReferenceCount();  //One Reference for compiler copy
01073     typeValue               = B.typeValue;
01074     referenceFlag           = 1;
01075     arrayBaseReferenceCount = 0;
01076 }
01077 //
01078 //*****************************************************************
01079 //                    CONVERSIONS
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 //                    DIMENSION SELECTION
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 //                    Array Helper Functions
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 //  NEED CONVERSION CHECK
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 //                    Reference Counting Functions
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 //                    MEMBER_FUNCTIONS
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 //    CAMmvaExit();
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 //                     CPP File End
01518 //*****************************************************************
01519 //
01520 
01521 
01522 
01523 
01524 
01525 
01526 
01527 
01528 
01529 
01530 
01531 
01532   

Generated on Wed Sep 5 12:54:17 2007 for DSACSS Operational Code by  doxygen 1.3.9.1