1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
/*
* Copyright (C) 2013, 2014, 2015 by the Konclude Developer Team.
*
* This file is part of the reasoning system Konclude.
* For details and support, see <http://konclude.com/>.
*
* Konclude is free software: you can redistribute it and/or modify it under
* the terms of version 2.1 of the GNU Lesser General Public License (LGPL2.1)
* as published by the Free Software Foundation.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Konclude. If not, see <http://www.gnu.org/licenses/>.
*
* Konclude is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more
* details, see GNU Lesser General Public License.
*
*/
#include "CAnalyseValueMinMaxAvgExtendedUpdateReader.h"
namespace Konclude {
namespace Test {
namespace Analyse {
namespace Reader {
CAnalyseValueMinMaxAvgExtendedUpdateReader::CAnalyseValueMinMaxAvgExtendedUpdateReader(CAnalyseValueDescription *valueDes, CAnalyseValueUpdateReader *updateReader) {
reader = updateReader;
valueDescription = valueDes;
hasMinMaxAvg = false;
valCount = 0;
minValueDescription = 0;
maxValueDescription = 0;
avgValueDescription = 0;
if (valueDescription) {
minValueDescription = new CAnalyseValueDescription();
minValueDescription->setValueName(valueDescription->getValueName()+QString("-Minimum"));
minValueDescription->setTemplateValue(new CDoubleAnalyseValue(0.));
maxValueDescription = new CAnalyseValueDescription();
maxValueDescription->setValueName(valueDescription->getValueName()+QString("-Maximum"));
maxValueDescription->setTemplateValue(new CDoubleAnalyseValue(0.));
avgValueDescription = new CAnalyseValueDescription();
avgValueDescription->setValueName(valueDescription->getValueName()+QString("-Average"));
avgValueDescription->setTemplateValue(new CDoubleAnalyseValue(0.));
}
}
CAnalyseValueMinMaxAvgExtendedUpdateReader::~CAnalyseValueMinMaxAvgExtendedUpdateReader() {
if (avgValueDescription) {
delete avgValueDescription;
}
if (maxValueDescription) {
delete maxValueDescription;
}
if (minValueDescription) {
delete minValueDescription;
}
}
CAnalyseValueDescription *CAnalyseValueMinMaxAvgExtendedUpdateReader::getMinValueDescription() {
return minValueDescription;
}
CAnalyseValueDescription *CAnalyseValueMinMaxAvgExtendedUpdateReader::getMaxValueDescription() {
return maxValueDescription;
}
CAnalyseValueDescription *CAnalyseValueMinMaxAvgExtendedUpdateReader::getAvgValueDescription() {
return avgValueDescription;
}
CAnalyseValue *CAnalyseValueMinMaxAvgExtendedUpdateReader::getAnalyseValueUpdate(CAnalyseValueDescription *valueDes) {
CAnalyseValue *val = 0;
if (valueDes == valueDescription) {
if (reader) {
val = reader->getAnalyseValueUpdate(valueDes);
}
CConvertDoubleAnalyseValue *douVal = dynamic_cast<CConvertDoubleAnalyseValue *>(val);
if (douVal) {
double mDouVal = douVal->getDouble();
if (!hasMinMaxAvg) {
avgVal = mDouVal;
maxVal = mDouVal;
minVal = mDouVal;
valCount++;
} else {
maxVal = qMax(maxVal,mDouVal);
minVal = qMin(minVal,mDouVal);
avgVal = avgVal + 1./(valCount+1.) * (mDouVal - avgVal);
valCount++;
}
}
} else if (valueDes == minValueDescription) {
if (hasMinMaxAvg) {
val = new CDoubleAnalyseValue(minVal);
}
} else if (valueDes == maxValueDescription) {
if (hasMinMaxAvg) {
val = new CDoubleAnalyseValue(maxVal);
}
} else if (valueDes == avgValueDescription) {
if (hasMinMaxAvg) {
val = new CDoubleAnalyseValue(avgVal);
}
}
return val;
}
}; // end namespace Reader
}; // end namespace Analyse
}; // end namespace Test
}; // end namespace Konclude
|