Beispiel #1
0
bool DataGrid::GenNext(list<CHANGE_ORDER>& outChange)
{
	vector<Pos> vBlankCells;
	for(int x = 0;x < 4;x ++)
	{
		for(int y = 0;y < 4;y ++)
		{
			if(data[y][x] == 0)
			{
				Pos pos;
				pos.X = x;
				pos.Y = y;

				vBlankCells.push_back(pos);
			}
		}
	}

	//新产生的值,一定几率为4
	int newValue = 2;
	if(rand() % 100 < 20)
	{
		newValue = 4;
	}

	if(vBlankCells.size() > 0)
	{
		int index = rand() % vBlankCells.size();
		const Pos& pos = vBlankCells[index];

		data[pos.Y][pos.X] = newValue;

		//记录变化
		ChangeData change;
		change.cType = enChangeType_AddNew;
		change.Param1 = pos.Y;
		change.Param2 = pos.X;
		CHANGE_ORDER order;
		order.push_back(change);

		outChange.push_back(order);

		if(vBlankCells.size() == 1)
		{
			if(CheckEnd() == true)
			{
				//游戏结束
				return false;
			}
		}

		return true;
	}
	else
	{
		//没有空格了
		return false;
	}
}
int TestIterators(hash_table* hash_info) {
	iterator it;
	char** i;
	for ( it = SetToEnd(hash_info); !CheckBegin(it) ; it = Back(it) )  {
		i = Value(it);
	}

	for ( it = SetToBegin(hash_info); !CheckEnd(it) ; it = Next(it) )  {
		i = Value(it);
	}
	return 0;
}
bool CPDF_DataAvail::CheckDocStatus(DownloadHints* pHints) {
  switch (m_docStatus) {
    case PDF_DATAAVAIL_HEADER:
      return CheckHeader(pHints);
    case PDF_DATAAVAIL_FIRSTPAGE:
      return CheckFirstPage(pHints);
    case PDF_DATAAVAIL_HINTTABLE:
      return CheckHintTables(pHints);
    case PDF_DATAAVAIL_END:
      return CheckEnd(pHints);
    case PDF_DATAAVAIL_CROSSREF:
      return CheckCrossRef(pHints);
    case PDF_DATAAVAIL_CROSSREF_ITEM:
      return CheckCrossRefItem(pHints);
    case PDF_DATAAVAIL_CROSSREF_STREAM:
      return CheckAllCrossRefStream(pHints);
    case PDF_DATAAVAIL_TRAILER:
      return CheckTrailer(pHints);
    case PDF_DATAAVAIL_TRAILER_APPEND:
      return CheckTrailerAppend(pHints);
    case PDF_DATAAVAIL_LOADALLCROSSREF:
      return LoadAllXref(pHints);
    case PDF_DATAAVAIL_LOADALLFILE:
      return LoadAllFile(pHints);
    case PDF_DATAAVAIL_ROOT:
      return CheckRoot(pHints);
    case PDF_DATAAVAIL_INFO:
      return CheckInfo(pHints);
    case PDF_DATAAVAIL_ACROFORM:
      return CheckAcroForm(pHints);
    case PDF_DATAAVAIL_PAGETREE:
      if (m_bTotalLoadPageTree)
        return CheckPages(pHints);
      return LoadDocPages(pHints);
    case PDF_DATAAVAIL_PAGE:
      if (m_bTotalLoadPageTree)
        return CheckPage(pHints);
      m_docStatus = PDF_DATAAVAIL_PAGE_LATERLOAD;
      return true;
    case PDF_DATAAVAIL_ERROR:
      return LoadAllFile(pHints);
    case PDF_DATAAVAIL_PAGE_LATERLOAD:
      m_docStatus = PDF_DATAAVAIL_PAGE;
    default:
      m_bDocAvail = true;
      return true;
  }
}
//分程序语法判断
bool KH::GrammarPL0::Block(){
	bool result = true;

	if( GetWord(false).GetSign() == KH::_BLOCK) skip(1); //自然会跳过所有的block
	if( CheckEnd()) {
		Error( result, " Empty Input ! " );
		return false;
	}

	if( GetWord(false).GetSign() == KH::_CONST){
		 skip(1);
		if( GetWord(false).GetSign() == KH::_IDENTIFIER){
			if(	 GetWord(1,false).GetSign() == KH::_ASSIGN &&
				 GetWord(2,false).GetSign() == KH::_INT ||
				 GetWord(2,false).GetSign() == KH::_FLOAT 
				) 
			{
				Sa.PushVariable(GetLine(),GetWord(false).GetValue());

				//Gen  int a = 11
				if(GetWord(2,false).GetSign() == KH::_INT)
					GenPush("const int " + GetWord(false).GetValue() + " = " + GetWord(2,false).GetValue() + "; " );
				else
					GenPush("const float " + GetWord(false).GetValue() + " = " + GetWord(2,false).GetValue() + "; " );
				
				 skip(3,false);
				while( GetWord(false).GetSign() == KH::_COMMA){
					if(	 GetWord(1,false).GetSign() == KH::_IDENTIFIER &&
						 GetWord(2,false).GetSign() == KH::_ASSIGN &&
						 GetWord(3,false).GetSign() == KH::_INT ||
						 GetWord(3,false).GetSign() == KH::_FLOAT 
						)
					{
						Sa.PushVariable(GetLine(),GetWord(1,false).GetValue());

						//Gen  , int a = 11
						if(GetWord(3,false).GetSign() == KH::_INT)
							GenPush("const int " + GetWord(1,false).GetValue() + " = " + GetWord(3,false).GetValue() + "; " );
						else
							GenPush("const float " + GetWord(1,false).GetValue() + " = " + GetWord(3,false).GetValue() + "; " );

						 skip(4,false);
					}
					else
					{
						Error( result, " Const Loop Error : " + GetWord(false).GetValue() + GetWord(1,false).GetValue() + GetWord(2,false).GetValue() + GetWord(3,false).GetValue() );
						break;
					}
				}
				if( GetWord(false) == KH::_SEMICOLON)
					 skip(1);
				else{
					Error( result, " Const Not End : " + GetWord(false).GetValue() );
				}
			}
			else
			{
				Error( result, " Const sentence Error : " + GetWord(false).GetValue() );
			}

		}
		else
		{
			Error( result, " Const Identifier Error : " + GetWord(false).GetValue() + GetWord(1,false).GetValue() + GetWord(2,false).GetValue() );
		}
	}//End of if const ;

	if( GetWord(false).GetSign() == KH::_VAR)//如果单词是"var"
	{
		 skip(1);//取下一个单词
		if( GetWord(false).GetSign() == KH::_IDENTIFIER){
			Sa.PushVariable(GetLine(),GetWord(false).GetValue());

			//Gen  var a
			GenPush("double " + GetWord(false).GetValue() + " = 0 ; " );
			 skip(1);
			while( GetWord(false).GetSign() == KH::_COMMA){
				if(	 GetWord(1,false).GetSign() == KH::_IDENTIFIER )
				{
					Sa.PushVariable(GetLine(),GetWord(1,false).GetValue());

					//Gen  var .. , a
					GenPush("double " + GetWord(1,false).GetValue() + " = 0 ; " );
					 skip(2);
				}
				else
				{
					Error( result," Var Loop Error : " + GetWord(false).GetValue() + GetWord(1,false).GetValue());
					break;
				}
			}
			if( GetWord(false).GetSign() == KH::_SEMICOLON){
				 skip(1);
			}
			else 
			{
				Error( result," Var Not End : " + GetWord(false).GetValue() );
			}
		}
		else
		{
			Error( result," Var Identifier Error : " + GetWord(false).GetValue() );
		}
	}//End of if var

	while ( GetWord(false).GetSign() == KH::_PROC)//如果单词是"procedure",则进入"函数定义"语法分析
	{
		 skip(1);
		if(	 GetWord(false).GetSign() == KH::_IDENTIFIER && 
			 GetWord(1,false).GetSign() == KH::_SEMICOLON)//"procedure"后应为标识符
		{
			Sa.PushVariable(GetLine(),GetWord(false).GetValue());

			//Gen  var .. , a
				GenPush("double " + GetWord(false).GetValue() + "( ) { " ); //注意闭合!
				funcNames.push_back(GetWord(false).GetValue());

			 skip(2);
			 Block();

			 //Gen  var .. , a
			 GenPush(" return 0 ; } " ); //注意闭合!

		}
		else{
			Error( result," Proc define Error : " + GetWord(false).GetValue() + GetWord(1,false).GetValue() ) ;
		}
	}//End of if procedure

	if(!StatementParsing()){
		Error( result," Parsing Error . " );
	}//End of if Parsing

	return result;
}