Skip to content

Commit fd48d58

Browse files
author
Tomoya Fujita
authored
improve MessageTypeSupport performance. (#562)
* improve MessageTypeSupport performance. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> * address review comments. Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com> --------- Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
1 parent 5147e01 commit fd48d58

1 file changed

Lines changed: 22 additions & 9 deletions

File tree

rmw_cyclonedds_cpp/src/MessageTypeSupport_impl.hpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
#include <cassert>
1919
#include <memory>
20-
#include <regex>
21-
#include <sstream>
2220
#include <string>
2321

2422
#include "MessageTypeSupport.hpp"
@@ -33,16 +31,31 @@ MessageTypeSupport<MembersType>::MessageTypeSupport(const MembersType * members)
3331
assert(members);
3432
this->members_ = members;
3533

36-
std::ostringstream ss;
37-
std::string message_namespace(this->members_->message_namespace_);
3834
std::string message_name(this->members_->message_name_);
39-
if (!message_namespace.empty()) {
35+
36+
std::string name;
37+
if (this->members_->message_namespace_ != nullptr &&
38+
this->members_->message_namespace_[0] != '\0')
39+
{
40+
std::string message_namespace(this->members_->message_namespace_);
4041
// Find and replace C namespace separator with C++, in case this is using C typesupport
41-
message_namespace = std::regex_replace(message_namespace, std::regex("__"), "::");
42-
ss << message_namespace << "::";
42+
std::string::size_type pos = 0;
43+
while ((pos = message_namespace.find("__", pos)) != std::string::npos) {
44+
message_namespace.replace(pos, 2, "::");
45+
pos += 2;
46+
}
47+
name.reserve(
48+
message_namespace.size() + 2 + 5 + message_name.size() + 1); // "::" + "dds_::" + "_"
49+
name += message_namespace;
50+
name += "::";
51+
} else {
52+
name.reserve(5 + message_name.size() + 1); // "dds_::" + "_"
4353
}
44-
ss << "dds_::" << message_name << "_";
45-
this->setName(ss.str().c_str());
54+
name += "dds_::";
55+
name += message_name;
56+
name += '_';
57+
58+
this->setName(name);
4659
}
4760

4861
} // namespace rmw_cyclonedds_cpp

0 commit comments

Comments
 (0)