⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pf_alloc.c

📁 LastWave
💻 C
📖 第 1 页 / 共 3 页
字号:
	scale = PFGetIndexMax(lwpf->pf) + 1;            Y = signal->Y;      size = signal->size;      flagMinimalSort = NO;      while( (opt = ParseOption(&argv)) ) { 	switch(opt) {	case 'c':	  Y = signal->Y + signal->firstp;	  size = signal->lastp - signal->firstp + 1;	  break;	case 's':	  flagMinimalSort = YES;	  break;	default:	  ErrorOption(opt);	}      }      NoMoreArgs(argv);      if(flagMinimalSort == YES)	PFChangeQsort(PFMinimalQsortData);      else	PFChangeQsort(NULL);	res = PFComputeOneScaleFLOAT(lwpf->pf,scale,Y,size);	switch(res)	  {	  case PFYes:	    SetResultInt(res);	    break;	  case PFNotValid:	    Errorf("One of the parameter isn\'t valid");	    break;	  default:	    Errorf("serious error. (maybe the lwpf->pf pointer was NULL)");	  }    }  /* 'write' action */  else if (!strcmp(action,"write"))    {      LWPARTFUNC lwpf;      STREAM stream;      FILE *fp;      int flagToBeClosed = NO;      int res;      char *fileName;      argv = ParseArgv(argv,tPF,&lwpf,tSTREAM_,NULL,&stream,-1);            if(stream != NULL)	{	  fp = stream2File(stream);	  NoMoreArgs(argv);	}      /* if the last argument is not a stream it may be a filename */      else 	{	  ParseArgv(argv,tSTR_,NULL,&fileName,0);	  if(fileName != NULL)	    {	      fp = FOpen(fileName,"w");	      flagToBeClosed = YES;	      if (fp == NULL) 		Errorf("Can't open file: %s",fileName);	    }	  /* if there is no last argument we use stdoutStream */	  else fp = stream2File(stdoutStream);	}            res = PFWriteAscii(fp,lwpf->pf);      if(flagToBeClosed == YES)	FClose(fp);      switch(res)	{	case PFYes:	  SetResultInt(res);	  break;	case PFWriErr:	  Errorf("probleme while writing");	  break;	default:	  Errorf("serious writing error. (maybe the file descriptor was NULL)");	}    }  /* 'writebin' action */  else if (!strcmp(action,"writebin"))    {      LWPARTFUNC lwpf;      FILE *fp;      char *fileName;      int res;      argv = ParseArgv(argv,tPF,&lwpf,tSTR,&fileName,0);            fp = FOpen(fileName,"w");      if (fp == NULL) 	Errorf("Can't open file: %s",fileName);            res = PFWriteBin(fp,lwpf->pf);      FClose(fp);            switch(res)	{	case PFYes:	  SetResultInt(res);	  break;	case PFWriErr:	  Errorf("probleme while writing");	  break;	default:	  Errorf("serious writing error. (maybe the file descriptor was NULL)");	}    }  /* 'read' action */  else if (!strcmp(action,"read"))    {      LWPARTFUNC lwpf;      STREAM stream;      FILE *fp;      char *fileName;      int flagToBeClosed = NO;      int res;      argv = ParseArgv(argv,tPF_,NULL,&lwpf,tSTREAM_,NULL,&stream,-1);            if(stream != NULL)	{	  fp = stream2File(stream);	  NoMoreArgs(argv);	}      /* if the last argument is not a stream it may be a filename */      else 	{	  argv = ParseArgv(argv,tSTR_,NULL,&fileName,0);	  if(fileName != NULL)	    {	      fp = FOpen(fileName,"r");	      flagToBeClosed = YES;	      if (fp == NULL) 		Errorf("Can't open file: %s",fileName);	    }	  /* if there is no last argument we use stdinStream */	  else fp = stream2File(stdinStream);	}      if(lwpf == NULL) {	lwpf = NewPartitionFunction();	TempValue(lwpf);      }	      res = PFRead(fp,lwpf->pf);      if(flagToBeClosed == YES)	FClose(fp);      switch(res)	{	case PFYes:	  SetResultValue(lwpf);	  break;	case PFErrFormat:	  Errorf("the input has a bad format");	  break;	case PFNotValid:	  Errorf("one of the value read is not meaningful");	  break;	default:	  Errorf("serious reading error. (maybe the file descriptor was NULL)");	}    }    /* 'copy' action */  else if (!strcmp(action,"copy"))    {      LWPARTFUNC lwpf,lwpf1;      PartitionFunction pfTemp;      argv = ParseArgv(argv,tPF,&lwpf,tPF,&lwpf1,0);                  if( PFIsValid(lwpf->pf) != PFYes )	Errorf("The input pf is not valid.");      pfTemp = PFCopy(lwpf->pf);      if(pfTemp == NULL)	Errorf("An error occured while copying.");      PFDelete(lwpf1->pf);      lwpf1->pf = pfTemp;    }  /* 'wtmm' action */  else if (!strcmp(action,"wtmm"))     {      LWPARTFUNC lwpf;      EXTREP extrep;      LISTV lv;      SIGNAL sig;      double *qArray;      int qNumber;      argv = ParseArgv(argv,tPF_,NULL,&lwpf,tEXTREP,&extrep,		       tLISTV_,NULL,&lv,-1);      if( lv == NULL) {	argv = ParseArgv(argv,tSIGNALI,&sig,0);	if( (qArray = PFSignal2QArray(sig)) == NULL )	  Errorf1("");	qNumber = sig->size;      } else { 	NoMoreArgs(argv);	if( (qArray = PFListv2QArray(lv)) == NULL )	  Errorf1("");	qNumber = lv->length;      }            if(lwpf == NULL) {	lwpf = NewPartitionFunction();	TempValue(lwpf);      }            PFChangeQsort(NULL); /* To be sure we sort */      ComputePartFuncOnExtrep(lwpf,extrep,qNumber,qArray);            SetResultValue(lwpf);    }  /* 'cont' action */  else if (!strcmp(action,"cont"))     {      LWPARTFUNC lwpf;      WTRANS wtrans;      LISTV lv;      SIGNAL sig;      double *qArray;      int qNumber;      int flagCausal,flagMinimalSort;      char opt;      argv = ParseArgv(argv,tPF_,NULL,&lwpf,tWTRANS,&wtrans,		       tLISTV_,NULL,&lv,-1);      if( lv == NULL) {	argv = ParseArgv(argv,tSIGNALI,&sig,-1);	if( (qArray = PFSignal2QArray(sig)) == NULL )	  Errorf1("");	qNumber = sig->size;      } else { 	if( (qArray = PFListv2QArray(lv)) == NULL )	  Errorf1("");	qNumber = lv->length;      }        flagMinimalSort = NO;      flagCausal = NO;      while( (opt = ParseOption(&argv)) ) { 	switch(opt) {	case 'c':	  flagCausal = YES;	  break;	case 's':	  flagMinimalSort = YES;	  break;	default:	  ErrorOption(opt);	}      }            if(lwpf == NULL) {	lwpf = NewPartitionFunction();	TempValue(lwpf);      }      if(flagMinimalSort == YES)	PFChangeQsort(PFMinimalQsortData);      else	PFChangeQsort(NULL);            ComputePartFuncOnWtrans(lwpf,wtrans,qNumber,qArray,flagCausal);      SetResultValue(lwpf);    }  /* 'get', 'getq', 'geti' action */  else if ( !strcmp(action,"get")	    ||  !strcmp(action,"getq")	    ||  !strcmp(action,"geti")	    )     {      LWPARTFUNC lwpf;      LISTV lv,lvsig;      SIGNAL signal,sig;      LWFLOAT q;      char *type;      char opt;      int mode;      char access_mode = 'q';            if( !strcmp(action,"geti") ) 	access_mode = 'i';      argv = ParseArgv(argv,tWORD,&type,tPF,&lwpf,		       tLISTV_,NULL,&lv,-1);      if( lv == NULL)	argv = ParseArgv(argv,tFLOAT_,FLOAT_MAX,&q,-1);            if( q == FLOAT_MAX ) {	argv = ParseArgv(argv,tSIGNALI_,NULL,&sig,-1);      }      mode = PFEXTENSIVE;      while( (opt = ParseOption(&argv)) ) 	{ 	  switch(opt) 	    {	    case 'i':	      mode = PFINTENSIVE;	      break;	    default:	      ErrorOption(opt);	    }	}      NoMoreArgs(argv);      if(lv != NULL) {	if( access_mode == 'q' ) {	  if( (lvsig = PFListvQ2ListvSig(lwpf,lv,type,mode)) == NULL)	    Errorf1("");	} else {	  if( (lvsig = PFListvInd2ListvSig(lwpf,lv,type,mode)) == NULL)	    Errorf1("");	}	SetResultValue(lvsig);      } else if (q != FLOAT_MAX) {	if( access_mode == 'q' ) {	  if( (signal = PFQ2Signal(lwpf,type, q,mode)) == NULL)	    Errorf1("");	} else {	  if( (signal = PFIndQ2Signal(lwpf,type,(int) (q+0.5),mode)) == NULL)	    Errorf1("");	}	SetResultValue(signal);      } else if (sig != NULL) {	if( access_mode == 'q' ) {	  if( (lvsig = PFSigQ2ListvSig(lwpf,sig,type,mode)) == NULL)	    Errorf1("");	} else {	  if( (lvsig = PFSigInd2ListvSig(lwpf,sig,type,mode)) == NULL)	    Errorf1("");	}	SetResultValue(lvsig);      } else {	if( (lvsig = PF2ListvSig(lwpf,type,mode)) == NULL)	  Errorf1("");	SetResultValue(lvsig);      }    }  /* 'add' action */  else if (!strcmp(action,"add"))    {      LWPARTFUNC lwpf,lwpf1,lwpf2;      char opt;      int flagNonstandard,res;      argv = ParseArgv(argv,tPF,&lwpf1,tPF,&lwpf2,-1);      flagNonstandard = NO;      while( (opt = ParseOption(&argv)) ) 	{ 	  switch(opt) 	    {	    case 'n':	      flagNonstandard = YES;	      break;	    default:	      ErrorOption(opt);	    }	}      NoMoreArgs(argv);      if( PFGetOctaveNumber(lwpf1->pf) < PFGetOctaveNumber(lwpf2->pf) ) {	lwpf = lwpf1;	lwpf1 = lwpf2;	lwpf2 = lwpf;      }      if( (lwpf = CopyPartitionFunction(lwpf1,NULL)) == NULL)	Errorf1("");      TempValue(lwpf);      if(flagNonstandard == NO) {	res = PFStandardAddition(lwpf->pf,lwpf2->pf);      } else {	res = PFNonStandardAddition(lwpf->pf,lwpf2->pf);      }      switch(res)	{	case PFYes:	  SetResultValue(lwpf);	  break;	case PFNotValid:	  Errorf("one of the pf's is not valid");	  break;	case PFNotCompatible:	  Errorf("The pf's are not compatible for addition");	  break;	default:	  Errorf("serious error. (shouldn't occur)");	}    }  /* 'reset' action */  else if (!strcmp(action,"reset"))    {      LWPARTFUNC lwpf;      int res;      argv = ParseArgv(argv,tPF,&lwpf,0);      res = PFReset(lwpf->pf);      switch(res)	{	case PFYes:	  SetResultValue(lwpf);	  break;	case PFNotValid:	  Errorf("pf is not valid");	  break;	case PFNo:	  Errorf("serious error: pf was NULL !!");	  break;	default:	  Errorf("serious error. (shouldn't occur)");	}    }  else Errorf("Unknow action '%s'",action);    }/* * The field list */struct field fieldsPartitionFunction[] = {  "method", GetMethodPFV, SetMethodPFV, NULL, NULL,  "amin", GetAminPFV, SetAminPFV, NULL, NULL,  "noct", GetNOctPFV, NULL, NULL, NULL,  "nvoice", GetNVoicePFV, NULL, NULL, NULL,  "nscale", GetNScalePFV, NULL, NULL, NULL,  "sigsize", GetSigSizePFV, SetSigSizePFV, NULL, NULL,  "signum", GetSigNumPFV, NULL, NULL, NULL,  "qnumber", GetQNumberPFV, NULL, NULL, NULL,  "qlist", GetQListPFV, SetQListPFV, NULL, NULL,  "dim", GetDimPFV, SetDimPFV, NULL, NULL,  NULL, NULL, NULL, NULL, NULL};/* * The type structure for LWPARTFUNC */TypeStruct tsPartitionFunction = {  /* Documentation */  "{{{&PF} "  "{This type is the basic type for partition function handling "  "for the multifractal formalism and in particular the WTMM method.}}} ",  &partitionFunctionType,       /* The basic (unique) type name */  NULL,     /* The GetType function */                           DeletePartitionFunction,     /* The Delete function */  NewPartitionFunction,     /* The Delete function */    CopyPartitionFunction,       /* The copy function */  ClearPartitionFunction,       /* The clear function */    ToStrPartitionFunction,       /* String conversion */  PrintPartitionFunction,   /* The Print function : print the object when 'print' is called */  PrintInfoPartitionFunction,   /* The PrintInfo function : called by 'info' */  NULL,              /* The NumExtract function : used to deal with syntax like 10a */     fieldsPartitionFunction      /* The list of fields */};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -