33#ifndef DART_COMMON_DETAIL_NAMEMANAGER_HPP_
34#define DART_COMMON_DETAIL_NAMEMANAGER_HPP_
48 const std::string& _managerName,
const std::string& _defaultName)
49 : mManagerName(_managerName),
50 mDefaultName(_defaultName),
51 mNameBeforeNumber(true),
63 std::size_t name_start = _newPattern.find(
"%s");
64 std::size_t number_start = _newPattern.find(
"%d");
66 if (name_start == std::string::npos || number_start == std::string::npos)
69 if (name_start < number_start)
70 mNameBeforeNumber =
true;
72 mNameBeforeNumber =
false;
74 std::size_t prefix_end = std::min(name_start, number_start);
75 std::size_t infix_end = std::max(name_start, number_start);
77 mPrefix = _newPattern.substr(0, prefix_end);
78 mInfix = _newPattern.substr(prefix_end + 2, infix_end - prefix_end - 2);
79 mAffix = _newPattern.substr(infix_end + 2);
96 if (mNameBeforeNumber)
97 ss << mPrefix << _name << mInfix << count++ << mAffix;
99 ss << mPrefix << count++ << mInfix << _name << mAffix;
101 }
while (hasName(newName));
103 dtmsg <<
"[NameManager::issueNewName] (" << mManagerName <<
") The name ["
104 << _name <<
"] is a duplicate, so it has been renamed to [" << newName
113 const std::string& _name,
const T& _obj)
115 const std::string& checkEmpty = _name.empty() ? mDefaultName : _name;
116 const std::string& newName = issueNewName(checkEmpty);
117 addName(newName, _obj);
128 dtwarn <<
"[NameManager::addName] (" << mManagerName
129 <<
") Empty name is not allowed!\n";
135 dtwarn <<
"[NameManager::addName] (" << mManagerName <<
") The name ["
136 << _name <<
"] already exists!\n";
140 mMap.insert(std::pair<std::string, T>(_name, _obj));
141 mReverseMap.insert(std::pair<T, std::string>(_obj, _name));
143 assert(mReverseMap.size() == mMap.size());
152 assert(mReverseMap.size() == mMap.size());
154 typename std::map<std::string, T>::iterator it = mMap.find(_name);
156 if (it == mMap.end())
159 typename std::map<T, std::string>::iterator rit
160 = mReverseMap.find(it->second);
162 if (rit != mReverseMap.end())
163 mReverseMap.erase(rit);
174 assert(mReverseMap.size() == mMap.size());
176 typename std::map<T, std::string>::iterator rit = mReverseMap.find(_obj);
178 if (rit == mReverseMap.end())
181 typename std::map<std::string, T>::iterator it = mMap.find(rit->second);
182 if (it != mMap.end())
185 mReverseMap.erase(rit);
210 return (mMap.find(_name) != mMap.end());
217 return (mReverseMap.find(_obj) != mReverseMap.end());
231 typename std::map<std::string, T>::const_iterator
result = mMap.find(_name);
243 assert(mReverseMap.size() == mMap.size());
245 typename std::map<T, std::string>::const_iterator
result
246 = mReverseMap.find(_obj);
248 if (
result != mReverseMap.end())
257 const T& _obj,
const std::string& _newName)
259 assert(mReverseMap.size() == mMap.size());
261 typename std::map<T, std::string>::iterator rit = mReverseMap.find(_obj);
262 if (rit == mReverseMap.end())
265 if (rit->second == _newName)
268 removeName(rit->second);
269 return issueNewNameAndAdd(_newName, _obj);
276 mDefaultName = _defaultName;
290 mManagerName = _managerName;
149template <
class T> {
…}
111template <
class T> {
…}
95 std::stringstream ss; {
…}
92 std::string newName; {
…}
#define dtmsg
Output a message.
Definition Console.hpp:40
#define dtwarn
Output a warning message.
Definition Console.hpp:46
CollisionResult * result
Collision result of DART.
Definition FCLCollisionDetector.cpp:160
void clear()
Clear all the objects.
Definition NameManager.hpp:200
NameManager(const std::string &_managerName="default", const std::string &_defaultName="default")
Constructor.
Definition NameManager.hpp:47
bool hasObject(const T &_obj) const
Return true if the object is contained.
Definition NameManager.hpp:215
bool removeObject(const T &_obj)
Remove an object from the Manager based on reverse lookup.
Definition NameManager.hpp:172
void setManagerName(const std::string &_managerName)
Set the name of this NameManager so that it can be printed in error reports.
Definition NameManager.hpp:288
bool removeName(const std::string &_name)
Remove an object from the Manager based on its name.
Definition NameManager.hpp:150
const std::string & getManagerName() const
Get the name of this NameManager.
Definition NameManager.hpp:295
bool setPattern(const std::string &_newPattern)
Set a new pattern for name generation.
Definition NameManager.hpp:61
T getObject(const std::string &_name) const
Get object by given name.
Definition NameManager.hpp:229
void removeEntries(const std::string &_name, const T &_obj)
Remove _name using the forward lookup and _obj using the reverse lookup.
Definition NameManager.hpp:192
std::string changeObjectName(const T &_obj, const std::string &_newName)
Change the name of a currently held object.
Definition NameManager.hpp:256
bool addName(const std::string &_name, const T &_obj)
Add an object to the map.
Definition NameManager.hpp:124
std::string getName(const T &_obj) const
Use a reverse lookup to get the name that the manager has _obj listed under.
Definition NameManager.hpp:241
std::string issueNewName(const std::string &_name) const
Issue new unique combined name of given base name and number suffix.
Definition NameManager.hpp:86
std::size_t getCount() const
Get the number of the objects currently stored by the NameManager.
Definition NameManager.hpp:222
std::string issueNewNameAndAdd(const std::string &_name, const T &_obj)
Call issueNewName() and add the result to the map.
Definition NameManager.hpp:112
bool hasName(const std::string &_name) const
Return true if the name is contained.
Definition NameManager.hpp:208
void setDefaultName(const std::string &_defaultName)
Set the name that will be provided to objects passed in with an empty string for a name.
Definition NameManager.hpp:274
const std::string & getDefaultName() const
Get the name that will be provided to objects passed in with an empty string for a name.
Definition NameManager.hpp:281
Definition BulletCollisionDetector.cpp:60