/* $Id: utils.h,v 1.3 1996/10/11 11:30:12 roitzsch Exp $ */ #ifndef UTILS_H #define UTILS_H #include #include #include #include #include #include #include #include "kvector.h" #include "matrix.h" #include "numerics.h" //------------------------------------------------------------------------- class MultiCompNode; extern MultiCompNode MCNode; //------------------------------------------------------------------------- #define FORNCOMP(n) for (n=1; n<=nComp; ++n) class MultiCompNode { public: int block(int node, int nComp) { return (node-1)/nComp + 1; } int comp (int node, int nComp) { return (node-1)%nComp + 1; } int node (int block, int comp, int nComp) { return nComp*(block-1) + comp; } }; //------------------------------------------------------------------------- void strToLower(char* s); void strToUpper(char *s); char *Form(const char *format ...); //------------------------------------------------------------------------- class Parser { public: enum State { ok=1, end=0, eof= -1 }; enum Position { beginning=0, current=1, endOfFile=2 }; Parser (const char* file, const char* endToken = "end", const char CommentFlag = '#'); virtual ~Parser(); int state() const { return status; } virtual int getString(char* s); virtual int getValue(char* c); virtual int getValue(int* i); virtual int getValue(float* x); virtual int getValue(double* x); virtual int getLine(char* line); virtual int skipRestOfLine(); int findWord(const char* target, int completeMatch=0); int findChar(const char target); virtual void rewind(); virtual long ftell(); virtual int fseek(long offset, int mode=beginning); virtual char getChar(); // should not be used protected: enum { WORDLENGTH=256 }; State status; char* endToken; char commentFlag; char* fileName; FILE* fp; void readError(const char* function, char* word); }; //------------------------------------------------------------------------- class BufferedParser : public Parser { protected: char *buffer, *pos, *posBefore; long bufferLength; public: BufferedParser(const char* file, const char* endToken = "end", const char CommentFlag = '#'); virtual ~BufferedParser(); virtual int getString(char* s); int getSpecValue(char* c); virtual int getValue(char* c); virtual int getValue(int* i); virtual int getValue(float* x); virtual int getValue(double* x); virtual int getLine(char* line); virtual int skipRestOfLine(); virtual void rewind(); virtual long ftell(); virtual int fseek(long offset, int mode=beginning); virtual char getChar(); // should not be used }; //------------------------------------------------------------------------- #include class Timer { double t0; time_t abst0; public: Timer(); float cpu (int print=1); // cpu time in seconds long total(int print=1); // total elapsed time in seconds }; //------------------------------------------------------------------------- //------------------------------------------------------------------------- /* class charbuf : public streambuf { public: const int len; char *buf; int overflow(int c=EOF) { // printf("\n *** overflow in charbuf "); return EOF; } int underflow() { return EOF; } streambuf* setbuf(char* p, int len0) { setp(p,p+len0-1); return this; } public: charbuf (int size): len(size), buf(new char[size]) { setbuf(buf,len); buf[0]='\0'; } ~charbuf() { delete buf; } int full() { return this->pptr() >= this->epptr(); } }; */ //------------------------------------------------------------------------- //------------------------------------------------------------------------- //------------------------------------------------------------------------- void invert(Matrix& A, Matrix& AInv); void Decompose(Matrix& A, Vector& index); void FBSubst(Matrix& A, Vector& index, Vector& x); void invert(Matrix& A, Matrix& AInv); void Decompose(Matrix& A, Vector& index); void FBSubst(Matrix& A, Vector& index, Vector& x); #endif