Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

Action.h

Go to the documentation of this file.
00001 /*
00002     File:           Action.h
00003 
00004     Function:       Defines an 'Action' which can be applied to all members of
00005                     a container.
00006                     
00007     Author(s):      Andrew Willmott
00008 
00009     Copyright:      (c) 1995-2000, Andrew Willmott
00010  */
00011 
00012 #ifndef __Action__
00013 #define __Action__
00014 
00015 #include "cl/Basics.h"
00016 
00017 #define TAction Action<T>
00018 
00019 
00020 // --- Abstract Action Class ---------------------------------------------------
00021 
00022 
00023 template <class T> class Action
00024 {
00025 public: 
00026         
00027     virtual Void    Start() {};
00028     virtual Void    Process(T &t) = 0;              // Abstract action method.
00029     virtual Void    Stop() {};
00030 };
00031 
00032 
00033 // --- A demonstration Action --------------------------------------------
00034 
00035 
00036 template <class T> class StatsFinder : public Action<T>
00037 {
00038 public:
00039     
00040     Void    Start();
00041     Void    Process(T &t);              
00042     Void    Stop();
00043     
00044     T       mean;
00045     T       variance;
00046     
00047 protected:
00048     
00049     Int     n;
00050     T       sumX;
00051     T       sumXSqr;
00052 };
00053 
00054 
00055 template <class T> Void StatsFinder<T>::Start()
00056 {
00057     sumX = sumXSqr = 0;
00058     n = 0;
00059 }
00060     
00061 template <class T> Void StatsFinder<T>::Process(T &t)
00062 {
00063     sumX += t;
00064     sumXSqr += sqr(t);
00065     n++;
00066 }
00067     
00068 template <class T> Void StatsFinder<T>::Stop()
00069 {
00070     mean = sumX / n;
00071     variance = sumXSqr / n - sqr(mean);
00072 }
00073     
00074 #endif

Generated at Sat Aug 5 00:16:31 2000 for Class Library by doxygen 1.1.0 written by Dimitri van Heesch, © 1997-2000