diff --git a/core/src/MessageFactory.cc b/core/src/MessageFactory.cc index 45743dc1..3558ea74 100644 --- a/core/src/MessageFactory.cc +++ b/core/src/MessageFactory.cc @@ -15,6 +15,8 @@ * */ +#include + #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable: 4146 4251) @@ -60,16 +62,16 @@ MessageFactory::MessagePtr MessageFactory::New( { type = kGzMsgsPrefix + _msgType.substr(8); } - // Convert ".gz_msgs." prefix - else if (_msgType.find(".gz_msgs.") == 0) - { - type = kGzMsgsPrefix + _msgType.substr(9); - } // Convert ".gz.msgs." prefix else if (_msgType.find(".gz.msgs.") == 0) { type = kGzMsgsPrefix + _msgType.substr(9); } + // Convert ".gz_msgs." prefix + else if (_msgType.find(".gz_msgs.") == 0) + { + type = kGzMsgsPrefix + _msgType.substr(9); + } else { type = _msgType; @@ -130,15 +132,21 @@ void MessageFactory::Types(std::vector &_types) { _types.clear(); + // Add the types loaded from descriptor files + std::vector dynTypes; + this->dynamicFactory->Types(dynTypes); + + // Use set to remove duplicates + std::unordered_set typesSet(dynTypes.begin(), dynTypes.end()); + // Return the list of all known message types. std::map::const_iterator iter; for (iter = msgMap.begin(); iter != msgMap.end(); ++iter) { - _types.push_back(iter->first); + typesSet.insert(iter->first); } - // Add the types loaded from descriptor files - this->dynamicFactory->Types(_types); + std::copy(typesSet.begin(), typesSet.end(), std::back_inserter(_types)); } /////////////////////////////////////////////////