여기에 문제가 있습니다. 내 게임에서 내 Gui 용 TextBox를 만들었습니다.이 열을 행에 최적화하는 알고리즘 및 그 반대로 알고리즘
단어의 크기가 조정되기 때문에 크기를 조정할 때마다 텍스트 문자열에서 어떤 색인이 캐럿인지 알아 내야합니다. 그런 다음 크기 조정 후 해당 행 열로 변환해야합니다. . 내 프로파일 러에 따르면 가장 느린 부분은 다음 유니 코드 문자를 구할 때입니다.
int AguiTextBox::indexFromColumnRow(int column, int row, bool includeUnwantedChars) const
{
size_t rowLen = 0;
int retIndex = -1;
int bytesSkipped = 0;
int curCharLen = 0;
std::string curChar;
std::string::const_iterator it = getText().begin();
std::string::const_iterator end = getText().end();
//decrement column so that the lowest is -1
column--;
if(textRows.size() == 0 || (column == -1 && row == 0))
{
//not in the text
return -1;
}
0.01s for(size_t i = 0; i < textRows.size(); ++i)
{
//get length of row
0.00s rowLen = _unicodeFunctions.getUtf8StringLength(textRows[i]);
//handle -1th case
//get next character
do
{
0.00s curCharLen = _unicodeFunctions.bringToNextUnichar(it,end);
0.01s curChar = getText().substr(bytesSkipped,curCharLen);
bytesSkipped += curCharLen;
if(includeUnwantedChars)
retIndex++;
} while (curChar[0] >= 0 && curChar[0] < ' ' && curChar != "\n");
if(!includeUnwantedChars)
retIndex++;
//only increase for newlines
0.00s if(curChar != "\n")
{
bytesSkipped -= curCharLen;
retIndex--;
it -= curCharLen;
}
if((int)i == row && column == -1)
{
return retIndex;
}
0.06s for(size_t j = 0; j < rowLen; ++j)
{
//get next character
do
{
0.10s curCharLen = _unicodeFunctions.bringToNextUnichar(it,end);
0.91s curChar = getText().substr(bytesSkipped,curCharLen);
0.03s bytesSkipped += curCharLen;
0.03s if(includeUnwantedChars)
retIndex++;
0.11s } while (curChar[0] >= 0 && curChar[0] < ' ' && curChar != "\n");
0.06s if(!includeUnwantedChars)
0.00s retIndex++;
0.02s if((int)i == row && (int)j == column)
{
return retIndex;
}
}
}
return retIndex;
}
어떻게 최적화 할 수 있습니까?
감사
@Erik는 문자의 덱에 대해 무엇을 의미합니까?
dequeue 아이디어에 대해 자세히 알고 싶습니까? – jmasterx
@Milo : 나머지 코드에 따라 다릅니다. 800 바이트로 평가되는 1000 바이트 문자열이있는 경우 현재 크기를 조정하는 동안 바이트를 여러 번 문자로 파싱하고 있습니다. 사용자가 입력 한 내용 만 구문 분석하고 예를 들어 계속 유지하는 시스템을 만듭니다. * utf8 바이트 * 및 * 문자 *의 병렬 배열을 사용하면 반복되는 구문 분석을 피할 수 있습니다. – Erik