fix(formatting): :retab
This commit is contained in:
parent
5a485445ed
commit
a56daaf6b8
2 changed files with 229 additions and 229 deletions
360
ds.c
360
ds.c
|
|
@ -6,13 +6,13 @@
|
||||||
ds_sll_t
|
ds_sll_t
|
||||||
*ds_sll_init(void)
|
*ds_sll_init(void)
|
||||||
{
|
{
|
||||||
return ds_sll_new_node(NULL);
|
return ds_sll_new_node(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ds_dll_t
|
ds_dll_t
|
||||||
*ds_dll_init(void)
|
*ds_dll_init(void)
|
||||||
{
|
{
|
||||||
return ds_dll_new_node(NULL);
|
return ds_dll_new_node(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ds_sll_t
|
ds_sll_t
|
||||||
|
|
@ -42,165 +42,165 @@ ds_dll_t
|
||||||
int
|
int
|
||||||
ds_sll_insert(ds_sll_t *ll, void *data)
|
ds_sll_insert(ds_sll_t *ll, void *data)
|
||||||
{
|
{
|
||||||
if (!ll || !data) {
|
if (!ll || !data) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ds_ll_foreach(ds_sll_t, ll) {
|
ds_ll_foreach(ds_sll_t, ll) {
|
||||||
if (!cur->data) {
|
if (!cur->data) {
|
||||||
cur->data = data;
|
cur->data = data;
|
||||||
return 0;
|
return 0;
|
||||||
} else if (!cur->next) {
|
} else if (!cur->next) {
|
||||||
cur->next = ds_sll_new_node(data);
|
cur->next = ds_sll_new_node(data);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ds_dll_insert(ds_dll_t *ll, void *data)
|
ds_dll_insert(ds_dll_t *ll, void *data)
|
||||||
{
|
{
|
||||||
if (!ll || !data) {
|
if (!ll || !data) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ds_ll_foreach(ds_dll_t, ll) {
|
ds_ll_foreach(ds_dll_t, ll) {
|
||||||
if (!cur->data) {
|
if (!cur->data) {
|
||||||
cur->data = data;
|
cur->data = data;
|
||||||
return 0;
|
return 0;
|
||||||
} else if (!cur->next) {
|
} else if (!cur->next) {
|
||||||
cur->next = ds_dll_new_node(data);
|
cur->next = ds_dll_new_node(data);
|
||||||
cur->next->prev = cur;
|
cur->next->prev = cur;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
*ds_sll_remove(ds_sll_t **ll, unsigned idx)
|
*ds_sll_remove(ds_sll_t **ll, unsigned idx)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
void *data;
|
void *data;
|
||||||
ds_sll_t *cur, *rm;
|
ds_sll_t *cur, *rm;
|
||||||
|
|
||||||
rm = NULL;
|
rm = NULL;
|
||||||
if (!ll || !*ll) {
|
if (!ll || !*ll) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx == 0) {
|
if (idx == 0) {
|
||||||
rm = *ll;
|
rm = *ll;
|
||||||
*ll = rm->next;
|
*ll = rm->next;
|
||||||
} else {
|
} else {
|
||||||
for (i = -1, cur = *ll; cur; i++, cur = cur->next) {
|
for (i = -1, cur = *ll; cur; i++, cur = cur->next) {
|
||||||
if (idx == i + 1) {
|
if (idx == i + 1) {
|
||||||
rm = cur->next;
|
rm = cur->next;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rm) {
|
if (!rm) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
cur->next = rm->next;
|
cur->next = rm->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = rm->data;
|
data = rm->data;
|
||||||
free(rm);
|
free(rm);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
*ds_dll_remove(ds_dll_t **ll, unsigned idx)
|
*ds_dll_remove(ds_dll_t **ll, unsigned idx)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
void *data;
|
void *data;
|
||||||
ds_dll_t *cur, *rm;
|
ds_dll_t *cur, *rm;
|
||||||
|
|
||||||
rm = NULL;
|
rm = NULL;
|
||||||
if (!ll || !*ll) {
|
if (!ll || !*ll) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (idx == 0) {
|
if (idx == 0) {
|
||||||
rm = *ll;
|
rm = *ll;
|
||||||
*ll = rm->next;
|
*ll = rm->next;
|
||||||
if (rm->next) {
|
if (rm->next) {
|
||||||
rm->next->prev = NULL;
|
rm->next->prev = NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (i = 0, cur = *ll; cur; i++, cur = cur->next) {
|
for (i = 0, cur = *ll; cur; i++, cur = cur->next) {
|
||||||
if (i == idx) {
|
if (i == idx) {
|
||||||
rm = cur;
|
rm = cur;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!rm) {
|
if (!rm) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
rm->prev->next = rm->next;
|
rm->prev->next = rm->next;
|
||||||
if (rm->next) {
|
if (rm->next) {
|
||||||
rm->next->prev = rm->prev;
|
rm->next->prev = rm->prev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data = rm->data;
|
data = rm->data;
|
||||||
free(rm);
|
free(rm);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
ds_hmp_t
|
ds_hmp_t
|
||||||
*ds_hmp_init(int data_len)
|
*ds_hmp_init(int data_len)
|
||||||
{
|
{
|
||||||
ds_hmp_t *hmp;
|
ds_hmp_t *hmp;
|
||||||
|
|
||||||
if (!data_len) {
|
if (!data_len) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
hmp = calloc(1, sizeof(ds_hmp_t));
|
hmp = calloc(1, sizeof(ds_hmp_t));
|
||||||
hmp->data_len = data_len;
|
hmp->data_len = data_len;
|
||||||
hmp->data = calloc(data_len, sizeof(ds_sll_t **));
|
hmp->data = calloc(data_len, sizeof(ds_sll_t **));
|
||||||
|
|
||||||
return hmp;
|
return hmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
ds_hmp_free(ds_hmp_t **hmp, void kv_callback(_ds_hmp_kv_t *kv))
|
ds_hmp_free(ds_hmp_t **hmp, void kv_callback(_ds_hmp_kv_t *kv))
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
_ds_hmp_kv_t *kv;
|
_ds_hmp_kv_t *kv;
|
||||||
ds_sll_t *ll;
|
ds_sll_t *ll;
|
||||||
|
|
||||||
if (!hmp || !*hmp) {
|
if (!hmp || !*hmp) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < (*hmp)->data_len; i++) {
|
for (i = 0; i < (*hmp)->data_len; i++) {
|
||||||
ll = (*hmp)->data[i];
|
ll = (*hmp)->data[i];
|
||||||
while (ll && ll->data) {
|
while (ll && ll->data) {
|
||||||
if ((kv = ds_sll_remove(&ll, 0))) {
|
if ((kv = ds_sll_remove(&ll, 0))) {
|
||||||
if (kv_callback) {
|
if (kv_callback) {
|
||||||
kv_callback(kv);
|
kv_callback(kv);
|
||||||
}
|
}
|
||||||
free(kv);
|
free(kv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ll) {
|
if (ll) {
|
||||||
free(ll);
|
free(ll);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free((*hmp)->data);
|
free((*hmp)->data);
|
||||||
free(*hmp);
|
free(*hmp);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
@ -219,91 +219,91 @@ _ds_hmp_gen_hash(char *str)
|
||||||
int
|
int
|
||||||
ds_hmp_insert(ds_hmp_t *hmp, char *key, void *data)
|
ds_hmp_insert(ds_hmp_t *hmp, char *key, void *data)
|
||||||
{
|
{
|
||||||
_ds_hmp_kv_t *kv;
|
_ds_hmp_kv_t *kv;
|
||||||
ds_sll_t *ll;
|
ds_sll_t *ll;
|
||||||
unsigned hash_pos;
|
unsigned hash_pos;
|
||||||
|
|
||||||
if (!hmp || !key || !data) {
|
if (!hmp || !key || !data) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
kv = malloc(sizeof(_ds_hmp_kv_t));
|
kv = malloc(sizeof(_ds_hmp_kv_t));
|
||||||
kv->key = key;
|
kv->key = key;
|
||||||
kv->val = data;
|
kv->val = data;
|
||||||
|
|
||||||
hash_pos = _ds_hmp_gen_hash(key) % hmp->data_len;
|
hash_pos = _ds_hmp_gen_hash(key) % hmp->data_len;
|
||||||
if (!hmp->data[hash_pos]) {
|
if (!hmp->data[hash_pos]) {
|
||||||
hmp->data[hash_pos] = ds_sll_init();
|
hmp->data[hash_pos] = ds_sll_init();
|
||||||
if (!hmp->data[hash_pos]) {
|
if (!hmp->data[hash_pos]) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get the ll and put the data into it */
|
/* get the ll and put the data into it */
|
||||||
ll = hmp->data[hash_pos];
|
ll = hmp->data[hash_pos];
|
||||||
if (ds_sll_insert(ll, kv) != 0) {
|
if (ds_sll_insert(ll, kv) != 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
*ds_hmp_get(ds_hmp_t *hmp, char *key)
|
*ds_hmp_get(ds_hmp_t *hmp, char *key)
|
||||||
{
|
{
|
||||||
ds_sll_t *cur, *ll;
|
ds_sll_t *cur, *ll;
|
||||||
unsigned hash_pos;
|
unsigned hash_pos;
|
||||||
|
|
||||||
if (!hmp || !key) {
|
if (!hmp || !key) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
hash_pos = _ds_hmp_gen_hash(key) % hmp->data_len;
|
hash_pos = _ds_hmp_gen_hash(key) % hmp->data_len;
|
||||||
ll = hmp->data[hash_pos];
|
ll = hmp->data[hash_pos];
|
||||||
if (!ll) {
|
if (!ll) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
ds_ll_foreach(ds_sll_t, ll) {
|
ds_ll_foreach(ds_sll_t, ll) {
|
||||||
if (strcmp(((_ds_hmp_kv_t *)cur->data)->key, key) == 0) {
|
if (strcmp(((_ds_hmp_kv_t *)cur->data)->key, key) == 0) {
|
||||||
return ((_ds_hmp_kv_t *)cur->data)->val;
|
return ((_ds_hmp_kv_t *)cur->data)->val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
*ds_hmp_remove(ds_hmp_t *hmp, char *key)
|
*ds_hmp_remove(ds_hmp_t *hmp, char *key)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
void *data;
|
void *data;
|
||||||
unsigned hash_pos;
|
unsigned hash_pos;
|
||||||
ds_sll_t *ll, *cur;
|
ds_sll_t *ll, *cur;
|
||||||
_ds_hmp_kv_t *kv;
|
_ds_hmp_kv_t *kv;
|
||||||
|
|
||||||
if (!hmp || !key) {
|
if (!hmp || !key) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
hash_pos = _ds_hmp_gen_hash(key) % hmp->data_len;
|
hash_pos = _ds_hmp_gen_hash(key) % hmp->data_len;
|
||||||
ll = hmp->data[hash_pos];
|
ll = hmp->data[hash_pos];
|
||||||
if (!ll) {
|
if (!ll) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0, cur = ll; cur; i++, cur = cur->next) {
|
for (i = 0, cur = ll; cur; i++, cur = cur->next) {
|
||||||
if (strcmp(((_ds_hmp_kv_t *)cur->data)->key, key) == 0) {
|
if (strcmp(((_ds_hmp_kv_t *)cur->data)->key, key) == 0) {
|
||||||
kv = ds_sll_remove(&ll, i);
|
kv = ds_sll_remove(&ll, i);
|
||||||
hmp->data[hash_pos] = ll;
|
hmp->data[hash_pos] = ll;
|
||||||
if (!kv) {
|
if (!kv) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
data = kv->val;
|
data = kv->val;
|
||||||
free(kv);
|
free(kv);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
98
test.c
98
test.c
|
|
@ -4,70 +4,70 @@
|
||||||
|
|
||||||
#include "ds.h"
|
#include "ds.h"
|
||||||
|
|
||||||
#define test(name, tests) do { \
|
#define test(name, tests) do { \
|
||||||
const char *_test_name = name; \
|
const char *_test_name = name; \
|
||||||
int _tests_passed = 0; \
|
int _tests_passed = 0; \
|
||||||
int _tests = 0; \
|
int _tests = 0; \
|
||||||
tests \
|
tests \
|
||||||
_tests_passed += _tests; \
|
_tests_passed += _tests; \
|
||||||
printf("%s: %d/%d tests passed\n", name, _tests_passed, _tests); \
|
printf("%s: %d/%d tests passed\n", name, _tests_passed, _tests); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define it(message, test) do { \
|
#define it(message, test) do { \
|
||||||
_tests++; \
|
_tests++; \
|
||||||
if (!(test)) { \
|
if (!(test)) { \
|
||||||
printf("%s %s FAILED\n", _test_name, message); \
|
printf("%s %s FAILED\n", _test_name, message); \
|
||||||
_tests_passed--; \
|
_tests_passed--; \
|
||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int num;
|
int num;
|
||||||
char *str;
|
char *str;
|
||||||
} complex;
|
} complex;
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
test("sll",
|
test("sll",
|
||||||
char *a = "one";
|
char *a = "one";
|
||||||
|
|
||||||
ds_sll_t *tmp;
|
ds_sll_t *tmp;
|
||||||
it("creates a new linked list", tmp = ds_sll_init());
|
it("creates a new linked list", tmp = ds_sll_init());
|
||||||
free(tmp);
|
free(tmp);
|
||||||
|
|
||||||
ds_sll_t *ll = ds_sll_new_node(a);
|
ds_sll_t *ll = ds_sll_new_node(a);
|
||||||
it("inserts an invalid item", ds_sll_insert(ll, NULL) == -1);
|
it("inserts an invalid item", ds_sll_insert(ll, NULL) == -1);
|
||||||
it("removes an invalid index", ds_sll_remove(&ll, 1234) == NULL);
|
it("removes an invalid index", ds_sll_remove(&ll, 1234) == NULL);
|
||||||
it("removes an item", a == ds_sll_remove(&ll, 0));
|
it("removes an item", a == ds_sll_remove(&ll, 0));
|
||||||
);
|
);
|
||||||
|
|
||||||
test("dll",
|
test("dll",
|
||||||
char *a = "one";
|
char *a = "one";
|
||||||
|
|
||||||
ds_dll_t *tmp;
|
ds_dll_t *tmp;
|
||||||
it("creates a new linked list", tmp = ds_dll_init());
|
it("creates a new linked list", tmp = ds_dll_init());
|
||||||
free(tmp);
|
free(tmp);
|
||||||
|
|
||||||
ds_dll_t *ll = ds_dll_new_node(a);
|
ds_dll_t *ll = ds_dll_new_node(a);
|
||||||
it("inserts an invalid item", ds_dll_insert(ll, NULL) == -1);
|
it("inserts an invalid item", ds_dll_insert(ll, NULL) == -1);
|
||||||
it("removes an invalid index", ds_dll_remove(&ll, 1234) == NULL);
|
it("removes an invalid index", ds_dll_remove(&ll, 1234) == NULL);
|
||||||
it("removes an item", a == ds_dll_remove(&ll, 0));
|
it("removes an item", a == ds_dll_remove(&ll, 0));
|
||||||
);
|
);
|
||||||
|
|
||||||
test("hmp",
|
test("hmp",
|
||||||
complex *a = calloc(1, sizeof(complex));
|
complex *a = calloc(1, sizeof(complex));
|
||||||
a->num = 1;
|
a->num = 1;
|
||||||
a->str = "abc";
|
a->str = "abc";
|
||||||
|
|
||||||
ds_hmp_t *hmp = ds_hmp_init(101);
|
ds_hmp_t *hmp = ds_hmp_init(101);
|
||||||
it("inserts an item", ds_hmp_insert(hmp, a->str, a) == 0);
|
it("inserts an item", ds_hmp_insert(hmp, a->str, a) == 0);
|
||||||
it("generates a hash", _ds_hmp_gen_hash("a") == 177670);
|
it("generates a hash", _ds_hmp_gen_hash("a") == 177670);
|
||||||
it("removes a non-existent item", ds_hmp_remove(hmp, "???") == NULL);
|
it("removes a non-existent item", ds_hmp_remove(hmp, "???") == NULL);
|
||||||
it("removes an invalid item", ds_hmp_remove(hmp, NULL) == NULL);
|
it("removes an invalid item", ds_hmp_remove(hmp, NULL) == NULL);
|
||||||
it("removes an item", a == ds_hmp_remove(hmp, a->str));
|
it("removes an item", a == ds_hmp_remove(hmp, a->str));
|
||||||
ds_hmp_free(&hmp, NULL);
|
ds_hmp_free(&hmp, NULL);
|
||||||
|
|
||||||
free(a);
|
free(a);
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue