/*++ 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 */