Merge pull request #255 from OpenKNX/fix-check-init-of-assoc-table

Fix check init of assoc table
This commit is contained in:
thelsing 2023-08-09 10:25:32 +02:00 committed by GitHub
commit bf9c3ffab1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -53,42 +53,44 @@ void AssociationTableObject::prepareBinarySearch()
// we iterate through all ASAP // we iterate through all ASAP
// the first n ASAP are sorted (strictly increasing number), these are assigning sending TSAP // the first n ASAP are sorted (strictly increasing number), these are assigning sending TSAP
// the remaining ASAP have to be all repetitions, otherwise we set sortedEntryCount to 0, which forces linear search // the remaining ASAP have to be all repetitions, otherwise we set sortedEntryCount to 0, which forces linear search
for (uint16_t idx = 0; idx < entryCount(); idx++) if(_tableData != nullptr) {
{ for (uint16_t idx = 0; idx < entryCount(); idx++)
currentASAP = getASAP(idx);
if (sortedEntryCount)
{ {
// look if the remaining ASAP exist in the previously sorted list. currentASAP = getASAP(idx);
while (lookupIdx < sortedEntryCount) if (sortedEntryCount)
{ {
lookupASAP = getASAP(lookupIdx); // look if the remaining ASAP exist in the previously sorted list.
if (currentASAP <= lookupASAP) while (lookupIdx < sortedEntryCount)
break; // while {
else lookupASAP = getASAP(lookupIdx);
lookupIdx++; if (currentASAP <= lookupASAP)
break; // while
else
lookupIdx++;
}
if (currentASAP < lookupASAP || lookupIdx >= sortedEntryCount)
{
// a new ASAP found, we force linear search
sortedEntryCount = 0;
break; // for
}
} }
if (currentASAP < lookupASAP || lookupIdx >= sortedEntryCount)
{
// a new ASAP found, we force linear search
sortedEntryCount = 0;
break; // for
}
}
else
{
// check for strictly increasing ASAP
if (currentASAP > lastASAP)
lastASAP = currentASAP;
else else
{ {
sortedEntryCount = idx; // last found index indicates end of sorted list // check for strictly increasing ASAP
idx--; // current item has to be handled as remaining ASAP if (currentASAP > lastASAP)
lastASAP = currentASAP;
else
{
sortedEntryCount = idx; // last found index indicates end of sorted list
idx--; // current item has to be handled as remaining ASAP
}
} }
} }
} // in case complete table is strictly increasing
// in case complete table is strictly increasing if (lookupIdx == 0 && sortedEntryCount == 0)
if (lookupIdx == 0 && sortedEntryCount == 0) sortedEntryCount = entryCount();
sortedEntryCount = entryCount(); }
#endif #endif
} }