コード例 #1
0
hkResult hkvTextureTransformationSettings::validate(hkArray<hkvAssetLogMessage>& out_messages)
{
  if (m_valid)
  {
    return HK_SUCCESS;
  }

  m_validationMinSize = 0;
  m_validationWarnSize = 0;
  m_validationMaxSize = 0;
  m_validationNeedsPowerOfTwo = false;
  m_validationNeedsSquare = false;
  m_validationNeedsMultipleOf = 1;

  bool ok = true;
  if (!m_ignoreTargetFormatRestrictions)
  {
    ok &= checkFormatCompatibility(out_messages);
  }
  ok &= determineRestrictions(out_messages);
  ok &= checkDimensions(out_messages);
  ok &= checkAlpha(out_messages);

  if (!ok)
  {
    return HK_FAILURE;
  }

  m_valid = true;
  return HK_SUCCESS;
}
コード例 #2
0
int main()
{
 char pm[5][5];
 char *k,*p,*t,*c,xx[2],ch,_0i,_0j,_1i,_1j;
 int a=0,lk,lp,x,y;

 clrscr();

 printf("Enter the Plain Text : ");
 gets(p);
 lp=strlen(p);

 printf("Enter the Key : ");
 gets(k);
 lk=strlen(k);

 //PLAYFAIR MATRIX MODULE START
 if(k[0]>='a')
  ch='a';
 else
  ch='A';

 for(int i=0;i<5;i++)
 {
  for(int j=0;j<5;j++)
  {
   if(a<=lk)
   {
    if(k[a]!=' ' && checkAlpha(a,k[a],k)==1)
     pm[i][j]=k[a];
    else
     --j;
    a++;
    if(a==lk+1)
     j--;
   }
   else if(a==lk+1)
    {

     if(checkAlpha(lk+1,ch,k)==1)
      pm[i][j]=ch;
     else
      --j;
     ch++;
     if(ch=='j'|| ch=='J')
      ch++;
    }
   else
    break;
  }
 }
 printf("\n\nPlayFair Matrix :- \n");
 for(int m=0;m<5;m++)
 {
  for(int n=0;n<5;n++)
  {
   printf("%c ",pm[m][n]);
  }
  printf("\n");
 }
 //PLAYFAIR MATRIX MODULE END

 //BREAK PLAIN TEXT MODULE START
 for(int u=0;u<=lp-1;u=u+2)
 {
  xx[0]=p[u];
  xx[1]=p[u+1];

  if(xx[0]==xx[1])
  {
   for(int j=lp;j>=u+1;j--)
   {
    p[j+1]=p[j];
   }
   if(k[0]>='a')
   {
     p[u+1]='x';
     lp++;
   }
    else
    {
     p[u+1]='X';
     lp++;
    }
  }
 }
 printf("\n\nIntermediate Plain Text :- ");
 for(u=0;u<=lp-1;u++)
 {
  printf("%c",p[u]);
 }
 //BREAK PLAIN TEXT MODULE END

 //CIPHER TEXT MODULE START

 for(u=0;u<=lp-1;u=u+2)
 {
  xx[0]=p[u];
  xx[1]=p[u+1];

  for(i=0;i<5;i++)
  {
   for(int j=0;j<5;j++)
   {
    if(xx[0]==pm[i][j])
    {
     _0j=j;
     _0i=i;
    }
    if(xx[1]==pm[i][j])
    {
     _1j=j;
     _1i=i;
    }
   }
  }
  if(_0i==_1i)
  {
   if(_0j+1>=5)
    _0j=-1;
   if(_1j+1>=5)
    _1j=-1;
   c[u]=pm[_0i][_0j+1];
   c[u+1]=pm[_1i][_1j+1];
  }
  else if(_0j==_1j)
  {
   if(_0i+1>=5)
    _0i=-1;
   if(_1i+1>=5)
    _1i=-1;
   c[u]=pm[_0i+1][_0j];
   c[u+1]=pm[_1i+1][_1j];
  }
  else
  {
   c[u]=pm[_0i][_1j];
   c[u+1]=pm[_1i][_0j];
  }
 }
 printf("\n\nCipher Text :- ");
 for(u=0;u<=lp-1;u++)
 {
  printf("%c",c[u]);
 }
 //CIPHER TEXT MODULE END
 getch();
 return 0;
}
コード例 #3
0
ファイル: XPath.cpp プロジェクト: sdhad77/HW_XML
//입력받은 커맨드를 분석하고 실행함.
//자료의 형태는 트리이며,
//탐색 방식은 크게 두가지가 존재함.
//1.재귀호출을 이용한 트리 전체 순회 방식
//2.큐를 이용한 깊이별 탐색 방식
int XPath::XPathCmdParser(wchar_t* _cmdBuf, XMLNode* _XpathRoute)
{
	cmdIdx = 0;
	wcscpy(cmdBuf, _cmdBuf);

	ClearQ(); //탐색한 노드 저장용 큐 초기화

	//루트 부터 탐색하기 위해 루트의 부모 노드가 필요함.
	XMLNode* tempNode = new XMLNode;
	tempNode->setName(L"Root's Parent"); //이름 설정
	tempNode->setChildNode(_XpathRoute);//루트를 자식으로 설정
	searchNodeQ.push(tempNode);//큐에 push함.

	while(cmdBuf[cmdIdx] != L'\0')
	{
		RemoveBlank(cmdBuf, &cmdIdx);

		//cmd : /
		if(cmdBuf[cmdIdx] == L'/')
		{
			//cmd : //
			if(cmdBuf[cmdIdx+1] == L'/')
			{
				//cmd : //*
				if(cmdBuf[cmdIdx+2] == L'*')
				{
					cmdIdx = cmdIdx + 3; // cmd : //* 이후로 인덱스 이동
					Search_All_NonString(searchNodeQ.front()); //문자열에 관계없이 루트노드부터 전부 저장.
					searchNodeQ.pop(); //방금 했던 탐색의 루트가 됐던 큐 제거
					printType = print_Name; //출력 타입을 이름으로 설정.
				}
				//cmd : //@
				else if(cmdBuf[cmdIdx+2] == L'@')
				{
					//cmd : //@attributeName
					if(checkAlpha(cmdBuf[cmdIdx+3]))
					{
						cmdIdx = cmdIdx + 3;			//cmd버퍼의 인덱스를 첫번째 알파벳으로 위치시킴.
						StrCpyFromCmdBuf();				//cmd버퍼에서 단어단위로 잘라서 복사함.
						RemoveBlank(cmdBuf, &cmdIdx);	//잘라낸 이후에 공백이 있을수도 있으니 cmd버퍼의 공백 제거
						ClearQ();						//노드를 저장할 큐를 비움.
														//루트부터 잘라낸 str과 일치하는 속성이름을 검색하여 큐에 저장함.
						Search_All(_XpathRoute, strBuf, search_AttributeName);
						printType = print_Value;//출력값을 value로 설정.
					}
					else ErrorCollection(L"//@");
				}
				//cmd : //tagName
				else if(checkAlpha(cmdBuf[cmdIdx+2]))
				{
					cmdIdx = cmdIdx + 2; //cmd : //이후로 인덱스 이동
					StrCpyFromCmdBuf(); //cmd 버퍼에서 str 버퍼로 커맨드 이동
					RemoveBlank(cmdBuf, &cmdIdx); //cmd버퍼 공백제거
					ClearQ();			//큐 비우기
					Search_All(_XpathRoute, strBuf, search_TagName); //루트 부터 탐색하여 strBuf에 있는 문자열과 일치하는 노드 저장.
					printType = print_Value;//출력값을 value로 설정.
				}
				else ErrorCollection(L"//");
			}
			//cmd : /*
			else if(cmdBuf[cmdIdx+1] == L'*')
			{
				int tempQSize = searchNodeQ.size(); //임시 큐 사이즈 저장. size()함수 그대로 사용하면 값이 계속 바뀌기 때문.
				while(tempQSize--)
				{
					Search_All_NonString(searchNodeQ.front());//큐에 저장된 노드들 기준으로 문자열과 상관없이 탐색하여 모든 노드를 큐에 저장.
					searchNodeQ.pop(); //방금 했던 탐색의 루트가 됐던 큐 제거
				}
				cmdIdx = cmdIdx + 2; //cmd : /* 이후로 인덱스 이동
				printType = print_Name;
			}
			//cmd : /tagName
			else if(checkAlpha(cmdBuf[cmdIdx+1]))
			{
				cmdIdx = cmdIdx + 1; //cmd : /a a로 인덱스 이동
				StrCpyFromCmdBuf(); //strBuf로 문자열 복사
				Search_Child(strBuf);//strBuf에 저장된 문자열을 기준으로 큐에 있는 노드의 자식들을 탐색함.
				printType = print_Value;//출력타입을 값으로 지정.
			}
			else ErrorCollection(L"/");
		}
		//cmd : [
		else if(cmdBuf[cmdIdx] == L'[')
		{
			//cmd : [1
			if(checkNumber(cmdBuf[cmdIdx+1]))
			{
				cmdIdx = cmdIdx + 1; //cmd : [1   1로인덱스 이동
				NumberCpyFromCmdBuf(); //문자열중 연속된 숫자들만 strBuf로 복사
				RemoveBlank(cmdBuf, &cmdIdx);//혹시 모를 공백 제거

				//cmd : [1]
				if(cmdBuf[cmdIdx] == L']') //cmd : [1]
				{
					cmdIdx++;
					int selectCnt = _wtoi(strBuf); //strBuf에 있는 문자열 -> int형으로 변경. []안에 있는 숫자가 몇인지 저장.
					if((int)searchNodeQ.size() >= selectCnt)
					{
						while(--selectCnt) searchNodeQ.pop(); //[]안의 숫자만큼 큐안의 노드 제거
						searchNodeQ.push(searchNodeQ.front());//원하는 노드를 제일 뒤로 넣음
						while(searchNodeQ.size()-1) searchNodeQ.pop();//원하는 노드 빼고 전부 팝
						printType = print_Value;
					}
					else ErrorCollection(L"[999]");
				}
				else ErrorCollection(L"[999");
			}
			//cmd : [a
			else if(checkAlpha(cmdBuf[cmdIdx+1]))
			{
				//cmd : [func(
				if(checkAnyChar(&cmdBuf[cmdIdx+1], L'(', L']'))
				{
					//cmd : func( 에서 (위치를 checkFunc에 기록.
					int checkFunc = checkAnyChar(&cmdBuf[cmdIdx+1], L'(', L']');

					//cmd : [func()]
					if(cmdBuf[cmdIdx + 1 + checkFunc + 1] == L')')
					{
						cmdIdx = cmdIdx + 1; //cmd : [func( 에서 f위치로 이동.
						StrCpyFromCmdBuf(); //cmd : [func( 에서 f부터 알파벳,숫자,-_. 가 아닌곳 직전까지 복사. (앞까지 복사될것임.
						FuncCollection(strBuf);//위에서 복사한 문자열로 어떤 함수인지 처리.

						cmdBuf[cmdIdx] = L'\0';
					}
					else ErrorCollection(L"[func(");
				}
				else ErrorCollection(L"[name~$");
			}
			//cmd : [@
			else if(cmdBuf[cmdIdx] == L'@')
			{
				cmdBuf[cmdIdx] = L'\0';
			}
			else ErrorCollection(L"[~");
		}
		//cmd가 /,[ 로 시작하지 않을때.
		else ErrorCollection(L"cmd");
	}

	//searchNodeQ에 있는 노드들 출력
	PrintNodeQ();

	delete tempNode;

	return 0;
}