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 )];
   357                                      int argc, 
const char *argv[] );
   372 #endif  // __TCLMATRIX_H__ 
struct tclMatrixXtnsnDescr * next
tclMatrix PLDLLIMPEXP_TCLMAT * Tcl_GetMatrixPtr(Tcl_Interp *interp, const char *matName)
int(* tclMatrixXtnsnProc)(tclMatrix *pm, Tcl_Interp *interp, int argc, const char *argv[])
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