Added bx::unique.

This commit is contained in:
Бранимир Караџић
2022-09-10 08:34:59 -07:00
parent 7f9fd5b8a5
commit a2dff8e0a0
4 changed files with 155 additions and 48 deletions

View File

@@ -68,6 +68,32 @@ namespace bx
return true;
}
uint32_t unique(void* _data, uint32_t _num, uint32_t _stride, const ComparisonFn _fn)
{
if (0 == _num)
{
return 0;
}
uint8_t* data = (uint8_t*)_data;
uint32_t last = 0;
for (uint32_t ii = 1; ii < _num; ++ii)
{
int32_t result = _fn(&data[last*_stride], &data[ii*_stride]);
BX_ASSERT(0 >= result, "Performing unique on non-sorted array (ii %d, last %d)!", ii, last);
if (0 > result)
{
last++;
swap(&data[last*_stride], &data[ii*_stride], _stride);
}
}
return last+1;
}
uint32_t lowerBound(const void* _key, const void* _data, uint32_t _num, uint32_t _stride, const ComparisonFn _fn)
{
uint32_t offset = 0;
@@ -141,7 +167,7 @@ namespace bx
}
}
return -1;
return ~offset;
}
} // namespace bx