Exemplo n.º 1
0
void freeSB(SmartBuffer *sb) {
  free_cvector(sb -> buff, 0, (sb -> size) - 1);
  if ((sb -> token) != NULL) {
    free_cvector(sb -> token, 0, sb -> size);
  }
  free_gblock(sb, sizeof(SmartBuffer));
}
Exemplo n.º 2
0
void mpsqrt(unsigned char w[], unsigned char u[], unsigned char v[], int n,
	int m)
{
	void mplsh(unsigned char u[], int n);
	void mpmov(unsigned char u[], unsigned char v[], int n);
	void mpmul(unsigned char w[], unsigned char u[], unsigned char v[], int n,
		int m);
	void mpneg(unsigned char u[], int n);
	void mpsdv(unsigned char w[], unsigned char u[], int n, int iv, int *ir);
	int i,ir,j,mm;
	float fu,fv;
	unsigned char *r,*s;

	r=cvector(1,n<<1);
	s=cvector(1,n<<1);
	mm=IMIN(m,MF);
	fv=(float) v[mm];
	for (j=mm-1;j>=1;j--) {
		fv *= BI;
		fv += v[j];
	}
	fu=1.0/sqrt(fv);
	for (j=1;j<=n;j++) {
		i=(int) fu;
		u[j]=(unsigned char) i;
		fu=256.0*(fu-i);
	}
	for (;;) {
		mpmul(r,u,u,n,n);
		mplsh(r,n);
		mpmul(s,r,v,n,IMIN(m,n));
		mplsh(s,n);
		mpneg(s,n);
		s[1] -= 253;
		mpsdv(s,s,n,2,&ir);
		for (j=2;j<n;j++) {
			if (s[j]) {
				mpmul(r,s,u,n,n);
				mpmov(u,&r[1],n);
				break;
			}
		}
		if (j<n) continue;
		mpmul(r,u,v,n,IMIN(m,n));
		mpmov(w,&r[1],n);
		free_cvector(s,1,n<<1);
		free_cvector(r,1,n<<1);
		return;
	}
}
Exemplo n.º 3
0
void mpinv(unsigned char u[], unsigned char v[], int n, int m)
{
	void mpmov(unsigned char u[], unsigned char v[], int n);
	void mpmul(unsigned char w[], unsigned char u[], unsigned char v[], int n,
		int m);
	void mpneg(unsigned char u[], int n);
	unsigned char *rr,*s;
	int i,j,maxmn,mm;
	float fu,fv;

	maxmn=IMAX(n,m);
	rr=cvector(1,1+(maxmn<<1));
	s=cvector(1,maxmn);
	mm=IMIN(MF,m);
	fv=(float) v[mm];
	for (j=mm-1;j>=1;j--) {
		fv *= BI;
		fv += v[j];
	}
	fu=1.0/fv;
	for (j=1;j<=n;j++) {
		i=(int) fu;
		u[j]=(unsigned char) i;
		fu=256.0*(fu-i);
	}
	for (;;) {
		mpmul(rr,u,v,n,m);
		mpmov(s,&rr[1],n);
		mpneg(s,n);
		s[1] -= 254;
		mpmul(rr,s,u,n,n);
		mpmov(u,&rr[1],n);
		for (j=2;j<n;j++)
			if (s[j]) break;
		if (j==n) {
			free_cvector(s,1,maxmn);
			free_cvector(rr,1,1+(maxmn<<1));
			return;
		}
	}
}
Exemplo n.º 4
0
void int_split(char *s,int *nums,int num)
{
	int cnt=0,i;
	char *p;
	p=cvector(0,MAXLINE-1);
	while(*s !='\0'&&cnt<num)
	{	while(isspace(*s)) ++s;				//skip white space
		if(*s!='\0')						//found a word
		{	i=0;
			while(!isspace(*s)&&*s!='\0')	//translate the word into float number
			{	p[i++]=*s++;}
			p[i]='\0';
			nums[cnt++]=atoi(p);
		}
	}
	free_cvector(p,0,MAXLINE-1);
}
Exemplo n.º 5
0
void free_cmatrix(char **v, unsigned long nrl, unsigned long nrh, unsigned long ncl, unsigned long nch) {
  for(unsigned long i = nrl; i <= nrh; i++) {
    free_cvector(v[i], ncl, nch);
  }
  free_new_vvector(v, nrl, nrh, NRUTIL_CPTR);
}
Exemplo n.º 6
0
int main(void)
{
	int k;
	unsigned long i,j,lc,lcode=MAXLINE,n,nch,nrad,nt,nfreq[257],tmp,zero=0;
	unsigned char *code,mess[MAXLINE],ness[MAXLINE];
	arithcode acode;
	FILE *fp;

	code=cvector(0,MAXLINE);
	acode.ilob=lvector(1,NWK);
	acode.iupb=lvector(1,NWK);
	acode.ncumfq=lvector(1,MC+2);
	if ((fp = fopen("text.dat","r")) == NULL)
		nrerror("Input file text.dat not found.\n");
	for (j=1;j<=256;j++) nfreq[j]=0;
	while ((k=getc(fp)) != EOF) {
		if ((k -= 31) >= 1) nfreq[k]++;
	}
	fclose(fp);
	nch=96;
	nrad=256;
	/* here is the initialization that constructs the code */
	arcmak(nfreq,(int)nch,(int)nrad,&acode);
	/* now ready to prompt for lines to encode */
	for (;;) {
		printf("Enter a line:\n");
		if (gets((char *)&mess[1]) == NULL) break;
		n=strlen((char *)&mess[1]);
		/* shift from 256 character alphabet to 96 printing characters */
		for (j=1;j<=n;j++) mess[j] -= 32;
		/* message initialization */
		lc=1;
		arcode(&zero,&code,&lcode,&lc,0,&acode);
		/* here we arithmetically encode mess(1:n) */
		for (j=1;j<=n;j++) {
			tmp=mess[j];
			arcode(&tmp,&code,&lcode,&lc,1,&acode);
		}
		/* message termination */
		arcode(&nch,&code,&lcode,&lc,1,&acode);
		printf("Length of line input, coded= %lu %lu\n",n,lc-1);
		/* here we decode the message, hopefully to get the original back */
		lc=1;
		arcode(&zero,&code,&lcode,&lc,0,&acode);
		for (j=1;j<=lcode;j++) {
			arcode(&i,&code,&lcode,&lc,-1,&acode);
			if (i == nch) break;
			else ness[j]=(unsigned char)i;
		}
		if (j > lcode) nrerror("Arith. coding: Never get here");
		nt=j-1;
		printf("Decoded output:\n");
		for (j=1;j<=nt;j++) printf("%c",(char)(ness[j]+32));
		printf("\n");
		if (nt != n) printf("Error ! j decoded != n input.\n");
	}
	free_cvector(code,0,MAXLINE);
	free_lvector(acode.ncumfq,1,MC+2);
	free_lvector(acode.iupb,1,NWK);
	free_lvector(acode.ilob,1,NWK);
	printf("Normal completion\n");
	return 0;
}
Exemplo n.º 7
0
void free_charvector( CHARVECTOR *v)





{


		  


		   if(v==NULL || v->co==NULL){


		  


		  		t_error("This vector was never allocated\n");


		  	


		    }else if(v->isdynamic==1){





			free_cvector(v->co,NL);


			


			v->isdynamic=v->nl=v->nh=-1;


			


			free(v);





			return;


		  


		  }else{


			printf("\nWarning::An attemp was made to free a non dynamic vector\n");


		  }


}
Exemplo n.º 8
0
/*
 * Function read_init is used to read in the initial values of selfing rates (S) for MCMC updating
 * Input argument:  initialfilename is the directory of the file containing the initial values, 
 *					if it is NULL,then using random number generator to generate the INIT structure
 *					chainnum is the number of MCMC chains, determining the number of sets of initial values
 *					popnum is the number of subpopulation assumed
 *					chainnum and popnum determines the dimensions of the "initd" element of the INIT struture
 * Output argument: this application returns an INIT structure, which contains the "chainnum" sets of initial values for F per subpopulation
 * The data in the file should be ranged as:
 *	>chain_name1							each set of the initial values should begin with ">S"
 *	num1 num2..
 *
 *  >chain_name2
 *	....
 */
INIT read_init(char *initialfilename,int chainnum,int popnum,long update,long burnin,int thinning)
{
	//char sign='#';
	int i,j,temp,cnt_chn=0;
	FILE *initfp;
	char *line;
	INIT initial;
	
	initial.chainnum=chainnum;
	initial.update=update;
	initial.burnin=burnin;
	initial.thinning=thinning;
	initial.popnum=popnum;
	
	initial.initd=matrix(0,chainnum-1,0,popnum-1);
	initial.name_len=ivector(0,chainnum-1);
	initial.chn_name=cmatrix(0,chainnum-1,0,MAXLEN-1);
	
	if(initialfilename==NULL)
	{
		for(i=0;i<chainnum;i++)
		{
			for(j=0;j<popnum;j++)
				initial.initd[i][j]=ran1();
			strcpy(initial.chn_name[i],"Chain#");
			strcat(initial.chn_name[i],int_to_string(i+1));			

			initial.name_len[i]=strlen(initial.chn_name[i])+1;
	
			initial.chn_name[i][initial.name_len[i]-1]='\0';
		}
	}
	else{
		if((initfp=fopen(initialfilename,"r"))==NULL)
		{	nrerror("Cannot open inital file!");}
		line=cvector(0,MAXLINE-1);
		cnt_chn=0;
		for(i=0;i<chainnum&&(!feof(initfp));i++)
		{
			while(!feof(initfp))
			{
				fgets(line,MAXLINE,initfp);
				if(line[0]=='>') break;
			}
			for(j=1;j<strlen(line)&&line[j]!='\n';j++)
			{
				initial.chn_name[i][j-1]=line[j];
			}
			initial.chn_name[j]='\0';
			//printf("%s\n",initial.chn_name[i]);
			initial.name_len[i]=j;
			fgets(line,MAXLINE,initfp);
			temp=word_cnt(line);
			if(temp!=popnum)
			{
				nrerror("The number of initial values for selfing rates is not equal the number of subpopulation assumed!\n");
			}
			word_split(line,initial.initd[cnt_chn],popnum);
			cnt_chn++;
		}
		if(cnt_chn<=chainnum)
		{
			for(i=cnt_chn;i<chainnum;i++)
			{
				for(j=0;j<popnum;j++)
					initial.initd[i][j]=ran1();
				strcpy(initial.chn_name[i],"Chain#");
				strcat(initial.chn_name[i],int_to_string(i+1));
				
				initial.name_len[i]=strlen(initial.chn_name[i])+1;
				initial.chn_name[i][initial.name_len[i]-1]='\0';
	
			}
		}
		if(cnt_chn>chainnum)
		{
			nrerror("The number of chain starting points is greater than the number of chains!\n");
		}
		fclose(initfp);
		free_cvector(line,0,MAXLINE-1);
	}
	/*for(i=0;i<chainnum;i++)
	{
		for(j=0;j<popnum;j++)
			fprintf(stdout,"%f\t",initial.initd[i][j]);
		fprintf(stdout,"\n");
	}*/	
	return(initial);
}