mirror of
https://github.com/gryf/wmaker.git
synced 2026-01-06 22:04:12 +01:00
Some more functions for the array class
This commit is contained in:
@@ -243,18 +243,16 @@ char *wstrdup(char *str);
|
|||||||
|
|
||||||
char *wstrappend(char *dst, char *src);
|
char *wstrappend(char *dst, char *src);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void wtokensplit(char *command, char ***argv, int *argc);
|
void wtokensplit(char *command, char ***argv, int *argc);
|
||||||
|
|
||||||
char *wtokenjoin(char **list, int count);
|
char *wtokenjoin(char **list, int count);
|
||||||
|
|
||||||
void wtokenfree(char **tokens, int count);
|
void wtokenfree(char **tokens, int count);
|
||||||
|
|
||||||
char *wtrimspace(char *s);
|
char *wtrimspace(char *s);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char *wusergnusteppath();
|
char *wusergnusteppath();
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ WMFreeArray(WMArray *array)
|
|||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
WMReplaceInArray(WMArray *array, unsigned int index, void *data)
|
WMReplaceArrayElement(WMArray *array, unsigned int index, void *data)
|
||||||
{
|
{
|
||||||
wassertrv(index > array->length, 0);
|
wassertrv(index > array->length, 0);
|
||||||
|
|
||||||
@@ -95,38 +95,40 @@ WMReplaceInArray(WMArray *array, unsigned int index, void *data)
|
|||||||
|
|
||||||
|
|
||||||
void*
|
void*
|
||||||
WMGetFromArray(WMArray *array, unsigned int index)
|
WMGetArrayElement(WMArray *array, unsigned int index)
|
||||||
{
|
{
|
||||||
if (index < 0 || index >= array->length)
|
if (index >= array->length)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
return array->items[index];
|
return array->items[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int WMArrayAppend(WMArray *array, void *data)
|
#if 0
|
||||||
|
int
|
||||||
|
WMAppendToArray(WMArray *array, void *data)
|
||||||
{
|
{
|
||||||
if (array->length >= array->allocSize) {
|
if (array->length >= array->allocSize) {
|
||||||
array->allocSize += RESIZE_INCREMENT;
|
array->allocSize += RESIZE_INCREMENT;
|
||||||
array->items = realloc(array->items, sizeof(void*)*array->allocSize);
|
array->items = wrealloc(array->items, sizeof(void*)*array->allocSize);
|
||||||
sassertrv(array->items != NULL, 0);
|
|
||||||
}
|
}
|
||||||
array->items[array->length++] = data;
|
array->items[array->length++] = data;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int WMArrayInsert(WMArray *array, unsigned index, void *data)
|
int
|
||||||
|
WMInsertInArray(WMArray *array, unsigned index, void *data)
|
||||||
{
|
{
|
||||||
sassertrv(index < array->length, 0);
|
wassertrv(index <= array->length, 0);
|
||||||
|
|
||||||
if (array->length >= array->allocSize) {
|
if (array->length >= array->allocSize) {
|
||||||
array->allocSize += RESIZE_INCREMENT;
|
array->allocSize += RESIZE_INCREMENT;
|
||||||
array->items = realloc(array->items, sizeof(void*)*array->allocSize);
|
array->items = wrealloc(array->items, sizeof(void*)*array->allocSize);
|
||||||
sassertrv(array->items != NULL, 0);
|
|
||||||
}
|
}
|
||||||
if (index < array->length-1)
|
if (index < array->length)
|
||||||
memmove(array->items+index+1, array->items+index,
|
memmove(array->items+index+1, array->items+index,
|
||||||
sizeof(void*)*(array->length-index));
|
sizeof(void*)*(array->length-index));
|
||||||
array->items[index] = data;
|
array->items[index] = data;
|
||||||
@@ -137,9 +139,17 @@ int WMArrayInsert(WMArray *array, unsigned index, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void WMArrayDelete(WMArray *array, unsigned index)
|
int
|
||||||
|
WMAppendToArray(WMArray *array, void *data)
|
||||||
{
|
{
|
||||||
sassertr(index < array->length);
|
return WMInsertInArray(array, array->length, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
removeFromArray(WMArray *array, unsigned index)
|
||||||
|
{
|
||||||
|
/*wassertr(index < array->length);*/
|
||||||
|
|
||||||
memmove(array->items+index, array->items+index+1,
|
memmove(array->items+index, array->items+index+1,
|
||||||
sizeof(void*)*(array->length-index-1));
|
sizeof(void*)*(array->length-index-1));
|
||||||
@@ -148,18 +158,32 @@ void WMArrayDelete(WMArray *array, unsigned index)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
void *WMArrayPop(WMArray *array)
|
WMDeleteFromArray(WMArray *array, unsigned index)
|
||||||
{
|
{
|
||||||
void *d = WMArrayGet(array, array->length-1);
|
wassertr(index < array->length);
|
||||||
|
|
||||||
WMArrayDelete(array, array->length-1);
|
if (array->destructor) {
|
||||||
|
array->destructor(array->items[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
removeFromArray(array, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void*
|
||||||
|
WMArrayPop(WMArray *array)
|
||||||
|
{
|
||||||
|
void *d = WMGetArrayElement(array, array->length-1);
|
||||||
|
|
||||||
|
removeFromArray(array, array->length-1);
|
||||||
|
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int WMArrayIndex(WMArray *array, void *data)
|
int
|
||||||
|
WMIndexForArrayElement(WMArray *array, void *data)
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user