windows-nt/Source/XPSP1/NT/net/qos/psched/sys/stats.c

118 lines
1.9 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1996-1999 Microsoft Corporation
Module Name:
stats.c
Abstract:
routines for PS statistics
Author:
Yoram Bernet (yoramb) 23-May-1998
Rajesh Sundaram (rajeshsu) 01-Aug-1998
Environment:
Kernel Mode
Revision History:
--*/
#include "psched.h"
#pragma hdrstop
/* External */
/* Static */
/* Forward */
/* End Forward */
NDIS_STATUS
CreateAveragingArray(
OUT PRUNNING_AVERAGE *RunningAverage,
IN ULONG ArraySize
)
{
PRUNNING_AVERAGE runningAverage;
ULONG i;
PsAllocatePool(runningAverage,
sizeof(RUNNING_AVERAGE),
PsMiscTag);
if(!runningAverage)
{
*RunningAverage = NULL;
return(NDIS_STATUS_RESOURCES);
}
PsAllocatePool(runningAverage->Elements,
ArraySize * sizeof(ULONG),
PsMiscTag);
if(!runningAverage->Elements)
{
PsFreePool(runningAverage);
*RunningAverage = NULL;
return(NDIS_STATUS_RESOURCES);
}
for(i=0; i < ArraySize; i++){
runningAverage->Elements[i] = 0;
}
runningAverage->Index = 0;
runningAverage->Sum = 0;
runningAverage->Size = ArraySize;
*RunningAverage = runningAverage;
return(NDIS_STATUS_SUCCESS);
}
ULONG
RunningAverage(
IN PRUNNING_AVERAGE RunningAverage,
IN ULONG NewValue
)
{
ULONG i;
i = RunningAverage->Index;
RunningAverage->Sum -= RunningAverage->Elements[i];
RunningAverage->Sum += NewValue;
RunningAverage->Elements[i] = NewValue;
if(++i == RunningAverage->Size){
i = 0;
}
RunningAverage->Index = i;
return((RunningAverage->Sum)/(RunningAverage->Size));
}
VOID
DeleteAveragingArray(
PRUNNING_AVERAGE RunningAverage
)
{
PsFreePool(RunningAverage->Elements);
PsFreePool(RunningAverage);
}
/* End stats.c */