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