void EncogObjectFree(void *obj) { ENCOG_OBJECT *encogObject; encogObject = (ENCOG_OBJECT *)obj; EncogErrorClear(); if( encogObject->id[0]!='E' || encogObject->id[1]!='G' ) { EncogErrorSet(ENCOG_ERROR_OBJECT); return; } switch(encogObject->type) { case ENCOG_TYPE_NEURAL_NETWORK: _freeNeuralNetwork((ENCOG_NEURAL_NETWORK*)obj); break; case ENCOG_TYPE_DATA: _freeData((ENCOG_DATA*)obj); break; case ENCOG_TYPE_PSO: _freePSO((ENCOG_TRAIN_PSO*)obj); break; case ENCOG_TYPE_RPROP: _freeRPROP((ENCOG_TRAIN_RPROP*)obj); break; case ENCOG_TYPE_HASH: _freeHash((ENCOG_HASH*)obj); break; } }
//---------------------------------------------------------------------------------------- // Un-initialize the object, bringing it back in the unitialized state. void CFloat32Data3DMemory::_unInit() { ASTRA_ASSERT(m_bInitialized); _freeData(); _clear(); m_bInitialized = false; }
tERROR EnumContext::ScanPrefetchFromDriver(tDWORD nProgressRange) { PREFETCH_DATA* pData = NULL; ULONG dwSize = 0; DWORD dwNameOffset; DWORD dwCount; DWORD dwScanned = 0; DWORD dwFileNamesCount = 0; tagUnmangledFileName* arrFileNames = NULL; tDWORD dwProgress; cAutoPrMemFree _freeData(*m_pStartUpEnum, (void**)&pData); cAutoPrMemFree _freeFileArray(*m_pStartUpEnum, (void**)&arrFileNames); if (!m_pStartUpEnum->m_hDevice) { PR_TRACE((m_pStartUpEnum, prtERROR, "startupenum2\tNo handle driver! (ScanPrefetchFromDriver)")); return errOBJECT_NOT_INITIALIZED; } dwSize = GetObjFromDriver(_AVPG_IOCTL_GET_PREFETCHINFO, 0, (LPVOID*) &pData); PR_TRACE((m_pStartUpEnum,prtIMPORTANT,"startupenum2\t<ScanPrefecthFromDriver> GetPrefecthFromDriver returned %d bytes", dwSize)); if (!dwSize) return errOK; ////////////////////////////////////////////////////////////////////////// LPVOID pDrvListBuffer = NULL; ULONG DrvListSize = GetObjFromDriver(_AVPG_IOCTL_GET_DRVLIST, 0,&pDrvListBuffer); PR_TRACE((m_pStartUpEnum, prtIMPORTANT,"startupenum2\t<ScanPrefecthFromDriver> GetDrvListFromDriver returned %d bytes", DrvListSize)); cAutoPrMemFree _free_buff_drvlist(*m_pStartUpEnum, &pDrvListBuffer); DWORD dwDrvListCount = 0; size_t nStringOffset, nLastLen; for (nStringOffset = 0, nLastLen = 0; nLastLen = wcslen((PWCHAR)pDrvListBuffer + nStringOffset);) { nStringOffset+=nLastLen+1; if (DrvListSize>=nStringOffset*sizeof(WCHAR)) ++dwDrvListCount; else break; } ////////////////////////////////////////////////////////////////////////// if (pData->dwMagic != MAGIC_ASCC && pData->dwMagic != 'ACCS') return errOBJECT_INCOMPATIBLE; if (pData->dwDataSize > dwSize) pData->dwDataSize = dwSize; if (pData->dwEndOfNamesBlock > dwSize) return errOBJECT_DATA_SIZE_UNDERSTATED; tERROR error=m_pStartUpEnum->heapAlloc((tPTR*)&arrFileNames, (pData->dwNamesCount + dwDrvListCount) * sizeof(arrFileNames[0])); if (PR_FAIL(error)) { PR_TRACE((m_pStartUpEnum, prtERROR,"startupenum2\tScanPrefetchFromDriver - no memory")); return error; } for (dwCount=0, dwNameOffset=pData->dwNamesOffset; dwNameOffset < pData->dwEndOfNamesBlock && dwCount < pData->dwNamesCount; dwCount++) { if (dwNameOffset + sizeof(PREFETCH_NAME_DATA) > pData->dwEndOfNamesBlock) break; PREFETCH_NAME_DATA* pName = (PREFETCH_NAME_DATA*)((BYTE*)pData + dwNameOffset); if (dwNameOffset + sizeof(PREFETCH_NAME_DATA) + pName->wSize*sizeof(WCHAR) > pData->dwEndOfNamesBlock) break; PR_TRACE((m_pStartUpEnum, prtNOTIFY, "startupenum2\tScanPrefetchFromDriver #%d flags=%04X %s %S\n", dwCount, pName->wFlags, pName->wFlags & PREFETCH_FLAG_DIRECTORY ? "DIR " : "FILE", pName->wcName)); if (!(pName->wFlags & PREFETCH_FLAG_DIRECTORY)) { UnmangledName(pName->wcName, arrFileNames[dwFileNamesCount]); dwFileNamesCount++; } dwNameOffset += pName->wSize*sizeof(WCHAR) + sizeof(PREFETCH_NAME_DATA); } for (nStringOffset = 0, nLastLen = 0; nLastLen = wcslen((PWCHAR)pDrvListBuffer + nStringOffset);) { if (DrvListSize > (nStringOffset + nLastLen)*sizeof(WCHAR)) { UnmangledName((PWCHAR)pDrvListBuffer + nStringOffset, arrFileNames[dwFileNamesCount]); dwFileNamesCount++; } else break; nStringOffset += nLastLen + 1; } PR_TRACE((m_pStartUpEnum, prtIMPORTANT, "startupenum2\tScanPrefetchFromDriver: Before sort, files to scan %d", dwFileNamesCount)); qsort(arrFileNames, dwFileNamesCount, sizeof(arrFileNames[0]), compare_mangled_wstr); PR_TRACE((m_pStartUpEnum, prtIMPORTANT, "startupenum2\tScanPrefetchFromDriver: Before scan (sort complete)")); dwProgress = m_pSendToObj->propGetDWord(m_pStartUpEnum->m_propId_PROGRESS); for (dwCount=0; dwCount < dwFileNamesCount; dwCount++) { // PR_TRACE((m_pStartUpEnum, prtNOTIFY, "startupenum2\t<ScanPrefetchFromDriver> image to ParsEnviroment: '%S'", arrFileNames[dwCount])); // error=ParsEnviroment(arrFileNames[dwCount],m_sFileName); // if (error==ERROR_NOT_ENOUGH_MEMORY) // return error; // PR_TRACE((m_pStartUpEnum, prtNOTIFY, "startupenum2\t<ScanPrefetchFromDriver> image to scan: '%S'", arrFileNames[dwCount])); // _IfFileExist(m_sFileName, NULL, false); m_sFullFilePathName = arrFileNames[dwCount].pData; SendFileFound(); dwScanned++; m_pSendToObj->propSetDWord(m_pStartUpEnum->m_propId_PROGRESS, dwProgress + dwCount*nProgressRange/dwFileNamesCount); if (arrFileNames[dwCount].bFree) { m_pStartUpEnum->heapFree(arrFileNames[dwCount].pData); arrFileNames[dwCount].pData = NULL; arrFileNames[dwCount].bFree = cFALSE; } } m_pSendToObj->propSetDWord(m_pStartUpEnum->m_propId_PROGRESS, dwProgress + nProgressRange); PR_TRACE((m_pStartUpEnum, prtIMPORTANT, "StartupEnum2\tScanPrefetchFromDriver finished, scanned=%d ", dwScanned)); return errOK; }