xref: /openbmc/phosphor-hwmon/sensorset.hpp (revision a4353bcf)
1 #pragma once
2 
3 #include <map>
4 #include <set>
5 #include <string>
6 
7 /**
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  */
20 class SensorSet
21 {
22     public:
23         typedef std::map<std::pair<std::string, std::string>,
24                 std::set<std::string>> container_t;
25         using mapped_type = container_t::mapped_type;
26         using key_type = container_t::key_type;
27 
28         /**
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;
43 
44         /**
45          * @brief Returns an iterator to the beginning of the map
46          *
47          * @return const_iterator
48          */
49         container_t::const_iterator begin()
50         {
51             return const_cast<const container_t&>(container).begin();
52         }
53 
54         /**
55          * @brief Returns an iterator to the end of the map
56          *
57          * @return const_iterator
58          */
59         container_t::const_iterator end()
60         {
61             return const_cast<const container_t&>(container).end();
62         }
63 
64     private:
65 
66         /**
67          * @brief The map of hwmon files in the directory
68          * @details For example:
69          *          key = pair("temp", "1")
70          *          value = "input"
71          */
72         container_t container;
73 
74 };
75 
76 // vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
77