123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #include "cmPrefix.h"
- #include "cmGlobal.h"
- #include "cmRpt.h"
- #include "cmErr.h"
- #include "cmCtx.h"
- #include "cmMem.h"
- #include "cmMallocDebug.h"
- #include "cmLinkedHeap.h"
- #include "cmSymTbl.h"
- #include "cmFloatTypes.h"
- #include "cmComplexTypes.h"
- #include "cmProcObj.h"
-
-
- //------------------------------------------------------------------------------------------------------------
- void* _cmObjAlloc( void* ap, const char* label, struct cmCtx_str* c, unsigned objByteCnt )
- {
- unsigned flags = (ap == NULL) ? kDynObjFl : 0;
-
- if( ap == NULL )
- ap = cmMemMalloc(objByteCnt);
-
- memset(ap,0,objByteCnt);
-
- assert( objByteCnt >= sizeof(cmObj));
-
- // the first field in the object must be an cmObj field
- cmObj* p = (cmObj*)ap;
- p->flags = flags;
- p->ctx = c;
-
- if( c != NULL )
- cmErrSetup(&p->err,c->obj.err.rpt,label);
-
- return ap;
- }
-
- // if pp is non-NULL then *pp is set to NULL on return
- void _cmObjFree( void** pp, cmObj* op )
- {
- // pp and op are both NULL or neither is NULL
- assert( (pp==NULL) == (op==NULL) );
-
- if( op != NULL )
- if( cmIsFlag(op->flags,kDynObjFl) )
- cmMemPtrFree( pp );
-
- }
-
-
-
- //------------------------------------------------------------------------------------------------------------
-
- cmCtx* cmCtxAlloc( cmCtx* p, cmRpt_t* rpt, cmLHeapH_t lhH, cmSymTblH_t stH )
- {
- cmRC_t rc;
-
- cmCtx* op = cmObjAlloc( cmCtx, NULL, p );
-
- op->obj.ctx = op;
-
- if( (rc = cmCtxInit( op, rpt, lhH, stH )) != cmOkRC )
- cmCtxFree(&op);
-
- return op;
-
- }
-
- cmRC_t cmCtxFree( cmCtx** pp )
- {
-
- if( pp != NULL && *pp != NULL )
- {
- cmCtxFinal(*pp);
- cmObjFree(pp);
- }
-
- return cmOkRC;
- }
-
- cmRC_t cmCtxInit( cmCtx* c, cmRpt_t* rpt, cmLHeapH_t lhH, cmSymTblH_t stH )
- {
- cmRC_t rc;
-
- if((rc = cmCtxFinal(c)) != cmOkRC )
- return rc;
-
- c->obj.err.rpt = rpt;
- c->lhH = lhH;
- c->stH = stH;
-
- return rc;
- }
-
- cmRC_t cmCtxFinal( cmCtx* c )
- { return cmOkRC; }
-
-
- cmRC_t cmCtxPrint( cmCtx* c, const char* fmt, ... )
- {
- va_list vl;
- va_start(vl,fmt);
- cmRptVPrintf(c->obj.err.rpt,fmt,vl);
- va_end(vl);
- return cmOkRC;
- }
-
-
- cmRC_t cmCtxRtCondition( cmObj* p, unsigned code, const char* fmt, ... )
- {
- va_list vl;
- va_start(vl,fmt);
- cmErrVMsg(&p->err,code,fmt,vl);
- va_end(vl);
- return code;
- }
-
- cmRC_t cmCtxRtAssertFailed( cmObj* p, unsigned code, const char* fmt, ... )
- {
- va_list vl;
- va_start(vl,fmt);
- cmErrVMsg(&p->err, code,fmt,vl);
- va_end(vl);
- return code;
- }
-
-
- //------------------------------------------------------------------------------------------------------------
- cmMtxFile* cmMtxFileAlloc( cmCtx* c, cmMtxFile* p, const char* fn )
- {
- cmMtxFile* op = cmObjAlloc( cmMtxFile, c, p );
-
- if( fn != NULL )
- if( cmMtxFileCreate( op, fn ) != cmOkRC && p == NULL )
- cmMtxFileFree(&op);
- return op;
- }
-
- cmRC_t cmMtxFileFree( cmMtxFile** pp )
- {
- cmRC_t rc = cmOkRC;
- if( pp != NULL && *pp != NULL)
- {
- cmLHeapFree((*pp)->obj.ctx->lhH,*pp);
-
- if((rc = cmMtxFileClose(*pp)) == cmOkRC )
- cmObjFree(pp);
- }
-
- return rc;
- }
-
- cmRC_t cmMtxFileCreate(cmMtxFile* p, const char* fn )
- {
- assert(fn != NULL );
-
- cmRC_t rc;
- if((rc = cmMtxFileClose(p)) != cmOkRC )
- return rc;
-
- if((p->fp = fopen(fn,"wt")) == NULL )
- return cmCtxRtCondition( &p->obj, cmSystemErrorRC, "Unable to create the matrix text file:'%s'.",fn);
-
- unsigned n = strlen(fn)+1;
- p->fn = cmLhResizeN(p->obj.ctx->lhH,cmChar_t,p->fn,n);
- strncpy(p->fn,fn,n);
-
- return rc;
- }
-
- cmRC_t cmMtxFileClose( cmMtxFile* p )
- {
- if( p != NULL )
- {
- if( p->fp != NULL )
- {
- fclose(p->fp);
- p->fp = NULL;
- }
- }
-
- return cmOkRC;
- }
-
- cmRC_t cmMtxFileFloatExec( cmMtxFile* p, const float* inPtr, unsigned inCnt, unsigned inStride )
- {
- const float* ep = inPtr + (inCnt * inStride);
- for(; inPtr < ep; inPtr+=inStride )
- fprintf(p->fp,"%e ",*inPtr);
- fprintf(p->fp,"\n");
- return cmOkRC;
- }
-
- cmRC_t cmMtxFileDoubleExec( cmMtxFile* p, const double* inPtr, unsigned inCnt, unsigned inStride )
- {
- const double* ep = inPtr + (inCnt * inStride);
- for(; inPtr < ep; inPtr+=inStride )
- fprintf(p->fp,"%e ",*inPtr);
- fprintf(p->fp,"\n");
-
- return cmOkRC;
- }
-
- cmRC_t cmMtxFileComplexExec( cmMtxFile* p, const cmComplexR_t* inPtr, unsigned inCnt, unsigned inStride )
- {
- const cmComplexR_t* sp = inPtr;
- const cmComplexR_t* ep = inPtr + (inCnt * inStride);
-
- for(; sp < ep; sp += inStride )
- fprintf(p->fp,"%e ",cmCrealR(*sp));
- fprintf(p->fp,"\n");
-
- sp = inPtr;
-
- for(; sp < ep; sp += inStride )
- fprintf(p->fp,"%e ",cmCimagR(*sp));
- fprintf(p->fp,"\n");
-
- return cmOkRC;
- }
|