Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028
00030
00031 #ifndef HARDWARE_INTERFACE_RESOURCE_MANAGER_H
00032 #define HARDWARE_INTERFACE_RESOURCE_MANAGER_H
00033
00034 #include <stdexcept>
00035 #include <string>
00036 #include <map>
00037 #include <vector>
00038 #include <utility>
00039
00040 #include <ros/console.h>
00041
00042 #include <hardware_interface/internal/demangle_symbol.h>
00043
00044 namespace hardware_interface
00045 {
00046
00057 template <class ResourceHandle>
00058 class ResourceManager
00059 {
00060 public:
00064 virtual ~ResourceManager() {}
00065
00067 std::vector<std::string> getNames() const
00068 {
00069 std::vector<std::string> out;
00070 out.reserve(resource_map_.size());
00071 for(typename ResourceMap::const_iterator it = resource_map_.begin(); it != resource_map_.end(); ++it)
00072 {
00073 out.push_back(it->first);
00074 }
00075 return out;
00076 }
00077
00083 void registerHandle(const ResourceHandle& handle)
00084 {
00085 typename ResourceMap::iterator it = resource_map_.find(handle.getName());
00086 if (it == resource_map_.end())
00087 {
00088 resource_map_.insert(std::make_pair(handle.getName(), handle));
00089 }
00090 else
00091 {
00092 ROS_WARN_STREAM("Replacing previously registered handle '" << handle.getName() << "' in '" +
00093 internal::demangledTypeName(*this) + "'.");
00094 it->second = handle;
00095 }
00096 }
00097
00103 ResourceHandle getHandle(const std::string& name)
00104 {
00105 typename ResourceMap::const_iterator it = resource_map_.find(name);
00106
00107 if (it == resource_map_.end())
00108 {
00109 throw std::logic_error("Could not find resource '" + name + "' in '" +
00110 internal::demangledTypeName(*this) + "'.");
00111 }
00112
00113 return it->second;
00114 }
00115
00116
00117
00118 protected:
00119 typedef std::map<std::string, ResourceHandle> ResourceMap;
00120 ResourceMap resource_map_;
00121 };
00122
00123 }
00124
00125 #endif // HARDWARE_INTERFACE_RESOURCE_MANAGER_H