1 #ifndef TMPMethod_SET_H_
2 #define TMPMethod_SET_H_
10 #include <boost/mpl/list.hpp>
11 #include <boost/mpl/next_prior.hpp>
20 template <
typename TMPMethod>
55 template<
typename TMPMethod>
64 typedef typename std::map<std::string, TMPMethodPointer>
TMPMethodMap;
67 typedef typename std::map<std::string, FactoryType>
FactoryMap;
69 typedef typename TMPMethodMap::iterator
iterator;
79 template <
typename TMPMethodTypeList>
80 TMPMethodSet(TMPLibrary*
const _p,
const TMPMethodTypeList& _mtl,
81 const std::string& _name);
109 void Print(std::ostream& _os)
const;
131 template <typename First, typename Last>
132 void AddToUniverse(First, Last);
135 template <typename Last>
136 void AddToUniverse(Last, Last);
142 TMPLibrary* m_tmpLibrary;
145 std::
string m_default;
155 #include "TMPLibrary/TMPLibrary.h"
159 template <
typename TMPMethod>
160 template <
typename TMPMethodTypeList>
162 TMPMethodSet(TMPLibrary*
const _p,
const TMPMethodTypeList& _mtl,
163 const std::string& _name) : m_tmpLibrary(_p), m_name(_name) {
164 AddToUniverse(
typename boost::mpl::begin<TMPMethodTypeList>::type(),
165 typename boost::mpl::end<TMPMethodTypeList>::type());
169 template <
typename TMPMethod>
173 for(
auto& child : _node)
178 template <
typename TMPMethod>
182 auto iter = m_universe.find(_node.
Name());
185 if(iter == m_universe.end())
189 AddMethod(e, e->m_label);
193 template <
typename TMPMethod>
197 auto iter = m_universe.find(_e->m_name);
200 if(iter == m_universe.end())
202 "' is not contained within the motion planning universe.");
204 _e->SetTMPLibrary(m_tmpLibrary);
205 _e->SetLabel(_label);
206 if(m_elements.empty())
208 if(m_elements.find(_label) == m_elements.end())
209 m_elements[_label] = _e;
211 std::cerr <<
"\nWarning, TMPMethod list already has a pointer associated with "
212 <<
"\"" << _label <<
"\", not added\n";
216 template <
typename TMPMethod>
222 if(element.get() ==
nullptr) {
223 std::string err =
"Element '" + _label +
"' does not exist in " + m_name +
225 for(
auto& elem : m_elements)
226 if(elem.second.get())
227 err +=
" '" + elem.first +
"',";
235 template <
typename TMPMethod>
241 return m_elements.find(_label);
245 template <
typename TMPMethod>
249 for(
auto& elem : m_elements)
250 elem.second->Initialize();
254 template <
typename TMPMethod>
257 Print(std::ostream& _os)
const {
260 _os <<
"\n" << m_name <<
" has these TMPMethods available::\n\n";
262 for(
auto& elem : m_elements) {
263 _os << ++count <<
") \"" << elem.first <<
"\" (" << elem.second->m_name
265 elem.second->Print(_os);
273 template <
typename TMPMethod>
277 return m_elements.begin();
281 template <
typename TMPMethod>
285 return m_elements.end();
289 template <
typename TMPMethod>
292 begin() const noexcept {
293 return m_elements.begin();
297 template <
typename TMPMethod>
300 end() const noexcept {
301 return m_elements.end();
306 template <
typename TMPMethod>
307 template <
typename First,
typename Last>
311 using FirstType =
typename boost::mpl::deref<First>::type;
314 AddToUniverse(
typename boost::mpl::next<First>::type(), Last());
318 template <
typename TMPMethod>
319 template <
typename Last>
#define WHERE
Macro for retrieving info about file, function, and line number.
Definition: RuntimeUtils.h:32
Definition: TMPMethodSet.h:56
void AddMethod(XMLNode &_node)
Definition: TMPMethodSet.h:181
iterator end() noexcept
Definition: TMPMethodSet.h:284
std::function< TMPMethodPointer(XMLNode &)> FactoryType
Definition: TMPMethodSet.h:66
TMPMethodMap::iterator iterator
Definition: TMPMethodSet.h:69
void Print(std::ostream &_os) const
Display the instantiated TMPMethods.
Definition: TMPMethodSet.h:257
void ParseXML(XMLNode &_node)
Add the appropriate TMPMethods from an XML node.
Definition: TMPMethodSet.h:172
TMPMethodMap::const_iterator const_iterator
Definition: TMPMethodSet.h:70
std::map< std::string, TMPMethodPointer > TMPMethodMap
Definition: TMPMethodSet.h:64
void Initialize()
Definition: TMPMethodSet.h:248
TMPMethodPointer GetMethod(const std::string &_label)
Definition: TMPMethodSet.h:219
iterator begin() noexcept
Definition: TMPMethodSet.h:276
iterator FindMethod(std::string _label)
Definition: TMPMethodSet.h:238
TMPMethodSet(TMPLibrary *const _p, const TMPMethodTypeList &_mtl, const std::string &_name)
Definition: TMPMethodSet.h:162
std::map< std::string, FactoryType > FactoryMap
Definition: TMPMethodSet.h:67
std::shared_ptr< TMPMethod > TMPMethodPointer
Definition: TMPMethodSet.h:63
const std::string & Name() const
Get the XMLNode name.
Definition: XMLNode.cpp:90
Definition: PMPLExceptions.h:38
Definition: PMPLExceptions.h:62
Creates new TMPMethod instances from an XML node.
Definition: TMPMethodSet.h:21
TMPMethodPointer operator()(XMLNode &_node) const
Definition: TMPMethodSet.h:32
std::shared_ptr< TMPMethod > TMPMethodPointer
Definition: TMPMethodSet.h:26