| 69 | } |
| 70 | |
| 71 | uint32_t unique(void* _data, uint32_t _num, uint32_t _stride, const ComparisonFn _fn) |
| 72 | { |
| 73 | if (0 == _num) |
| 74 | { |
| 75 | return 0; |
| 76 | } |
| 77 | |
| 78 | uint8_t* data = (uint8_t*)_data; |
| 79 | |
| 80 | uint32_t last = 0; |
| 81 | |
| 82 | for (uint32_t ii = 1; ii < _num; ++ii) |
| 83 | { |
| 84 | int32_t result = _fn(&data[last*_stride], &data[ii*_stride]); |
| 85 | BX_ASSERT(0 >= result, "Performing unique on non-sorted array (ii %d, last %d)!", ii, last); |
| 86 | |
| 87 | if (0 > result) |
| 88 | { |
| 89 | last++; |
| 90 | swap(&data[last*_stride], &data[ii*_stride], _stride); |
| 91 | } |
| 92 | } |
| 93 | |
| 94 | return last+1; |
| 95 | } |
| 96 | |
| 97 | uint32_t lowerBound(const void* _key, const void* _data, uint32_t _num, uint32_t _stride, const ComparisonFn _fn) |
| 98 | { |
no test coverage detected