array_insert, array_remove
This commit is contained in:
parent
bda7315a22
commit
ab3ae686bb
3 changed files with 28 additions and 1 deletions
23
array.c
23
array.c
|
|
@ -55,3 +55,26 @@ void array_pop(array_t* array, void* src)
|
||||||
array_resize(array, array->count - 1);
|
array_resize(array, array->count - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void array_insert(array_t* array, uint idx, const void* data)
|
||||||
|
{
|
||||||
|
array_resize(array, array->count + 1);
|
||||||
|
uint move = array->count - idx - 1;
|
||||||
|
if (move)
|
||||||
|
{
|
||||||
|
cu_memmove(array_at(array, idx + 1),
|
||||||
|
array_at(array, idx), move*array->size);
|
||||||
|
}
|
||||||
|
cu_memcpy(array_at(array, idx), data, array->size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void array_remove(array_t* array, uint idx)
|
||||||
|
{
|
||||||
|
uint move = array->count - idx - 1;
|
||||||
|
if (move)
|
||||||
|
{
|
||||||
|
cu_memmove(array_at(array, idx),
|
||||||
|
array_at(array, idx + 1), move*array->size);
|
||||||
|
}
|
||||||
|
array_resize(array, array->count - 1);
|
||||||
|
}
|
||||||
|
|
|
||||||
2
array.h
2
array.h
|
|
@ -25,5 +25,7 @@ void array_resize(array_t* array, uint newCount);
|
||||||
|
|
||||||
void array_push(array_t* array, const void* data);
|
void array_push(array_t* array, const void* data);
|
||||||
void array_pop(array_t* array, void* src);
|
void array_pop(array_t* array, void* src);
|
||||||
|
void array_insert(array_t* array, uint idx, const void* data);
|
||||||
|
void array_remove(array_t* array, uint idx);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
4
test.c
4
test.c
|
|
@ -37,7 +37,9 @@ int main()
|
||||||
uint num = i;
|
uint num = i;
|
||||||
array_push(&array, &i);
|
array_push(&array, &i);
|
||||||
}
|
}
|
||||||
array_pop(&array, NULL);
|
uint num = 42;
|
||||||
|
array_remove(&array, 0);
|
||||||
|
array_insert(&array, 1, &num);
|
||||||
|
|
||||||
CU_ARRAY_FOREACH(&array)
|
CU_ARRAY_FOREACH(&array)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue