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

📄 coder.h

📁 东南大学版本
💻 H
📖 第 1 页 / 共 2 页
字号:
									{
										p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].c=2;
									}
							}
							c[k]=2;
						}
						k++;
					}
				}
			}
//////////////////////////////////////////2
		for(i=0;i<(height>>s);i++)
			for(int j=0;j<(width>>s);j++)
			{
				if(p0[(height>>s)+i][(width>>s)+j].w>=T)
				{
					c[k]=1;
					p0[(height>>s)+i][(width>>s)+j].c=1;

					////////////////////////////////////
					if(p0[(height>>s)+i][(width>>s)+j].w>=1.5*T)
					{
						cs[ks]=1;
					}
					else
					{
						cs[ks]=0;
					}
					ks++;
                    ////////////////////////////////////

					p0[(height>>s)+i][(width>>s)+j].w-=T;
					//p0[(height>>s)+i][(width>>s)+j].w=0;
					k++;
				}
				else if(p0[(height>>s)+i][(width>>s)+j].w<=-T)
				{
					c[k]=4;
					p0[(height>>s)+i][(width>>s)+j].c=4;

					////////////////////////////////////
					if(p0[(height>>s)+i][(width>>s)+j].w>=1.5*T)
					{
						cs[ks]=1;
					}
					else
					{
						cs[ks]=0;
					}
					ks++;
                    ////////////////////////////////////

					p0[(height>>s)+i][(width>>s)+j].w=0;
					k++;
				}
				else
				{
					if(p0[(height>>s)+i][(width>>s)+j].c!=2)
					{
						for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									if(abs(p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w)>=T)
									{
										c[k]=3;
									}
								}
						}
						if(c[k]!=3)
						{
							for(int l=s-1;l>=1;l--)
							{
								for(int g=0;g<(1<<(s-l));g++)
									for(int h=0;h<(1<<(s-l));h++)
									{
										p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
									}
							}
							c[k]=2;
						}
						k++;
					}
				}
			}
	}
	for( m=0;m<height;m++)
		for(int n=0;n<width;n++)
	{
		p0[m][n].c=5;
	}
	T/=2;
	}
	///////////////////////
	for(m=0;m<height;m++)
		for(int n=0;n<width;n++)
		{
			pd[m][n]=p0[m][n].w;
		}
	////////////////////////
	for(l=0;l<height;l++)
	{
		delete p0[l];
	}
	delete p0;
	return k;
}
void decoderD(FW** pd,BYTE* c,BYTE* cs,int height,int width,int N1,int T,int TN)
{
	int k=0;
	int ks=0;
	int s=1;
	wn** p0=new wn* [height];
	for(int l=0;l<height;l++)
	{
		p0[l]=new wn [width];
	}
	for(int m=0;m<height;m++)
		for(int n=0;n<width;n++)
		{
			if(m<(height>>N1)&&n<(width>>N1))
			{
				p0[m][n].w=pd[m][n];
			}
			else
			{
				p0[m][n].w=0;
				pd[m][n]=0;
			}
			p0[m][n].c=5;
		}
	for(int x=0;x<=TN;x++)
	{
	for(s=N1;s>=1;s--)
	{
		for(int i=0;i<(height>>s);i++)
			for(int j=0;j<(width>>s);j++)
			{
				if(p0[i][(width>>s)+j].c!=2)
				{
					if(c[k]==1)
					{
						if(cs[ks]==1)p0[i][(width>>s)+j].w=1.5*T;
						else p0[i][(width>>s)+j].w=T;
						p0[i][(width>>s)+j].c=1;
						ks++;
						k++;
					}
					else if(c[k]==4)
					{
						if(cs[ks]==1)p0[i][(width>>s)+j].w=-1.5*T;
						else p0[i][(width>>s)+j].w=-T;
						p0[i][(width>>s)+j].c=4;
						ks++;
						k++;
					}
					else if(c[k]==2)
					{
					    p0[i][(width>>s)+j].w=0;
						p0[i][(width>>s)+j].c=2;
					   for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									p0[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w=0;
									p0[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
								}
						}
					   k++;
					}
					else 
					{
					    p0[i][(width>>s)+j].w=0;
						p0[i][(width>>s)+j].c=3;
						k++;
					}
				}
			}
////////////////////////////////////1
		for(i=0;i<(height>>s);i++)
			for(int j=0;j<(width>>s);j++)
			{
				if(p0[(height>>s)+i][j].c!=2)
				{
					if(c[k]==1)
					{
						if(cs[ks]==1)p0[(height>>s)+i][j].w=1.5*T;
						else p0[(height>>s)+i][j].w=T;
						p0[(height>>s)+i][j].c=1;
						ks++;
						k++;
					}
					else if(c[k]==4)
					{
						if(cs[ks]==1)p0[(height>>s)+i][j].w=-1.5*T;
						else p0[(height>>s)+i][j].w=-T;
						p0[(height>>s)+i][j].c=4;
						ks++;
						k++;
					}
					else if(c[k]==2)
					{
					    p0[(height>>s)+i][j].w=0;
						p0[(height>>s)+i][j].c=2;
					   for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].w=0;
									p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].c=2;
								}
						}
					   k++;
					}
					else 
					{
					    p0[(height>>s)+i][j].w=0;
						p0[(height>>s)+i][j].c=3;
						k++;
					}
				}
			}
///////////////////////////////////////////////////////
		for(i=0;i<(height>>s);i++)
			for(int j=0;j<(width>>s);j++)
			{
				if(p0[(height>>s)+i][(width>>s)+j].c!=2)
				{
					if(c[k]==1)
					{
						if(cs[ks]==1)p0[(height>>s)+i][(width>>s)+j].w=1.5*T;
						else p0[(height>>s)+i][(width>>s)+j].w=T;
						p0[(height>>s)+i][(width>>s)+j].c=1;
						ks++;
						k++;
					}
					else if(c[k]==4)
					{
						if(cs[ks]==1)p0[(height>>s)+i][(width>>s)+j].w=-1.5*T;
						else p0[(height>>s)+i][(width>>s)+j].w=-T;
						p0[(height>>s)+i][(width>>s)+j].c=4;
						ks++;
						k++;
					}
					else if(c[k]==2)
					{
					    p0[(height>>s)+i][(width>>s)+j].w=0;
						p0[(height>>s)+i][(width>>s)+j].c=2;
					   for(int l=s-1;l>=1;l--)
						{
							for(int g=0;g<(1<<(s-l));g++)
								for(int h=0;h<(1<<(s-l));h++)
								{
									p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w=0;
									p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
								}
						}
					   k++;
					}
					else 
					{
					    p0[(height>>s)+i][(width>>s)+j].w=0;
						p0[(height>>s)+i][(width>>s)+j].c=3;
						k++;
					}
				}
			}
		}
	for(m=0;m<height;m++)
		for(int n=0;n<width;n++)
		{
			if(!(m<(height>>N1)&&n<(width>>N1)))
			{
				pd[m][n]+=p0[m][n].w;
			}
		}
	for(int m=0;m<height;m++)
		for(int n=0;n<width;n++)
		{
			if(m<(height>>N1)&&n<(width>>N1))
			{
				p0[m][n].w=pd[m][n];
			}
			else
			{
				p0[m][n].w=0;
			}
			p0[m][n].c=5;
		}
	T/=2;
	}
	for(l=0;l<height;l++)
	{
		delete p0[l];
	}
	delete p0;
}

void decoderLEN(FW** pd,BYTE* c,int height,int width,int N1,int T,int TN,int clen)
{
	int k=0;
	int s=1;
	wn** p0=new wn* [height];
	for(int l=0;l<height;l++)
	{
		p0[l]=new wn [width];
	}
	for(int m=0;m<height;m++)
		for(int n=0;n<width;n++)
		{
			if(m<(height>>N1)&&n<(width>>N1))
			{
				p0[m][n].w=pd[m][n];
			}
			else
			{
				p0[m][n].w=0;
				pd[m][n]=0;
			}
			p0[m][n].c=5;
		}
	for(int x=0;x<=TN;x++)
	{
		for(s=N1;s>=1;s--)
		{
			for(int i=0;i<(height>>s);i++)
			{
				for(int j=0;j<(width>>s);j++)
				{
					if(k<clen)
					{
						if(p0[i][(width>>s)+j].c!=2)
						{
							if(c[k]==1)
							{
								p0[i][(width>>s)+j].w=T;
								p0[i][(width>>s)+j].c=1;
								k++;
							}
							else if(c[k]==4)
							{
								p0[i][(width>>s)+j].w=-T;
								p0[i][(width>>s)+j].c=4;
								k++;
							}
							else if(c[k]==2)
							{
								p0[i][(width>>s)+j].w=0;
								p0[i][(width>>s)+j].c=2;
							   for(int l=s-1;l>=1;l--)
								{
									for(int g=0;g<(1<<(s-l));g++)
										for(int h=0;h<(1<<(s-l));h++)
										{
											p0[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w=0;
											p0[(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
										}
								}
							   k++;
							}
							else 
							{
								p0[i][(width>>s)+j].w=0;
								p0[i][(width>>s)+j].c=3;
								k++;
							}
						}
					}
					else break;
				}
				if(k==clen)break;
			}
	////////////////////////////////////1
			for(i=0;i<(height>>s);i++)
			{
				for(int j=0;j<(width>>s);j++)
				{
					if(k<clen)
					{
						if(p0[(height>>s)+i][j].c!=2)
						{
							if(c[k]==1)
							{
								p0[(height>>s)+i][j].w=T;
								p0[(height>>s)+i][j].c=1;
								k++;
							}
							else if(c[k]==4)
							{
								p0[(height>>s)+i][j].w=-T;
								p0[(height>>s)+i][j].c=4;
								k++;
							}
							else if(c[k]==2)
							{
								p0[(height>>s)+i][j].w=0;
								p0[(height>>s)+i][j].c=2;
							   for(int l=s-1;l>=1;l--)
								{
									for(int g=0;g<(1<<(s-l));g++)
										for(int h=0;h<(1<<(s-l));h++)
										{
											p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].w=0;
											p0[(height>>l)+(i<<(s-l))+g][(j<<(s-l))+h].c=2;
										}
								}
							   k++;
							}
							else 
							{
								p0[(height>>s)+i][j].w=0;
								p0[(height>>s)+i][j].c=3;
								k++;
							}
						}
					}
					else break;
				}
				if(k==clen)break;
			}
	///////////////////////////////////////////////////////
			for(i=0;i<(height>>s);i++)
			{
				for(int j=0;j<(width>>s);j++)
				{
					if(k<clen)
					{
						if(p0[(height>>s)+i][(width>>s)+j].c!=2)
						{
							if(c[k]==1)
							{
								p0[(height>>s)+i][(width>>s)+j].w=T;
								p0[(height>>s)+i][(width>>s)+j].c=1;
								k++;
							}
							else if(c[k]==4)
							{
								p0[(height>>s)+i][(width>>s)+j].w=-T;
								p0[(height>>s)+i][(width>>s)+j].c=4;
								k++;
							}
							else if(c[k]==2)
							{
								p0[(height>>s)+i][(width>>s)+j].w=0;
								p0[(height>>s)+i][(width>>s)+j].c=2;
							   for(int l=s-1;l>=1;l--)
								{
									for(int g=0;g<(1<<(s-l));g++)
										for(int h=0;h<(1<<(s-l));h++)
										{
											p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].w=0;
											p0[(height>>l)+(i<<(s-l))+g][(width>>l)+(j<<(s-l))+h].c=2;
										}
								}
							   k++;
							}
							else 
							{
								p0[(height>>s)+i][(width>>s)+j].w=0;
								p0[(height>>s)+i][(width>>s)+j].c=3;
								k++;
							}
						}
					}
					else break;
				}
				if(k==clen)break;
			}
			if(k==clen)break;
			}
		for(m=0;m<height;m++)
			for(int n=0;n<width;n++)
			{
				if(!(m<(height>>N1)&&n<(width>>N1)))
				{
					pd[m][n]+=p0[m][n].w;
				}
			}
		for(int m=0;m<height;m++)
			for(int n=0;n<width;n++)
			{
				if(m<(height>>N1)&&n<(width>>N1))
				{
					p0[m][n].w=pd[m][n];
				}
				else
				{
					p0[m][n].w=0;
				}
				p0[m][n].c=5;
			}
			if(k==clen)break;
	T/=2;
	}
	for(l=0;l<height;l++)
	{
		delete p0[l];
	}
	delete p0;
}
BYTE* press(BYTE* c,int len)
{
	int plen;
	if(len%4==0)plen=len/4;
	else plen=len/4+1;
	BYTE* p=new BYTE[plen];
	for(int i=0;i<len/4;i++)
	{
		BYTE pc[4];
		for(int k=0;k<4;k++)
		{
			switch(c[4*i+k])
			{
			case 1:pc[k]=0;break;
			case 2:pc[k]=1;break;
			case 3:pc[k]=2;break;
			case 4:pc[k]=3;break;
			}
		}
		p[i]=((pc[0]<<6)|(pc[1]<<4)|(pc[2]<<2)|pc[3]);
	}
	if(len%4)
	{
		p[len/4]=0;
		BYTE pc[4];
		for(int i=0;i<len%4;i++)
		{
			switch(c[4*(plen-1)+i])
			{
			case 1:pc[i]=0;break;
			case 2:pc[i]=1;break;
			case 3:pc[i]=2;break;
			case 4:pc[i]=3;break;
			}
			p[len/4]=(p[len/4]|((pc[i]<<(2*(3-i)))));
		}
	}
	return p;
}
BYTE* express(BYTE* p,int len)
{
	BYTE* c=new BYTE[len];
	for(int i=0;i<len/4;i++)
	{
		c[4*i+0]=((p[i]>>6)&0x03)+1;
		c[4*i+1]=((p[i]>>4)&0x03)+1;
		c[4*i+2]=((p[i]>>2)&0x03)+1;
	    c[4*i+3]=((p[i])&0x03)+1;
	}
	for(i=0;i<len%4;i++)
	{
		c[4*(len/4)+i]=((p[len/4]>>(2*(3-i)))&0x03)+1;
	}
	return c;
}
int dt(BYTE x)
{
	if(x==0)return 0;
	else return 1;
}

⌨️ 快捷键说明

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