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