00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _H_SST_CORE_UNIQUE_COUNT_STATISTIC_
00014 #define _H_SST_CORE_UNIQUE_COUNT_STATISTIC_
00015
00016 #include <sst/core/sst_types.h>
00017 #include <sst/core/serialization.h>
00018
00019 #include <sst/core/statapi/statbase.h>
00020
00021 namespace SST {
00022 namespace Statistics {
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 template <typename T>
00033 class UniqueCountStatistic : public Statistic<T>
00034 {
00035 private:
00036 friend class SST::Simulation;
00037
00038 UniqueCountStatistic(Component* comp, std::string& statName, std::string& statSubId, Params& statParams)
00039 : Statistic<T>(comp, statName, statSubId, statParams)
00040 {
00041
00042 this->setStatisticTypeName("UniqueCount");
00043 }
00044
00045 ~UniqueCountStatistic(){};
00046
00047 protected:
00048
00049
00050
00051
00052 void addData_impl(T data) {
00053 uniqueSet.insert(data);
00054 }
00055
00056 private:
00057 void clearStatisticData()
00058 {
00059 uniqueSet.clear();
00060 }
00061
00062 void registerOutputFields(StatisticOutput* statOutput)
00063 {
00064 uniqueCountField = statOutput->registerField<uint64_t>("UniqueItems");
00065 }
00066
00067 void outputStatisticData(StatisticOutput* statOutput, bool EndOfSimFlag)
00068 {
00069 statOutput->outputField(uniqueCountField, (uint64_t) uniqueSet.size());
00070 }
00071
00072 private:
00073 std::set<T> uniqueSet;
00074 StatisticOutput::fieldHandle_t uniqueCountField;
00075
00076 friend class boost::serialization::access;
00077 template<class Archive>
00078 void serialize(Archive & ar, const unsigned int version)
00079 {
00080 ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Statistic<T>);
00081 }
00082 };
00083
00084 }
00085 }
00086
00087 #endif