X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fstatistics%2FEngine.cpp;h=ebde06c7fbc2748252db21216af76a0d7a6377b1;hb=a59cea2b1fd2a149c4c8ad161a449bf75a36ac77;hp=b6e1ee1071b9d7a60af80062682f86de138aa26c;hpb=93366a0bda79e6fd6e7dad6316bfcf8cc82f5731;p=anna.git diff --git a/source/statistics/Engine.cpp b/source/statistics/Engine.cpp index b6e1ee1..ebde06c 100644 --- a/source/statistics/Engine.cpp +++ b/source/statistics/Engine.cpp @@ -9,7 +9,7 @@ // Local #include #include - +#include #include #include @@ -24,6 +24,10 @@ using namespace anna::statistics; //****************************************************************************** //----------------------------------------------------------------------- Engine //****************************************************************************** + +//------------------------------------------------------------------------------ +//------------------------------------------------------------- Engine::Engine() +//------------------------------------------------------------------------------ Engine::Engine() { statistics::sccs::activate(); a_enabled = false; @@ -31,6 +35,15 @@ Engine::Engine() { } +//------------------------------------------------------------------------------ +//------------------------------------------------------------ Engine::~Engine() +//------------------------------------------------------------------------------ +Engine::~Engine() { + for (_accumulator_vector_it it = a_accumulators.begin(); it != a_accumulators.end(); it++) + delete (*it); +} + + //------------------------------------------------------------------------------ //--------------------------------------------------------- Engine::addConcept() //------------------------------------------------------------------------------ @@ -119,6 +132,8 @@ bool Engine::disableSampleLog(const int & id) throw() { //--------------------------------------------------- Engine::disableSampleLog() //------------------------------------------------------------------------------ bool Engine::logSample(const int & conceptId, const anna::Millisecond & unixTimestamp, const double & value) const throw() { + anna::Guard guard(a_mutex); + _concept_identification_map_iter it = a_concept_identification_map.find(conceptId); if(it == a_concept_identification_map.end()) return false; @@ -139,6 +154,19 @@ bool Engine::logSample(const int & conceptId, const anna::Millisecond & unixTime return true; } + +//------------------------------------------------------------------------------ +//----------------------------------------------------------- Engine::asString() +//------------------------------------------------------------------------------ +Accumulator *Engine::createAccumulator(const std::string &name) throw() { + Accumulator *result; + + result = new Accumulator(name); + a_accumulators.push_back(result); + return result; +} + + //------------------------------------------------------------------------------ //----------------------------------------------------------- Engine::asString() //------------------------------------------------------------------------------ @@ -173,6 +201,14 @@ std::string Engine::asString(void) const throw() { } trace += "\n"; + + // Accumulators: + trace += "\nNumber of accumulators= "; trace += anna::functions::asString(a_accumulators.size()); + for (_accumulator_vector_it it = a_accumulators.begin(); it != a_accumulators.end(); it++) { + trace += "\n"; + trace += (*it)->asString(); + } + return (trace); } @@ -201,6 +237,11 @@ anna::xml::Node* Engine::asXML(anna::xml::Node* parent, const int & numberOfDeci concept->createAttribute("IntegerNatureSample", (*iter).second.IntegerNatureSample ? "yes" : "no"); } + // Accumulators: + anna::xml::Node* accumulators = result->createChild("anna.statistics.Accumulators"); + accumulators->createAttribute("RegisteredAccumulators", a_accumulators.size()); + for (_accumulator_vector_it it = a_accumulators.begin(); it != a_accumulators.end(); it++) + (*it)->asXML(accumulators); + return result; } -