Mercurial > hg > beaglert
view include/stats.hpp @ 287:4815ed0f21de prerelease
Makefile refactoring:
- avoids recursive call to build with/without main
- takes EXAMPLE parameter. Copies the examples/$(EXAMPLE) folder to projects/$(PROJECT) and $PROJECT defaults to exampleTestProject
- you can now `make run` (TODO: currently re-links, should instead run without linking)
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Wed, 18 May 2016 01:46:32 +0100 |
parents | 89f28a867a09 |
children |
line wrap: on
line source
#ifndef STATS_HPP_INCLUDED #define STATS_HPP_INCLUDED #include <stdlib.h> #include <stdio.h> #include <string.h> template<class TYPE> class MovingAverage{ private: TYPE* array; int length; bool bufferFull; int pointer; TYPE sum; double scale; double average; void dealloc(){ free(array); // delete array; } void init(int aLength){ length=aLength; scale=1.0/length; // array= new TYPE(length); // for some reason this causes memory corruption, so I am using malloc() instead... array=(TYPE*)malloc(sizeof(TYPE)*length); sum=0; if(array==NULL) printf("Error while allocating array\n"); memset(array, 0, sizeof(TYPE)*length); reset(); } public: MovingAverage(){ init(0); } MovingAverage(int aLength){ init(aLength); } ~MovingAverage(){ dealloc(); } int getLength(){ return bufferFull ? length : pointer; } void setLength(int aLength){ dealloc(); init(aLength); } double add(TYPE newElement){ sum-=array[pointer]; array[pointer]=newElement; sum+=newElement; if(bufferFull==true){ average=sum*scale; } else{ average=sum/(double)(1+pointer); } pointer++; if(pointer==length){ pointer=0; bufferFull=true; } return average; } double getAverage(){ return average; } void reset(){ pointer=0; bufferFull=false; } }; #endif /* STATS_HPP_INCLUDED */