25 #include <boost/unordered_map.hpp> 45 md5Sum,
const std::string& definition) :
48 definition(definition) {
52 dataType(dataType.getIdentifier()),
106 std::string messagePackage, messagePlainType;
112 boost::unordered_map<std::string, std::string> definitions;
113 std::list<std::string> typesInOrder;
114 std::set<std::string> requiredTypes;
116 requiredTypes.insert(messageDataType);
117 typesInOrder.push_back(messageDataType);
119 std::list<std::string>::iterator it = typesInOrder.begin();
121 while (it != typesInOrder.end()) {
122 std::string
package, plainType;
127 if (package.empty()) {
128 if (plainType ==
"Header")
129 package = "std_msgs";
135 if (packagePath.empty())
138 std::string messageFilename(packagePath+
"/msg/"+plainType+
".msg");
139 std::ifstream messageFile(messageFilename.c_str());
142 if (messageFile.is_open()) {
143 messageFile.seekg(0, std::ios::end);
144 messageDefinition.reserve(messageFile.tellg());
145 messageFile.seekg(0, std::ios::beg);
147 messageDefinition.assign((std::istreambuf_iterator<char>(messageFile)),
148 std::istreambuf_iterator<char>());
155 if (!messageDefinition.empty()) {
156 std::istringstream stream(messageDefinition);
159 while (std::getline(stream, line)) {
160 std::string memberName, memberType;
166 std::string memberPackage, plainMemberType;
173 if (memberPackage.empty()) {
174 if (plainMemberType ==
"Header")
175 memberPackage =
"std_msgs";
177 memberPackage = package;
179 memberType = memberPackage+
"/"+plainMemberType;
182 if (requiredTypes.find(memberType) == requiredTypes.end()) {
183 requiredTypes.insert(memberType);
184 typesInOrder.push_back(memberType);
195 for (std::list<std::string>::const_iterator it = typesInOrder.begin();
196 it != typesInOrder.end(); ++it) {
220 const std::string& topic,
size_t queueSize,
bool latch,
const 226 queueSize, latch, connectCallback));
237 queueSize, callback));
256 messageType.
write(stream);
boost::function< void(const SingleSubscriberPublisher &)> SubscriberStatusCallback
variant_topic_tools::MessageDefinition messageDefinition
Header file providing the MessageDefinitionParser class interface.
Header file providing the Publisher class interface.
Header file providing the Subscriber class interface.
void callback(const variant_topic_tools::MessageVariant &variant, const ros::Time &receiptTime)
variant_topic_tools::Subscriber subscriber
void connectCallback(const ros::SingleSubscriberPublisher &)
variant_topic_tools::Publisher publisher
Header file defining exceptions for the variant topic tools.
ros::NodeHandlePtr nodeHandle
Header file providing the DataTypeRegistry class interface.
Header file providing the MessageDataType class interface.
ROSLIB_DECL std::string getPath(const std::string &package_name)
Header file providing the MessageTypeParser class interface.
variant_topic_tools::MessageType messageType
Header file providing the MessageType class interface.