Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 22 additions & 9 deletions rmw_cyclonedds_cpp/src/MessageTypeSupport_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@

#include <cassert>
#include <memory>
#include <regex>
#include <sstream>
#include <string>

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

std::ostringstream ss;
std::string message_namespace(this->members_->message_namespace_);
std::string message_name(this->members_->message_name_);
if (!message_namespace.empty()) {

std::string name;
if (this->members_->message_namespace_ != nullptr &&
this->members_->message_namespace_[0] != '\0')
{
std::string message_namespace(this->members_->message_namespace_);
// Find and replace C namespace separator with C++, in case this is using C typesupport
message_namespace = std::regex_replace(message_namespace, std::regex("__"), "::");
ss << message_namespace << "::";
std::string::size_type pos = 0;
while ((pos = message_namespace.find("__", pos)) != std::string::npos) {
Comment thread
fujitatomoya marked this conversation as resolved.
message_namespace.replace(pos, 2, "::");
pos += 2;
}
name.reserve(
message_namespace.size() + 2 + 5 + message_name.size() + 1); // "::" + "dds_::" + "_"
name += message_namespace;
name += "::";
} else {
name.reserve(5 + message_name.size() + 1); // "dds_::" + "_"
}
ss << "dds_::" << message_name << "_";
this->setName(ss.str().c_str());
name += "dds_::";
name += message_name;
name += '_';

this->setName(name);
}

} // namespace rmw_cyclonedds_cpp
Expand Down