32 #ifndef __TCLMATRIX_H__
33 #define __TCLMATRIX_H__
52 #define MAX_ARRAY_DIM 3
56 #define I3D( i, j, k ) k + matPtr->n[2] * ( I2D( i, j ) )
57 #define I2D( i, j ) j + matPtr->n[1] * ( I1D( i ) )
83 void ( *put )( ClientData clientData, Tcl_Interp*
interp,
int index,
const char *string );
84 void ( *
get )( ClientData clientData, Tcl_Interp*
interp,
int index,
char *string );
114 #if defined ( __GNUC__ ) || defined ( __lucid ) || defined ( __CENTERLINE__ ) \
115 || defined ( CENTERLINE_CLPP )
125 { cerr << "THROW: " << # a << " from " << __FILE__ \
126 << " line " << __LINE__ << endl << flush; abort(); }
127 #define catch( a ) if ( 0 )
134 #define tMat_Assert( a, b ) if ( !( a ) ) \
135 { using namespace std; \
136 cerr << "Assertion " << # a << " failed in " << __FILE__ \
137 << " at line " << __LINE__ << endl << flush; \
157 int Dimensions()
const
162 int dim_size(
int d )
const
164 tMat_Assert( d < matPtr->dim,
"Range error." );
170 free( matPtr->
fdata );
178 void redim(
int nx,
int ny )
180 free( matPtr->
fdata );
184 matPtr->
len = nx * ny;
189 void redim(
int nx,
int ny,
int nz )
191 free( matPtr->
fdata );
196 matPtr->
len = nx * ny * nz;
203 tMat_Assert( matPtr->
dim == 1,
"Wrong number of indicies." );
204 tMat_Assert( i >= 0 && i < matPtr->n[0],
205 "Out of bounds reference" );
207 return matPtr->
fdata[i];
212 tMat_Assert( matPtr->
dim == 2,
"Wrong number of indicies." );
213 tMat_Assert( i >= 0 && i < matPtr->n[0] &&
214 j >= 0 && j < matPtr->n[1],
215 "Out of bounds reference" );
220 Mat_float& operator() (
int i,
int j,
int k )
222 tMat_Assert( matPtr->
dim == 3,
"Wrong number of indicies." );
223 tMat_Assert( i >= 0 && i < matPtr->n[0] &&
224 j >= 0 && j < matPtr->n[1] &&
225 k >= 0 && k < matPtr->n[2],
226 "Out of bounds reference" );
228 return matPtr->
fdata[
I3D( i, j, k )];
246 tMat_Assert( matPtr->
type ==
TYPE_INT,
"Type mismatch" );
249 int Dimensions()
const
254 int dim_size(
int d )
const
256 tMat_Assert( d < matPtr->dim,
"Range error." );
262 free( matPtr->
idata );
269 void redim(
int nx,
int ny )
271 free( matPtr->
idata );
275 matPtr->
len = nx * ny;
279 void redim(
int nx,
int ny,
int nz )
281 free( matPtr->
idata );
286 matPtr->
len = nx * ny * nz;
292 tMat_Assert( matPtr->
dim == 1,
"Wrong number of indicies." );
293 tMat_Assert( i >= 0 && i < matPtr->n[0],
294 "Out of bounds reference" );
296 return matPtr->
idata[i];
299 Mat_int& operator() (
int i,
int j )
301 tMat_Assert( matPtr->
dim == 2,
"Wrong number of indicies." );
302 tMat_Assert( i >= 0 && i < matPtr->n[0] &&
303 j >= 0 && j < matPtr->n[1],
304 "Out of bounds reference" );
309 Mat_int& operator() (
int i,
int j,
int k )
311 tMat_Assert( matPtr->
dim == 3,
"Wrong number of indicies." );
312 tMat_Assert( i >= 0 && i < matPtr->n[0] &&
313 j >= 0 && j < matPtr->n[1] &&
314 k >= 0 && k < matPtr->n[2],
315 "Out of bounds reference" );
317 return matPtr->
idata[
I3D( i, j, k )];
372 #endif // __TCLMATRIX_H__
struct tclMatrixXtnsnDescr * next
int(* tclMatrixXtnsnProc)(tclMatrix *pm, Tcl_Interp *interp, int argc, const char *argv[])
tclMatrix PLDLLIMPEXP_TCLMAT * Tcl_GetMatrixPtr(Tcl_Interp *interp, const char *matName)
struct tclMatrixXtnsnDescr tclMatrixXtnsnDescr
#define PLDLLIMPEXP_TCLMAT
int PLDLLIMPEXP_TCLMAT Tcl_MatrixInstallXtnsn(const char *cmd, tclMatrixXtnsnProc proc)
int PLDLLIMPEXP_TCLMAT Matrix_Init(Tcl_Interp *)
int Tcl_MatrixCmd(ClientData clientData, Tcl_Interp *interp, int argc, const char **argv)
static Tcl_Interp * interp
tclMatrixXtnsnProc cmdproc