mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-11 12:13:34 +08:00
GDTR got the method find() by DTID
This commit is contained in:
@@ -98,6 +98,7 @@ public:
|
||||
bool isFrozen() const { return frozen_; }
|
||||
|
||||
const DataTypeDescriptor* find(DataTypeKind kind, const char* name) const;
|
||||
const DataTypeDescriptor* find(DataTypeKind kind, DataTypeID dtid) const;
|
||||
|
||||
DataTypeSignature computeAggregateSignature(DataTypeKind kind, DataTypeIDMask& inout_id_mask) const;
|
||||
|
||||
|
||||
@@ -140,6 +140,24 @@ const DataTypeDescriptor* GlobalDataTypeRegistry::find(DataTypeKind kind, const
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const DataTypeDescriptor* GlobalDataTypeRegistry::find(DataTypeKind kind, DataTypeID dtid) const
|
||||
{
|
||||
const List* list = selectList(kind);
|
||||
if (!list)
|
||||
{
|
||||
assert(0);
|
||||
return NULL;
|
||||
}
|
||||
Entry* p = list->get();
|
||||
while (p)
|
||||
{
|
||||
if (p->descriptor.match(kind, dtid))
|
||||
return &p->descriptor;
|
||||
p = p->getNextListNode();
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DataTypeSignature GlobalDataTypeRegistry::computeAggregateSignature(DataTypeKind kind,
|
||||
DataTypeIDMask& inout_id_mask) const
|
||||
{
|
||||
|
||||
@@ -166,17 +166,25 @@ TEST(GlobalDataTypeRegistry, Basic)
|
||||
*/
|
||||
const uavcan::DataTypeDescriptor* pdtd = NULL;
|
||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "Nonexistent"));
|
||||
ASSERT_FALSE(GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 987));
|
||||
// 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, 42));
|
||||
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "my_namespace.DataTypeB")));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, 741)));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeB>(741), *pdtd);
|
||||
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, "my_namespace.DataTypeA")));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindMessage, uavcan::DataTypeID(0))));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeAMessage>(), *pdtd);
|
||||
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, "my_namespace.DataTypeA")));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeAService>(147), *pdtd);
|
||||
ASSERT_TRUE((pdtd = GlobalDataTypeRegistry::instance().find(uavcan::DataTypeKindService, 147)));
|
||||
ASSERT_EQ(extractDescriptor<DataTypeAService>(147), *pdtd);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user