#include "list.h"
#include "mem.h"
+#include "str.h"
list2_t* list_new (void) {
- return (safe_calloc (sizeof (list2_t), 1));
+ return (mem_calloc (1, sizeof (list2_t)));
}
-void list_del (list2_t** l, void (*edel) (void**)) {
+void list_del (list2_t** l, list_del_t* del) {
size_t i = 0;
if (!l || !*l)
return;
- if (*edel)
+ if (del)
for (i = 0; i < (*l)->length; i++)
- edel (&(*l)->data[i]);
- FREE(&(*l)->data);
- FREE(l);
+ del (&(*l)->data[i]);
+ mem_free(&(*l)->data);
+ mem_free(l);
}
void list_push_back (list2_t** l, void* p) {
if (!*l)
*l = list_new ();
- safe_realloc (&(*l)->data, (++(*l)->length)*sizeof(void*));
+ mem_realloc (&(*l)->data, (++(*l)->length)*sizeof(void*));
(*l)->data[(*l)->length-1] = p;
}
void list_push_front (list2_t** l, void* p) {
if (!*l)
*l = list_new ();
- safe_realloc (&(*l)->data, (++(*l)->length)*sizeof(void*));
+ mem_realloc (&(*l)->data, (++(*l)->length)*sizeof(void*));
if ((*l)->length > 1)
memmove (&(*l)->data[1], &(*l)->data[0], ((*l)->length-1)*sizeof(void*));
(*l)->data[0] = p;
if (list_empty(l))
return (NULL);
p = l->data[l->length-1];
- safe_realloc (&l->data, --(l->length)*sizeof(void*));
+ mem_realloc (&l->data, --(l->length)*sizeof(void*));
return (p);
}
return (NULL);
p = l->data[0];
memmove (&l->data[0], &l->data[1], (--(l->length))*sizeof(void*));
- safe_realloc (&l->data, l->length*sizeof(void*));
+ mem_realloc (&l->data, l->length*sizeof(void*));
return (p);
}
return (list_pop_back (l));
p = l->data[c];
memmove (&l->data[c], &l->data[c+1], (l->length-c)*sizeof(void*));
- safe_realloc (&l->data, (--(l->length))*sizeof(void*));
+ mem_realloc (&l->data, (--(l->length))*sizeof(void*));
return (p);
}
return (NULL);
ret = list_new ();
ret->length = l->length;
- ret->data = safe_malloc (l->length*sizeof(void*));
+ ret->data = mem_malloc (l->length*sizeof(void*));
memcpy (ret->data, l->data, l->length*sizeof(void*));
return (ret);
}
return (NULL);
ret = list_new ();
ret->length = l->length;
- ret->data = safe_malloc (l->length*sizeof(void*));
+ ret->data = mem_malloc (l->length*sizeof(void*));
for (i = 0; i < l->length; i++)
ret->data[i] = dup (l->data[i]);
return (ret);
}
-int _list_lookup (list2_t* l, int (*cmp) (const void*, const void*), const void* p) {
+int list_lookup (list2_t* l, int (*cmp) (const void*, const void*), const void* p) {
int i = 0;
if (list_empty(l) || !*cmp)
return (-1);
return (i);
return (-1);
}
+
+list2_t* list_from_str (const char* str, const char* delim) {
+ list2_t* ret = NULL;
+ char* tmp = NULL, *p = NULL;
+
+ if (!str || !*str || !delim || !*delim)
+ return (NULL);
+
+ tmp = str_dup (str);
+ for (p = strtok (tmp, delim); p; p = strtok (NULL, delim)) {
+ list_push_back (&ret, str_dup (p));
+ }
+ mem_free (&tmp);
+ return (ret);
+}
+