Compare commits
No commits in common. "0d6fca9b264acca7ce77b93b4e44823e51ff67a0" and "35c8b969679577b3de1d5b020365f1325515142a" have entirely different histories.
0d6fca9b26
...
35c8b96967
132
list.c
132
list.c
|
@ -1,132 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (c) 2017-2019 by Löwenware Ltd
|
|
||||||
* Please, refer LICENSE file for legal information
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file list.c
|
|
||||||
* @author Ilja Kartašov <ik@lowenware.com>
|
|
||||||
* @brief cStuff list module
|
|
||||||
*
|
|
||||||
* @see https://lowenware.com/
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "list.h"
|
|
||||||
|
|
||||||
CStuffRetcode
|
|
||||||
cstuff_list_init(CStuffList self, int size)
|
|
||||||
{
|
|
||||||
if (!(self->items = calloc(size, sizeof (void *))))
|
|
||||||
return CSTUFF_MALLOC_ERROR;
|
|
||||||
|
|
||||||
self->length = 0;
|
|
||||||
self->size = size;
|
|
||||||
|
|
||||||
return CSTUFF_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
cstuff_list_release(CStuffList self, CStuffListFree item_free)
|
|
||||||
{
|
|
||||||
if (self->items) {
|
|
||||||
if (item_free) {
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < self->length; i++) {
|
|
||||||
void *ptr = self->items[i];
|
|
||||||
if (ptr) {
|
|
||||||
item_free(ptr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(self->items);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
cstuff_list_append(CStuffList self, void *item)
|
|
||||||
{
|
|
||||||
void **items;
|
|
||||||
int size = self->length + 1;
|
|
||||||
|
|
||||||
if (size > self->size) {
|
|
||||||
if (!(items = realloc(self->items, size * sizeof (void*))))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
self->items = items;
|
|
||||||
self->size = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
self->items[self->length] = item;
|
|
||||||
|
|
||||||
return self->length++;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
cstuff_list_insert(CStuffList self, void *item, int index)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
if ((r = cstuff_list_append(self, item)) == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (index >= r || index < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
memmove(&self->items[index + 1], &self->items[index],
|
|
||||||
(self->length - index - 1) * sizeof (void*));
|
|
||||||
|
|
||||||
self->items[index] = item;
|
|
||||||
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void *
|
|
||||||
cstuff_list_remove(CStuffList self, int index)
|
|
||||||
{
|
|
||||||
void *result;
|
|
||||||
int i;
|
|
||||||
if (index < self->length) {
|
|
||||||
result = self->items[index];
|
|
||||||
self->length--;
|
|
||||||
for (i = index; i < self->length; i++) {
|
|
||||||
self->items[i] = self->items[i + 1];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
result = NULL;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
cstuff_list_remove_item(CStuffList self, void *item)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < self->length; i++) {
|
|
||||||
if (self->items[i] == item) {
|
|
||||||
cstuff_list_remove(self, i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
cstuff_list_set_item(CStuffList self, int index, void *value)
|
|
||||||
{
|
|
||||||
if (self->size > index) {
|
|
||||||
self->items[index] = value;
|
|
||||||
if (index >= self->length)
|
|
||||||
self->length = index + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
64
list.h
64
list.h
|
@ -1,64 +0,0 @@
|
||||||
/******************************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (c) 2017-2019 by Löwenware Ltd
|
|
||||||
* Please, refer LICENSE file for legal information
|
|
||||||
*
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file list.h
|
|
||||||
* @author Ilja Kartašov <ik@lowenware.com>
|
|
||||||
* @brief cStuff List module header file
|
|
||||||
*
|
|
||||||
* @see https://lowenware.com/
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef CSTUFF_LIST_H_372E2D14_8DEE_4A7C_A5AB_8808A87DF436
|
|
||||||
#define CSTUFF_LIST_H_372E2D14_8DEE_4A7C_A5AB_8808A87DF436
|
|
||||||
|
|
||||||
#include "retcode.h"
|
|
||||||
|
|
||||||
#define cstuff_list_index(LIST, IDX) (LIST->items[IDX])
|
|
||||||
|
|
||||||
|
|
||||||
struct cstuff_list {
|
|
||||||
void **items;
|
|
||||||
int length;
|
|
||||||
int size;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct cstuff_list * CStuffList;
|
|
||||||
|
|
||||||
typedef void
|
|
||||||
(*CStuffListFree)(void *item);
|
|
||||||
|
|
||||||
|
|
||||||
CStuffRetcode
|
|
||||||
cstuff_list_init(CStuffList self, int size);
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
cstuff_list_release(CStuffList self, CStuffListFree item_free);
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
cstuff_list_append(CStuffList self, void *item);
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
cstuff_list_insert(CStuffList self, void *item, int index);
|
|
||||||
|
|
||||||
|
|
||||||
void *
|
|
||||||
cstuff_list_remove(CStuffList self, int index);
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
cstuff_list_remove_item(CStuffList self, void *item);
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
cstuff_list_set_item(CStuffList self, int index, void *value);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* !LIST_H */
|
|
Loading…
Reference in New Issue