xref: /openbmc/phosphor-hwmon/sensorset.hpp (revision d0f5097c)
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>, std::set<std::string>>
24         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      */
begin()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      */
end()59     container_t::const_iterator end()
60     {
61         return const_cast<const container_t&>(_container).end();
62     }
63 
64   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      */
71     container_t _container;
72 };
73 
74 // vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
75