#pragma once #include "sensorset.hpp" #include #include #include /** @class AverageHandling * @brief Handle avergae value when AVERAGE_* is set in env */ class Average { public: /** @brief The key type of average_set */ using averageKey = SensorSet::key_type; /** @brief * average is the value of power*_average. * average_interval is the value of power*_average_interval. */ using averageValue = std::pair; /** @brief Store sensors' map */ using averageMap = std::map; /** @brief Get averageValue in averageMap based on averageKey. * This function will be called only when the env AVERAGE_xxx is set to * true. * * @param[in] sensorKey - Sensor details * * @return - Optional * return {}, if sensorKey can not be found in averageMap * return averageValue, if sensorKey can be found in averageMap */ std::optional getAverageValue(const averageKey& sensorKey) const; /** @brief Set average value in averageMap based on sensor key. * This function will be called only when the env AVERAGE_xxx is set to * true. * * @param[in] sensorKey - Sensor details * @param[in] sensorValue - The related average values of this sensor */ void setAverageValue(const averageKey& sensorKey, const averageValue& sensorValue); /** @brief Calculate the average value. * * @param[in] preAverage - The previous average value from *_average file * @param[in] preInterval - The previous interval value from * *_average_interval file * @param[in] curAverage - The current average value from *_average file * @param[in] curInterval - The current interval value from * *_average_interval file * * @return value - Optional * return {}, if curInterval-preInterval=0 * return new calculated average value, if curInterval-preInterval>0 */ static std::optional calcAverage(int64_t preAverage, int64_t preInterval, int64_t curAverage, int64_t curInterval); private: /** @brief Store the previous average sensor map */ averageMap _previousAverageMap; };