// FindLiteral bool COpcTextReader::FindLiteral(COpcText& cToken) { OPC_ASSERT(m_szBuf != NULL); OPC_ASSERT(m_uLength != 0); LPCWSTR szText = cToken.GetText(); UINT uLength = (szText != NULL)?wcslen(szText):0; // check for trivial case if (uLength == 0) { return false; } UINT uPosition = SkipWhitespace(cToken); // check if there is enough data. if (uLength > (m_uEndOfData - uPosition)) { return false; } for (UINT ii = uPosition; ii < m_uEndOfData-uLength+1; ii++) { // check if search halted. if (CheckForHalt(cToken, ii)) { return false; } // compare text at current position. if (IsEqual(cToken, m_szBuf+ii, szText, uLength)) { CopyData(cToken, ii, ii+uLength); return true; } // stop search if leading unmatching characters are not ignored. if (!cToken.GetSkipLeading()) { break; } } return false; }