//MyAccumulators2.h // tom bailey 25 sep 06 // Declare and Define accumulator classes Counter, Summer, // and Averager. #ifndef MY_ACCUMULATORS_H_ #define MY_ACCUMULATORS_H_ // A Counter is a Simple Accumulator that tracks the size of // its sequence. class Counter { public: // post: The sequence is empty. Counter(); // pre: The sequence is S. // post: The sequence is S, then x. void append( double x ); // pre: The sequence is S. // post: The size of S has been returned. double operator()(); private: double count; }; Counter::Counter() : count( 0.0 ) { } void Counter::append( double x ) { count += 1.0; } double Counter::operator ()() { return count; } // A Summer is a Simple Accumulator that tracks the sum of // values in its sequence. class Summer { public: // post: The sequence is empty. Summer(); // pre: The sequence is S. // post: The sequence is S, then x. void append( double x ); // pre: The sequence is S. // post: The sum for S has been returned. double operator()(); private: double sum; }; Summer::Summer() : sum( 0.0 ) { } void Summer::append( double x ) { sum += x; } double Summer::operator ()() { return sum; } // An Averager is a Simple Accumulator that tracks the // average of the values in its sequence. class Averager { public: // post: The sequence is empty. Averager(); // pre: The sequence is S. // post: The sequence is S, then x. void append( double x ); // pre: The sequence is S. S is not empty. // post: The mean of S has been returned. double operator()(); private: Counter count; Summer sum; }; Averager::Averager() { } void Averager::append( double x ) { count.append( x ); sum.append( x ); } // pre: At least one entry has been added to this Averager. double Averager::operator ()() { return sum() / count(); } #endif