int CSchemaCache::Load() { WIN32_FIND_DATA pFind; CString strPath; HANDLE hSearch; int nCount; Clear(); strPath.Format( _T("%s\\Schemas\\*.xsd"), (LPCTSTR)Settings.General.Path ); hSearch = FindFirstFile( strPath, &pFind ); if ( hSearch == INVALID_HANDLE_VALUE ) return 0; nCount = 0; do { strPath.Format( _T("%s\\Schemas\\%s"), (LPCTSTR)Settings.General.Path, pFind.cFileName ); CSchema* pSchema = new CSchema(); if ( pSchema->Load( strPath ) ) { CString strURI( pSchema->m_sURI ); CharLower( strURI.GetBuffer() ); strURI.ReleaseBuffer(); m_pURIs.SetAt( strURI, pSchema ); CString strName( pSchema->m_sSingular ); CharLower( strName.GetBuffer() ); strName.ReleaseBuffer(); m_pNames.SetAt( strName, pSchema ); } else { delete pSchema; } } while ( FindNextFile( hSearch, &pFind ) ); FindClose( hSearch ); return nCount; }
int CSchemaCache::Load() { #ifdef _DEBUG __int64 nStartTotal = GetMicroCount(); #endif Clear(); CString strPath; strPath.Format( _T("%s\\Schemas\\*.xsd"), (LPCTSTR)Settings.General.Path ); WIN32_FIND_DATA pFind = {}; HANDLE hSearch = FindFirstFile( strPath, &pFind ); if ( hSearch == INVALID_HANDLE_VALUE ) return 0; int nCount = 0; do { #ifdef _DEBUG __int64 nStart = GetMicroCount(); #endif strPath.Format( _T("%s\\Schemas\\%s"), (LPCTSTR)Settings.General.Path, pFind.cFileName ); CSchema* pSchema = new CSchema(); if ( pSchema && pSchema->Load( strPath ) ) { CString strURI( pSchema->GetURI() ); strURI.MakeLower(); m_pURIs.SetAt( strURI, pSchema ); CString strName( pSchema->m_sSingular ); strName.MakeLower(); m_pNames.SetAt( strName, pSchema ); for ( POSITION pos = pSchema->GetFilterIterator(); pos; ) { CString sType; BOOL bResult; pSchema->GetNextFilter( pos, sType, bResult ); if ( bResult ) { m_pTypeFilters.SetAt( sType, pSchema ); } } ++nCount; } else { delete pSchema; pSchema = NULL; } #ifdef _DEBUG __int64 nEnd = GetMicroCount(); TRACE( _T("Schema \"%s\" load time : %I64i ms : %s\n"), strPath, ( nEnd - nStart ) / 1000, pSchema ? _T("SUCCESS") : _T("FAILED") ); #endif } while ( FindNextFile( hSearch, &pFind ) ); FindClose( hSearch ); #ifdef _DEBUG __int64 nEndTotal = GetMicroCount(); TRACE( _T("Schemas load time : %I64i ms. Found %d types.\n"), ( nEndTotal - nStartTotal ) / 1000, m_pTypeFilters.GetCount() ); #endif return nCount; }