mirror of
				https://github.com/thelsing/knx.git
				synced 2025-10-26 10:26:25 +01:00 
			
		
		
		
	Merge pull request #255 from OpenKNX/fix-check-init-of-assoc-table
Fix check init of assoc table
This commit is contained in:
		
						commit
						bf9c3ffab1
					
				@ -53,42 +53,44 @@ void AssociationTableObject::prepareBinarySearch()
 | 
			
		||||
    // we iterate through all ASAP
 | 
			
		||||
    // 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 
 | 
			
		||||
    for (uint16_t idx = 0; idx < entryCount(); idx++)
 | 
			
		||||
    {
 | 
			
		||||
        currentASAP = getASAP(idx);
 | 
			
		||||
        if (sortedEntryCount)
 | 
			
		||||
    if(_tableData != nullptr) {
 | 
			
		||||
        for (uint16_t idx = 0; idx < entryCount(); idx++)
 | 
			
		||||
        {
 | 
			
		||||
            // look if the remaining ASAP exist in the previously sorted list.
 | 
			
		||||
            while (lookupIdx < sortedEntryCount)
 | 
			
		||||
            currentASAP = getASAP(idx);
 | 
			
		||||
            if (sortedEntryCount)
 | 
			
		||||
            {
 | 
			
		||||
                lookupASAP = getASAP(lookupIdx);
 | 
			
		||||
                if (currentASAP <= lookupASAP)
 | 
			
		||||
                    break; // while
 | 
			
		||||
                else
 | 
			
		||||
                    lookupIdx++;
 | 
			
		||||
                // look if the remaining ASAP exist in the previously sorted list.
 | 
			
		||||
                while (lookupIdx < sortedEntryCount)
 | 
			
		||||
                {
 | 
			
		||||
                    lookupASAP = getASAP(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
 | 
			
		||||
            {
 | 
			
		||||
                sortedEntryCount = idx; // last found index indicates end of sorted list
 | 
			
		||||
                idx--; // current item has to be handled as remaining ASAP
 | 
			
		||||
                // check for strictly increasing 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
 | 
			
		||||
        if (lookupIdx == 0 && sortedEntryCount == 0)
 | 
			
		||||
            sortedEntryCount = entryCount();
 | 
			
		||||
    } 
 | 
			
		||||
    // in case complete table is strictly increasing
 | 
			
		||||
    if (lookupIdx == 0 && sortedEntryCount == 0)
 | 
			
		||||
        sortedEntryCount = entryCount();
 | 
			
		||||
#endif    
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user