blob: 9bf9fe7b9fa2e8011a11e631eb27419f545885a7 [file] [log] [blame]
Brad Bishop26b815f2017-01-04 13:32:47 -05001#pragma once
Patrick Williams3667cf32015-10-20 22:39:11 -05002
3#include <map>
4#include <set>
5#include <string>
6
Matt Spinlera4353bc2018-06-19 10:52:32 -05007/**
8 * @class SensorSet
9 * @brief Finds and holds the available hwmon sensors for a device
10 * @details When passed a hwmon device directory on construction,
11 * this class will find all hwmon sysfs files in that directory
12 * and store them in a map. The public begin() and end() methods
13 * on this class allow traversal of this map.
14 *
15 * For example, a file named temp5_input will have a map entry of:
16 *
17 * key: pair<string, string> = {"temp", "5"}
18 * value: std::string = "input"
19 */
Patrick Williams3667cf32015-10-20 22:39:11 -050020class SensorSet
21{
Patrick Venture043d3232018-08-31 10:10:53 -070022 public:
23 typedef std::map<std::pair<std::string, std::string>, std::set<std::string>>
24 container_t;
25 using mapped_type = container_t::mapped_type;
26 using key_type = container_t::key_type;
Patrick Williams3667cf32015-10-20 22:39:11 -050027
Patrick Venture043d3232018-08-31 10:10:53 -070028 /**
29 * @brief Constructor
30 * @details Builds a map of the hwmon sysfs files in the passed
31 * in directory.
32 *
33 * @param[in] path - path to the hwmon device directory
34 *
35 */
36 explicit SensorSet(const std::string& path);
37 ~SensorSet() = default;
38 SensorSet() = delete;
39 SensorSet(const SensorSet&) = delete;
40 SensorSet& operator=(const SensorSet&) = delete;
41 SensorSet(SensorSet&&) = default;
42 SensorSet& operator=(SensorSet&&) = default;
Patrick Williams3667cf32015-10-20 22:39:11 -050043
Patrick Venture043d3232018-08-31 10:10:53 -070044 /**
45 * @brief Returns an iterator to the beginning of the map
46 *
47 * @return const_iterator
48 */
49 container_t::const_iterator begin()
50 {
Patrick Ventured0f50972018-12-19 14:43:12 -080051 return const_cast<const container_t&>(_container).begin();
Patrick Venture043d3232018-08-31 10:10:53 -070052 }
Patrick Williams3667cf32015-10-20 22:39:11 -050053
Patrick Venture043d3232018-08-31 10:10:53 -070054 /**
55 * @brief Returns an iterator to the end of the map
56 *
57 * @return const_iterator
58 */
59 container_t::const_iterator end()
60 {
Patrick Ventured0f50972018-12-19 14:43:12 -080061 return const_cast<const container_t&>(_container).end();
Patrick Venture043d3232018-08-31 10:10:53 -070062 }
Patrick Williams3667cf32015-10-20 22:39:11 -050063
Patrick Venture043d3232018-08-31 10:10:53 -070064 private:
65 /**
66 * @brief The map of hwmon files in the directory
67 * @details For example:
68 * key = pair("temp", "1")
69 * value = "input"
70 */
Patrick Ventured0f50972018-12-19 14:43:12 -080071 container_t _container;
Patrick Williams3667cf32015-10-20 22:39:11 -050072};