GDTR collision checks, ordered storage

This commit is contained in:
Pavel Kirienko
2014-02-28 11:59:54 +04:00
parent c4add96a81
commit e4f6866524
3 changed files with 39 additions and 1 deletions
+27 -1
View File
@@ -63,7 +63,33 @@ bool GlobalDataTypeRegistry::add(Entry* dtd)
if (!list)
return false;
list->insert(dtd);
{ // Collision check
Entry* p = list->get();
while (p)
{
if (p->decriptor.getID() == dtd->decriptor.getID()) // ID collision
return false;
p = p->getNextListNode();
}
}
list->insertBefore(dtd, EntryInsertionComparator(dtd));
#if UAVCAN_DEBUG
{ // Order check
Entry* p = list->get();
int id = -1;
while (p)
{
if (id >= p->decriptor.getID())
{
assert(0);
std::abort();
}
id = p->decriptor.getID();
p = p->getNextListNode();
}
}
#endif
return true;
}