Main Page   Modules   Class Hierarchy   Compound List   File List   Compound Members  

cstat.h

00001 //==========================================================================
00002 //   CSTAT.H - header for
00003 //                             OMNeT++
00004 //            Discrete System Simulation in C++
00005 //
00006 //
00007 //  Declaration of the following classes:
00008 //    cStatistic : base for statistics
00009 //    cStdDev    : collects min, max, mean, standard deviation
00010 //
00011 //==========================================================================
00012 
00013 #ifndef __CSTAT_H
00014 #define __CSTAT_H
00015 
00016 #include <stdio.h>
00017 #include <iostream.h>
00018 #include "cobject.h"
00019 
00020 class cTransientDetection;
00021 class cAccuracyDetection;
00022 
00023 //==========================================================================
00024 
00035 class SIM_API cStatistic : public cObject
00036 {
00037   public:
00038     cTransientDetection *td;    // ptr to associated object
00039     cAccuracyDetection *ra;     // ptr to associated object
00040     int genk;                   // index of random number generator to use
00041 
00042   protected:
00043 
00044     // internal: utility function for implementing loadFromFile() functions
00045     void freadvarsf (FILE *f,  const char *fmt, ...);
00046 
00047   public:
00050 
00054     cStatistic(const cStatistic& r);
00055 
00059     explicit cStatistic(const char *name=NULL);
00060 
00064     virtual ~cStatistic()  {}
00065 
00070     cStatistic& operator=(const cStatistic& res);
00072 
00075 
00079     virtual const char *className() const {return "cStatistic";}
00080 
00081     /* Note: No dup() because this is an abstract class! */
00082 
00087     virtual const char *inspectorFactoryName() const {return "cStatisticIFC";}
00088 
00094     virtual int netPack();
00095 
00101     virtual int netUnpack();
00103 
00106 
00111     virtual void collect(double val) = 0;
00112 
00116     virtual void collect2(double val, double weight);
00117 
00121     void operator+= (double val) {collect(val);}
00122 
00128     virtual void clearResult() = 0;
00130 
00133 
00138     virtual long samples() const = 0;
00139 
00144     virtual double weights() const = 0;
00145 
00150     virtual double sum() const = 0;
00151 
00156     virtual double sqrSum() const = 0;
00157 
00162     virtual double min() const = 0;
00163 
00168     virtual double max() const = 0;
00169 
00174     virtual double mean() const = 0;
00175 
00180     virtual double stddev() const = 0;
00181 
00186     virtual double variance() const = 0;
00188 
00191 
00196     void addTransientDetection(cTransientDetection *object);
00197 
00202     void addAccuracyDetection(cAccuracyDetection *object);
00203 
00207     cTransientDetection *transientDetectionObject() const  {return td;}
00208 
00212     cAccuracyDetection  *accuracyDetectionObject() const   {return ra;}
00214 
00217 
00223     void setGenK(int gen_nr)   {genk=gen_nr;}
00224 
00229     virtual double random() const = 0;
00231 
00234 
00239     virtual void saveToFile(FILE *) const = 0;
00240 
00245     virtual void loadFromFile(FILE *) = 0;
00247 };
00248 
00249 //==========================================================================
00250 
00256 class SIM_API cStdDev : public cStatistic
00257 {
00258   protected:
00259     long num_samples;
00260     double min_samples,max_samples;
00261     double sum_samples,sqrsum_samples;
00262 
00263   public:
00266 
00270     cStdDev(const cStdDev& r) : cStatistic(r) {setName(r.name());operator=(r);}
00271 
00275     explicit cStdDev(const char *name=NULL);
00276 
00280     virtual ~cStdDev() {}
00281 
00285     cStdDev& operator=(const cStdDev& res);
00287 
00290 
00294     virtual const char *className() const {return "cStdDev";}
00295 
00300     virtual cObject *dup() const {return new cStdDev(*this);}
00301 
00306     virtual void info(char *buf);
00307 
00312     virtual void writeContents(ostream& os);
00313 
00319     virtual int netPack();
00320 
00326     virtual int netUnpack();
00328 
00331 
00335     virtual void collect(double val);
00336 
00340     virtual long samples() const   {return num_samples;}
00341 
00345     virtual double weights() const {return num_samples;}
00346 
00350     virtual double sum() const     {return sum_samples;}
00351 
00355     virtual double sqrSum() const  {return sqrsum_samples;}
00356 
00360     virtual double min() const     {return min_samples;}
00361 
00365     virtual double max() const     {return max_samples;}
00366 
00370     virtual double mean() const    {return num_samples ? sum_samples/num_samples : 0.0;}
00371 
00375     virtual double stddev() const;
00376 
00380     virtual double variance() const;
00381 
00386     virtual double random() const;
00387 
00391     virtual void clearResult();
00392 
00396     virtual void saveToFile(FILE *) const;
00397 
00402     virtual void loadFromFile(FILE *);
00404 };
00405 
00406 //==========================================================================
00407 
00414 class SIM_API cWeightedStdDev : public cStdDev
00415 {
00416   protected:
00417     double sum_weights;
00418 
00419   public:
00422 
00426     cWeightedStdDev(const cWeightedStdDev& r) : cStdDev(r) {setName(r.name());operator=(r);}
00427 
00431     explicit cWeightedStdDev(const char *name=NULL) : cStdDev(name)  {sum_weights=0;}
00432 
00436     virtual ~cWeightedStdDev() {}
00437 
00441     cWeightedStdDev& operator=(const cWeightedStdDev& res);
00443 
00446 
00450     virtual const char *className() const {return "cWeightedStdDev";}
00451 
00456     virtual cObject *dup() const {return new cWeightedStdDev(*this);}
00457 
00463     virtual int netPack();
00464 
00470     virtual int netUnpack();
00472 
00475 
00479     virtual void collect(double val)  {collect2(val,1.0);}
00480 
00484     virtual void collect2(double val, double weight);
00485 
00489     virtual void clearResult();
00490 
00494     virtual double weights() const {return sum_weights;}
00495 
00499     virtual double mean() const    {return sum_weights!=0 ? sum_samples/sum_weights : 0.0;}
00500 
00504     virtual double variance() const;
00505 
00509     virtual void saveToFile(FILE *) const;
00510 
00514     virtual void loadFromFile(FILE *);
00516 };
00517 
00518 #endif
00519 

Generated at Sat May 4 15:45:48 2002 for OMNeT++ by doxygen1.2.8.1 written by Dimitri van Heesch, © 1997-2001