mirror of
https://github.com/bkaradzic/bx.git
synced 2026-02-18 04:53:06 +01:00
Added bx::unique.
This commit is contained in:
28
src/sort.cpp
28
src/sort.cpp
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user