33 #ifndef __TCLMATRIX_H__
34 #define __TCLMATRIX_H__
53 #define MAX_ARRAY_DIM 3
57 #define I3D( i, j, k ) k + matPtr->n[2] * ( I2D( i, j ) )
58 #define I2D( i, j ) j + matPtr->n[1] * ( I1D( i ) )
80 void ( *put )( ClientData clientData, Tcl_Interp*
interp,
int index,
const char *string );
81 void ( *
get )( ClientData clientData, Tcl_Interp*
interp,
int index,
char *string );
104 #if defined ( __GNUC__ ) || defined ( __lucid ) || defined ( __CENTERLINE__ ) \
105 || defined ( CENTERLINE_CLPP )
115 { cerr << "THROW: " << # a << " from " << __FILE__ \
116 << " line " << __LINE__ << endl << flush; abort(); }
117 #define catch( a ) if ( 0 )
124 #define tMat_Assert( a, b ) if ( !( a ) ) \
125 { using namespace std; \
126 cerr << "Assertion " << # a << " failed in " << __FILE__ \
127 << " at line " << __LINE__ << endl << flush; \
144 tMat_Assert( matPtr->type ==
TYPE_FLOAT,
"Type mismatch" );
147 int Dimensions()
const
152 int dim_size(
int d )
const
154 tMat_Assert( d < matPtr->dim,
"Range error." );
160 free( matPtr->fdata );
164 matPtr->fdata = (
Mat_float *) malloc( matPtr->len *
168 void redim(
int nx,
int ny )
170 free( matPtr->fdata );
174 matPtr->len = nx *
ny;
175 matPtr->fdata = (
Mat_float *) malloc( matPtr->len *
179 void redim(
int nx,
int ny,
int nz )
181 free( matPtr->fdata );
186 matPtr->len = nx * ny * nz;
187 matPtr->fdata = (
Mat_float *) malloc( matPtr->len *
193 tMat_Assert( matPtr->dim == 1,
"Wrong number of indicies." );
194 tMat_Assert( i >= 0 && i < matPtr->n[0],
195 "Out of bounds reference" );
197 return matPtr->fdata[i];
202 tMat_Assert( matPtr->dim == 2,
"Wrong number of indicies." );
203 tMat_Assert( i >= 0 && i < matPtr->n[0] &&
204 j >= 0 && j < matPtr->n[1],
205 "Out of bounds reference" );
207 return matPtr->fdata[
I2D( i, j )];
210 Mat_float& operator() (
int i,
int j,
int k )
212 tMat_Assert( matPtr->dim == 3,
"Wrong number of indicies." );
213 tMat_Assert( i >= 0 && i < matPtr->n[0] &&
214 j >= 0 && j < matPtr->n[1] &&
215 k >= 0 && k < matPtr->n[2],
216 "Out of bounds reference" );
218 return matPtr->fdata[
I3D( i, j, k )];
236 tMat_Assert( matPtr->type ==
TYPE_INT,
"Type mismatch" );
239 int Dimensions()
const
244 int dim_size(
int d )
const
246 tMat_Assert( d < matPtr->dim,
"Range error." );
252 free( matPtr->idata );
256 matPtr->idata = (
Mat_int *) malloc( matPtr->len * sizeof (
Mat_int ) );
259 void redim(
int nx,
int ny )
261 free( matPtr->idata );
265 matPtr->len = nx *
ny;
266 matPtr->idata = (
Mat_int *) malloc( matPtr->len * sizeof (
Mat_int ) );
269 void redim(
int nx,
int ny,
int nz )
271 free( matPtr->idata );
276 matPtr->len = nx * ny * nz;
277 matPtr->idata = (
Mat_int *) malloc( matPtr->len * sizeof (
Mat_int ) );
282 tMat_Assert( matPtr->dim == 1,
"Wrong number of indicies." );
283 tMat_Assert( i >= 0 && i < matPtr->n[0],
284 "Out of bounds reference" );
286 return matPtr->idata[i];
289 Mat_int& operator() (
int i,
int j )
291 tMat_Assert( matPtr->dim == 2,
"Wrong number of indicies." );
292 tMat_Assert( i >= 0 && i < matPtr->n[0] &&
293 j >= 0 && j < matPtr->n[1],
294 "Out of bounds reference" );
296 return matPtr->idata[
I2D( i, j )];
299 Mat_int& operator() (
int i,
int j,
int k )
301 tMat_Assert( matPtr->dim == 3,
"Wrong number of indicies." );
302 tMat_Assert( i >= 0 && i < matPtr->n[0] &&
303 j >= 0 && j < matPtr->n[1] &&
304 k >= 0 && k < matPtr->n[2],
305 "Out of bounds reference" );
307 return matPtr->idata[
I3D( i, j, k )];
362 #endif // __TCLMATRIX_H__
struct tclMatrixXtnsnDescr * next
def cmd
Now do the PLplot API.
int(* tclMatrixXtnsnProc)(tclMatrix *pm, Tcl_Interp *interp, int argc, const char *argv[])
void PLFLT PLINT PLINT PLFLT PLFLT PLFLT PLFLT PLINT PLINT PLINT PLFLT PLFLT PLINT PLFLT PLINT const PLINT const char *const PLINT nx
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