- fixed: Searching for tag 0 was no longer possible.

The new tag manager considers tag 0 'untagged' and won't create entries in its tag list for it, so the normal search algorithm can not find any such sector.
It now uses a linear search over all sectors instead, if tag 0 is looked for.
This commit is contained in:
Christoph Oelckers 2015-05-04 08:55:31 +02:00
parent c75a762e7e
commit 6f0caee4ba
2 changed files with 13 additions and 2 deletions

View File

@ -309,13 +309,24 @@ int FSectorTagIterator::Next()
ret = start;
start = -1;
}
else
else if (searchtag != 0)
{
while (start >= 0 && tagManager.allTags[start].tag != searchtag) start = tagManager.allTags[start].nexttag;
if (start == -1) return -1;
ret = tagManager.allTags[start].target;
start = tagManager.allTags[start].nexttag;
}
else
{
// with the tag manager, searching for tag 0 has to be different, because it won't create entries for untagged sectors.
while (start < numsectors && tagManager.SectorHasTags(start))
{
start++;
}
if (start == numsectors) return -1;
ret = start;
start++;
}
return ret;
}

View File

@ -79,7 +79,7 @@ public:
FSectorTagIterator(int tag)
{
searchtag = tag;
start = tagManager.TagHashFirst[((unsigned int)tag) % FTagManager::TAG_HASH_SIZE];
start = tag == 0 ? 0 : tagManager.TagHashFirst[((unsigned int)tag) % FTagManager::TAG_HASH_SIZE];
}
// Special constructor for actions that treat tag 0 as 'back of activation line'