windows-nt/Source/XPSP1/NT/drivers/tpg/hwx/volcano/dll/vtune.c
2020-09-26 16:20:57 +08:00

178 lines
4.4 KiB
C

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//
// Copyright (c) 2001 Microsoft Corporation. All rights reserved.
//
// Module:
// volcano/dll/vtune.c
//
// Description:
// Runtime portion of the volcano tuning module
//
// Author:
// hrowley
//
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
#include <stdio.h>
#include <float.h>
#include "common.h"
#include "vtune.h"
///////////////////////////////////////
//
// VTuneZeroWeights
//
// Zero out an array of weights on scores
//
// Parameters:
// pWeights: [out] Pointer to a weights array
//
// Return values:
// None.
//
//////////////////////////////////////
void VTuneZeroWeights(VOLCANO_WEIGHTS *pWeights)
{
int i;
for (i = 0; i < VTUNE_NUM_WEIGHTS; i++)
{
pWeights->afl[i] = 0;
}
}
///////////////////////////////////////
//
// VTuneComputeScore
//
// Compute the weighted sum of the scores and return the result
//
// Parameters:
// pWeights: [in] Pointer to a weights array
// pScores: [in] Pointer to a scores array
//
// Return values:
// Weighted sum of the scores.
//
//////////////////////////////////////
float VTuneComputeScore(VOLCANO_WEIGHTS *pWeights, VOLCANO_WEIGHTS *pScores)
{
int i;
float flTotal = 0.0;
for (i = 0; i < VTUNE_NUM_WEIGHTS; i++)
{
flTotal += pWeights->afl[i] * pScores->afl[i];
}
return flTotal;
}
///////////////////////////////////////
//
// VTuneComputeScoreNoLM
//
// Compute the weighted sum of the scores and return the result.
// Unlike VTuneComputeScore, this version does not add in the
// components of the score related to the language model.
//
// Parameters:
// pWeights: [in] Pointer to a weights array
// pScores: [in] Pointer to a scores array
//
// Return values:
// Weighted sum of the scores.
//
//////////////////////////////////////
float VTuneComputeScoreNoLM(VOLCANO_WEIGHTS *pWeights, VOLCANO_WEIGHTS *pScores)
{
int i;
float flTotal = 0.0;
for (i = 0; i < VTUNE_NUM_WEIGHTS; i++)
{
// Check th
switch (i)
{
// Global language model
case VTUNE_UNIGRAM:
break;
// String mode language model
case VTUNE_STRING_SMOOTHING_UNIGRAM:
case VTUNE_STRING_BIGRAM:
case VTUNE_STRING_CLASS_BIGRAM:
break;
// Free mode langauge model
case VTUNE_FREE_SMOOTHING_UNIGRAM:
case VTUNE_FREE_BIGRAM:
case VTUNE_FREE_CLASS_BIGRAM:
break;
// Otherwise, add in the score
default:
flTotal += pWeights->afl[i] * pScores->afl[i];
break;
}
}
return flTotal;
}
///////////////////////////////////////
//
// VTuneCheckFileVersion
//
// Check the file header and version information in a tuning database
//
// Parameters:
// pTune: [in] Tuning database to check
//
// Return values:
// TRUE if file version is okay, FALSE otherwise
//
//////////////////////////////////////
BOOL VTuneCheckFileVersion(VOLCANO_PARAMS *pTune)
{
ASSERT(pTune->dwFileType == VTUNE_FILE_TYPE);
if (pTune->dwFileType != VTUNE_FILE_TYPE)
{
return FALSE;
}
ASSERT(pTune->iFileVer >= VTUNE_OLD_FILE_VERSION);
ASSERT(pTune->iMinCodeVer <= VTUNE_CUR_FILE_VERSION);
if (pTune->iFileVer >= VTUNE_OLD_FILE_VERSION &&
pTune->iMinCodeVer <= VTUNE_CUR_FILE_VERSION)
{
return TRUE;
}
return FALSE;
}
///////////////////////////////////////
//
// VTuneLoadRes
//
// Map a resource as the tuning parameter database
//
// Parameters:
// pInfo: [out] Pointer to the database structure to fill in
// hInst: [in] DLL to locate the resource in
// nResID: [in] Resource ID
// nType: [in] Resource type
//
// Return values:
// TRUE if the mapping succeeds, FALSE if the mapping fails.
//
//////////////////////////////////////
BOOL VTuneLoadRes(VOLCANO_PARAMS_INFO *pInfo, HINSTANCE hInst, int nResID, int nType)
{
pInfo->pTune = (VOLCANO_PARAMS *) DoLoadResource(&pInfo->info, hInst, nResID, nType);
if (pInfo->pTune == NULL)
{
ASSERT(("Failed to locate resource for VTune database.\n", FALSE));
return FALSE;
}
// Check the file version
return VTuneCheckFileVersion(pInfo->pTune);
}