Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

145 lines
3.0 KiB

/*++
Copyright (C) 1996-2001 Microsoft Corporation
Module Name:
RawCooker.h
Abstract:
The classes required to perform cooking based on a countertype
History:
a-dcrews 01-Mar-00 Created
--*/
#ifndef _RAWCOOKER_H_
#define _RAWCOOKER_H_
#include <wbemint.h>
#include "CookerUtils.h"
//////////////////////////////////////////////////////////////////
//
// CEquationRecord
//
// Contains all of the required information to describe either
// a predefined or used defined equation
//
//////////////////////////////////////////////////////////////////
typedef __int64* PINT64;
typedef DWORD (APIENTRY PERFCALC)(DWORD, PINT64, PINT64, PINT64, INT64, PINT64);
class CCalcRecord
{
DWORD m_dwID;
PERFCALC *m_pCalc;
public:
void Init( DWORD dwID, PERFCALC *pCalc )
{
m_dwID = dwID;
m_pCalc = pCalc;
}
DWORD GetID(){ return m_dwID; }
PERFCALC* GetCalc(){ return m_pCalc; }
};
class CCalcTable
{
long m_lSize; // Size of table
CCalcRecord m_aTable[7]; // Lookup table
public:
CCalcTable();
virtual ~CCalcTable();
CCalcRecord* GetCalcRecord( DWORD dwCookingType );
};
//////////////////////////////////////////////////////////////////
//
// CRawCooker
//
// Represents the cooking mechanism.
//
//////////////////////////////////////////////////////////////////
class CRawCooker : public IWMISimpleCooker
{
long m_lRef; // Reference counter
CCalcTable m_CalcTable; // Equation lookup table
CCalcRecord* m_pCalcRecord; // A cache of the last record
public:
CRawCooker();
virtual ~CRawCooker();
// Standard COM methods
// ====================
STDMETHODIMP QueryInterface(REFIID riid, void** ppv);
STDMETHODIMP_(ULONG) AddRef();
STDMETHODIMP_(ULONG) Release();
// IWMISimpleCooker COM Interface
// ==============================
STDMETHODIMP CookRawValues(
/*[in] */ DWORD dwCookingType,
/*[in] */ DWORD dwNumSamples,
/*[in] */ __int64* anTimeStamp,
/*[in] */ __int64* anRawValue,
/*[in] */ __int64* anBase,
/*[in] */ __int64 nTimeFrequency,
/*[in] */ long Scale,
/*[out] */ __int64* pnResult );
PERFCALC* GetCalc( DWORD dwCookingType );
static WMISTATUS APIENTRY _Average( DWORD dwNumSamples,
__int64* anTimeStamp,
__int64* anRawValue,
__int64* anBase,
__int64 nTimeFrequency,
__int64* pnResult);
static WMISTATUS APIENTRY _Min( DWORD dwNumSamples,
__int64* anTimeStamp,
__int64* anRawValue,
__int64* anBase,
__int64 nTimeFrequency,
__int64* pnResult);
static WMISTATUS APIENTRY _Max( DWORD dwNumSamples,
__int64* anTimeStamp,
__int64* anRawValue,
__int64* anBase,
__int64 nTimeFrequency,
__int64* pnResult);
static WMISTATUS APIENTRY _Range( DWORD dwNumSamples,
__int64* anTimeStamp,
__int64* anRawValue,
__int64* anBase,
__int64 nTimeFrequency,
__int64* pnResult);
static WMISTATUS APIENTRY _Variance( DWORD dwNumSamples,
__int64* anTimeStamp,
__int64* anRawValue,
__int64* anBase,
__int64 nTimeFrequency,
__int64* pnResult);
};
#endif //_RAWCOOKER_H_