mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-11-06 09:01:36 +08:00
GDTR find() overload for name only
This commit is contained in:
@@ -126,6 +126,15 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds data type descriptor by full data type name, e.g. "uavcan.protocol.NodeStatus".
|
* Finds data type descriptor by full data type name, e.g. "uavcan.protocol.NodeStatus".
|
||||||
|
* Messages are searched first, then services.
|
||||||
|
* Returns null pointer if the data type with this name is not registered.
|
||||||
|
* @param name Full data type name
|
||||||
|
* @return Descriptor for this data type or null pointer if not found
|
||||||
|
*/
|
||||||
|
const DataTypeDescriptor* find(const char* name) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds data type descriptor by full data type name, e.g. "uavcan.protocol.NodeStatus", and data type kind.
|
||||||
* Returns null pointer if the data type with this name is not registered.
|
* Returns null pointer if the data type with this name is not registered.
|
||||||
* @param kind Data Type Kind - message or service
|
* @param kind Data Type Kind - message or service
|
||||||
* @param name Full data type name
|
* @param name Full data type name
|
||||||
|
|||||||
@@ -141,6 +141,16 @@ void GlobalDataTypeRegistry::freeze()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const DataTypeDescriptor* GlobalDataTypeRegistry::find(const char* name) const
|
||||||
|
{
|
||||||
|
const DataTypeDescriptor* desc = find(DataTypeKindMessage, name);
|
||||||
|
if (desc == NULL)
|
||||||
|
{
|
||||||
|
desc = find(DataTypeKindService, name);
|
||||||
|
}
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
const DataTypeDescriptor* GlobalDataTypeRegistry::find(DataTypeKind kind, const char* name) const
|
const DataTypeDescriptor* GlobalDataTypeRegistry::find(DataTypeKind kind, const char* name) const
|
||||||
{
|
{
|
||||||
if (!name)
|
if (!name)
|
||||||
|
|||||||
@@ -171,6 +171,7 @@ TEST(GlobalDataTypeRegistry, Basic)
|
|||||||
*/
|
*/
|
||||||
const uavcan::DataTypeDescriptor* pdtd = NULL;
|
const uavcan::DataTypeDescriptor* pdtd = NULL;
|
||||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "Nonexistent"));
|
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "Nonexistent"));
|
||||||
|
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find("Nonexistent"));
|
||||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 987));
|
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 987));
|
||||||
// Asking for service, but this is a message:
|
// Asking for service, but this is a message:
|
||||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, "my_namespace.DataTypeB"));
|
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, "my_namespace.DataTypeB"));
|
||||||
@@ -178,12 +179,14 @@ TEST(GlobalDataTypeRegistry, Basic)
|
|||||||
|
|
||||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage,
|
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage,
|
||||||
"my_namespace.DataTypeB")));
|
"my_namespace.DataTypeB")));
|
||||||
|
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find("my_namespace.DataTypeB")));
|
||||||
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
|
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
|
||||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 741)));
|
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 741)));
|
||||||
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
|
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
|
||||||
|
|
||||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage,
|
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage,
|
||||||
"my_namespace.DataTypeA")));
|
"my_namespace.DataTypeA")));
|
||||||
|
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find("my_namespace.DataTypeA")));
|
||||||
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
|
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
|
||||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, uavcan::DataTypeID(0))));
|
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, uavcan::DataTypeID(0))));
|
||||||
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
|
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
|
||||||
|
|||||||
Reference in New Issue
Block a user