diff --git a/app/include/fan/Aggregators.h b/app/include/fan/Aggregators.h new file mode 100644 index 0000000..5488d81 --- /dev/null +++ b/app/include/fan/Aggregators.h @@ -0,0 +1,27 @@ +#ifndef AGGREGATORS_H_ +#define AGGREGATORS_H_ + +#include + +class Aggregator +{ +public: + virtual int aggregate(std::vector> sensors) const = 0; + virtual const std::string toString() const = 0; +}; + +class AverageAggregator : public Aggregator +{ +public: + int aggregate(std::vector> sensors) const override; + const std::string toString() const override; +}; + +class MaxAggregator : public Aggregator +{ +public: + int aggregate(std::vector> sensors) const override; + const std::string toString() const override; +}; + +#endif // AGGERGATORS_H_ diff --git a/app/src/fan/Aggregators.cxx b/app/src/fan/Aggregators.cxx new file mode 100644 index 0000000..4025507 --- /dev/null +++ b/app/src/fan/Aggregators.cxx @@ -0,0 +1,39 @@ +#include +#include + +int +AverageAggregator::aggregate(std::vector> sensors) const +{ + int sum = 0; + + for (auto sensor : sensors) { + sum += sensor->value(); + } + + return sum / sensors.size(); +} + +const std::string +AverageAggregator::toString() const +{ + return "Average"; +} + +int +MaxAggregator::aggregate(std::vector> sensors) const +{ + int max = INT_MIN; + + for (auto sensor : sensors) { + if (sensor->value() > max) + max = sensor->value(); + } + + return max; +} + +const std::string +MaxAggregator::toString() const +{ + return "Max"; +}