00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _math_scmat_blkiter_h
00029 #define _math_scmat_blkiter_h
00030
00031 #ifdef __GNUC__
00032 #pragma interface
00033 #endif
00034
00035 #include <math/scmat/block.h>
00036
00037 namespace sc {
00038
00039 class SCMatrixRectBlock;
00040 class SCMatrixLTriBlock;
00041 class SCMatrixDiagBlock;
00042 class SCVectorSimpleBlock;
00043
00044 class SCElementOp;
00045 class SCElementOp2;
00046 class SCElementOp3;
00047
00050 class SCMatrixBlockIter {
00051 public:
00052 SCMatrixBlockIter() {}
00053 virtual ~SCMatrixBlockIter();
00055 virtual int i() = 0;
00057 virtual int j() = 0;
00059 virtual void set(double val) = 0;
00061 virtual void accum(double val);
00063 virtual double get() = 0;
00065 virtual operator int() = 0;
00067 virtual void operator++() = 0;
00068 void operator++(int) { operator++(); }
00070 virtual void reset() = 0;
00071 };
00072
00073 class SCMatrixRectBlockIter: public SCMatrixBlockIter {
00074 private:
00075 SCMatrixRectBlock* block;
00076 int i_;
00077 int block_index;
00078 int j_;
00079 public:
00080 SCMatrixRectBlockIter(SCMatrixRectBlock*);
00081 virtual ~SCMatrixRectBlockIter();
00082 int i();
00083 int j();
00084 double get();
00085 void set(double);
00086 operator int();
00087 void operator++();
00088 void reset();
00089 };
00090
00091 class SCMatrixRectSubBlockIter: public SCMatrixBlockIter {
00092 private:
00093 SCMatrixRectSubBlock* block;
00094 int i_;
00095 int block_index;
00096 int j_;
00097 public:
00098 SCMatrixRectSubBlockIter(SCMatrixRectSubBlock*);
00099 virtual ~SCMatrixRectSubBlockIter();
00100 int i();
00101 int j();
00102 double get();
00103 void set(double);
00104 operator int();
00105 void operator++();
00106 void reset();
00107 };
00108
00109 class SCMatrixLTriBlockIter: public SCMatrixBlockIter {
00110 private:
00111 SCMatrixLTriBlock* block;
00112 int block_index;
00113 int i_;
00114 int j_;
00115 public:
00116 SCMatrixLTriBlockIter(SCMatrixLTriBlock*);
00117 virtual ~SCMatrixLTriBlockIter();
00118 int i();
00119 int j();
00120 double get();
00121 void set(double);
00122 operator int();
00123 void operator++();
00124 void reset();
00125 };
00126
00127 class SCMatrixLTriSubBlockIter: public SCMatrixBlockIter {
00128 private:
00129 SCMatrixLTriSubBlock* block;
00130 int block_index;
00131 int i_;
00132 int j_;
00133 public:
00134 SCMatrixLTriSubBlockIter(SCMatrixLTriSubBlock*);
00135 virtual ~SCMatrixLTriSubBlockIter();
00136 int i();
00137 int j();
00138 double get();
00139 void set(double);
00140 operator int();
00141 void operator++();
00142 void reset();
00143 };
00144
00145 class SCMatrixDiagBlockIter: public SCMatrixBlockIter {
00146 private:
00147 SCMatrixDiagBlock* block;
00148 int block_index;
00149 int i_;
00150 public:
00151 SCMatrixDiagBlockIter(SCMatrixDiagBlock*);
00152 virtual ~SCMatrixDiagBlockIter();
00153 int i();
00154 int j();
00155 double get();
00156 void set(double);
00157 operator int();
00158 void operator++();
00159 void reset();
00160 };
00161
00162 class SCMatrixDiagSubBlockIter: public SCMatrixBlockIter {
00163 private:
00164 SCMatrixDiagSubBlock* block;
00165 int block_index;
00166 int i_;
00167 public:
00168 SCMatrixDiagSubBlockIter(SCMatrixDiagSubBlock*);
00169 virtual ~SCMatrixDiagSubBlockIter();
00170 int i();
00171 int j();
00172 double get();
00173 void set(double);
00174 operator int();
00175 void operator++();
00176 void reset();
00177 };
00178
00179 class SCVectorSimpleBlockIter: public SCMatrixBlockIter {
00180 private:
00181 SCVectorSimpleBlock* block;
00182 int block_index;
00183 int i_;
00184 public:
00185 SCVectorSimpleBlockIter(SCVectorSimpleBlock*);
00186 virtual ~SCVectorSimpleBlockIter();
00187 int i();
00188 int j();
00189 double get();
00190 void set(double);
00191 operator int();
00192 void operator++();
00193 void reset();
00194 };
00195
00196 class SCVectorSimpleSubBlockIter: public SCMatrixBlockIter {
00197 private:
00198 SCVectorSimpleSubBlock* block;
00199 int block_index;
00200 int i_;
00201 public:
00202 SCVectorSimpleSubBlockIter(SCVectorSimpleSubBlock*);
00203 virtual ~SCVectorSimpleSubBlockIter();
00204 int i();
00205 int j();
00206 double get();
00207 void set(double);
00208 operator int();
00209 void operator++();
00210 void reset();
00211 };
00212
00213 }
00214
00215 #endif
00216
00217
00218
00219
00220