00001
00002
00003
00004
00005
00006
00007 #include <iostream.h>
00008 #include "mvalngbase.h"
00009 #include "access.h"
00010 #include "mvaexit.h"
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __CAMSTRUCTUREBASE__
00023 #define __CAMSTRUCTUREBASE__
00024
00025 #include "mvaimpexp.h"
00026
00027
00028
00029
00030
00031
00032
00033
00034 class __IMPEXP__ CAMstructureBase
00035 {
00036
00037
00038
00039 friend class CAMstructureBaseTest;
00040
00041
00042
00043
00044 public :
00045
00046 int dataDimension;
00047 MVAlongBase indexBegin;
00048 MVAlongBase indexEnd;
00049 MVAlongBase indexStride;
00050 MVAlongBase indexBeginBase;
00051 MVAlongBase indexEndBase;
00052
00053 public :
00054
00055 CAMstructureBase();
00056 CAMstructureBase( const CAMstructureBase& A);
00057 CAMstructureBase(long dimension);
00058 CAMstructureBase(const CAMrange& R1, const CAMrange& R2 = CAMnullRange,
00059 const CAMrange& R3 = CAMnullRange, const CAMrange&R4 = CAMnullRange,
00060 const CAMrange& R5 = CAMnullRange, const CAMrange&R6 = CAMnullRange,
00061 const CAMrange& R7 = CAMnullRange);
00062
00063
00064
00065 ~CAMstructureBase();
00066
00067
00068
00069 __IMPEXP__ friend ostream& operator <<(ostream& out_stream, const CAMstructureBase& A);
00070
00071
00072
00073 CAMstructureBase& operator = ( const CAMstructureBase& A);
00074
00075
00076
00077 void initialize();
00078 void initialize(long dimension);
00079 void initialize(const CAMstructureBase& A);
00080 void initialize(const CAMrange& R1, const CAMrange& R2 = CAMnullRange,
00081 const CAMrange& R3 = CAMnullRange, const CAMrange&R4 = CAMnullRange,
00082 const CAMrange& R5 = CAMnullRange, const CAMrange&R6 = CAMnullRange,
00083 const CAMrange& R7 = CAMnullRange);
00084
00085
00086
00087 int getDimension()const {return dataDimension;};
00088 const CAMstructureBase& operator[](long i) const;
00089 CAMstructureBase& operator[](long i);
00090 long getIndexBase() const;
00091 long getIndexBound() const;
00092 long getIndexStride() const;
00093 long getIndexCount() const;
00094 long getIndexBaseBase() const;
00095 void setIndexBase(long i);
00096 void setIndexStride(long i);
00097 void setAllIndexBase(long i);
00098 static long exchangeReferenceIndex(long i);
00099
00100
00101
00102 long getFullDataCount()const;
00103 long getDataCount()const;
00104 int isSubset() const;
00105 int isConformingTo(const CAMstructureBase& A) const;
00106 int isStrictConformingTo(const CAMstructureBase& A) const;
00107 int isMatrixOpConformingTo(const CAMstructureBase& A) const;
00108 void getNormalizedLoops(long& loopDimension, long& Offset, MVAlongBase& Count, MVAlongBase& Stride) const;
00109 void initializeMinStructure(CAMstructureBase& A) const;
00110 void setStructureSubset(const CAMrange& R1, const CAMrange& R2 = CAMnullRange,
00111 const CAMrange& R3 = CAMnullRange, const CAMrange&R4 = CAMnullRange,
00112 const CAMrange& R5 = CAMnullRange, const CAMrange&R6 = CAMnullRange,
00113 const CAMrange& R7 = CAMnullRange);
00114
00115
00116
00117 static void illegalDimension(long i, long dimension);
00118 static void needToSelectDimension();
00119
00120 };
00121
00122 #endif
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134