Ejemplo n.º 1
0
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;
}
Ejemplo n.º 3
0
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;
}