00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _SCOREACCUMULATOR_HPP
00014 #define _SCOREACCUMULATOR_HPP
00015
00016
00017
00018
00019
00020
00022 class ScoreAccumulator {
00023 public:
00025 virtual void reset()=0;
00027 virtual bool findScore(int id, double &score)=0;
00029 virtual void setScore(int id, double score)=0;
00031 virtual void incScore(int id, double score)=0;
00032
00034 virtual void startIteration()=0;
00035 virtual bool hasMore() = 0;
00036 virtual void nextScore(int &id, double &score) =0;
00037
00038 };
00039
00040
00041
00042
00043
00044
00046 class ArrayAccumulator : public ScoreAccumulator {
00047 public:
00048 ArrayAccumulator(int maxID);
00049
00050 virtual ~ArrayAccumulator() { delete [] acc; delete [] status;}
00051
00053 virtual void reset();
00054
00056 virtual bool findScore(int id, double &score);
00057
00059 virtual void setScore(int id, double score) {
00060 acc[id-1] = score;
00061 status[id-1] =1;
00062 }
00063
00065 virtual void incScore(int id, double score) {
00066 acc[id-1] += score;
00067 status[id-1] =1;
00068 }
00069
00071 virtual void startIteration() { p = 0; }
00072 bool hasMore();
00073
00074 void nextScore(int &id, double &score);
00075
00076 protected:
00077 int p;
00078 int sz;
00079 double *acc;
00080 short *status;
00081 };
00082
00083
00084
00085
00086 inline ArrayAccumulator::ArrayAccumulator(int maxID) : sz(maxID)
00087 {
00088 acc = new double[maxID];
00089 status = new short[maxID];
00090 }
00091
00092
00093 #endif
00094
00095
00096
00097
00098
00099
00100
00101