System info & network
This commit is contained in:
87
code/lib/ds.cpp
Normal file
87
code/lib/ds.cpp
Normal file
@@ -0,0 +1,87 @@
|
||||
#include "ds.h"
|
||||
#include <string.h>
|
||||
|
||||
int char_cmp(const void *a, const void *b)
|
||||
{
|
||||
char _a = *(char*)a;
|
||||
char _b = *(char*)b;
|
||||
if(_a < _b) return -1;
|
||||
if(_a > _b) return +1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int u8_cmp (const void *a, const void *b)
|
||||
{
|
||||
u8 _a = *(u8*)a;
|
||||
u8 _b = *(u8*)b;
|
||||
if(_a < _b) return -1;
|
||||
if(_a > _b) return +1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int u32_cmp(const void *a, const void *b)
|
||||
{
|
||||
u32 _a = *(u32*)a;
|
||||
u32 _b = *(u32*)b;
|
||||
if(_a < _b) return -1;
|
||||
if(_a > _b) return +1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int u64_cmp(const void *a, const void *b)
|
||||
{
|
||||
u64 _a = *(u64*)a;
|
||||
u64 _b = *(u64*)b;
|
||||
if(_a < _b) return -1;
|
||||
if(_a > _b) return +1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int s32_cmp(const void *a, const void *b)
|
||||
{
|
||||
s32 _a = *(s32*)a;
|
||||
s32 _b = *(s32*)b;
|
||||
if(_a < _b) return -1;
|
||||
if(_a > _b) return +1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int s64_cmp(const void *a, const void *b)
|
||||
{
|
||||
s64 _a = *(s64*)a;
|
||||
s64 _b = *(s64*)b;
|
||||
if(_a < _b) return -1;
|
||||
if(_a > _b) return +1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
u64 make_unique(void *array, u64 count, u64 element_size, compare_fn *cmp)
|
||||
{
|
||||
qsort(array, count, element_size, cmp);
|
||||
|
||||
// Remove duplicates
|
||||
u8 *start = (u8*)array;
|
||||
u8 *end = start + element_size * count;
|
||||
|
||||
u64 deleted = 0;
|
||||
|
||||
u8 *prev = start;
|
||||
u8 *curr = start + element_size;
|
||||
while(curr < end)
|
||||
{
|
||||
if(cmp(prev, curr) == 0)
|
||||
{
|
||||
deleted++;
|
||||
}
|
||||
else
|
||||
{
|
||||
prev += element_size;
|
||||
memcpy(prev, curr, element_size);
|
||||
}
|
||||
curr += element_size;
|
||||
}
|
||||
|
||||
return count - deleted;
|
||||
}
|
||||
Reference in New Issue
Block a user