Allow the InterfaceManager class to register other InterfaceManagers. #220
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This will make it possible to combine several RobotHW objects into a single one.
This PR contains the part of #138 that deals with combining interface_managers. (Also partially related to issues discussed in #75 and #151).
To deal with the memory leak mentioned here, I've used a
boost::ptr_vector<ResourceManagerBase>
that will deal with the destruction of any combinedResourceManager
when the InterfaceManager is destroyed.This approach allows us to keep the signature of
T* get()
(not breaking compatibility) but still address the issues that @kphawkins expressed here. This means that any pointer returned byT* get()
would stay valid until the InterfaceManager is destroyed, even if a subsequent call toT* get()
for the same interface T has generated a new combined interface object. In this case, the user of the old pointer would simply have a shorter list of resources available.