From 239f248456ad00f894dc26dceefa968898738c9d Mon Sep 17 00:00:00 2001 From: Stefan Zabka Date: Mon, 22 Jun 2020 16:43:42 +0200 Subject: Getting make to run --- 04_exercise/slotmap/slomap_test.c | 19 ---------------- 04_exercise/slotmap/slotmap.c | 48 --------------------------------------- 04_exercise/slotmap/slotmap.h | 36 ----------------------------- 3 files changed, 103 deletions(-) delete mode 100644 04_exercise/slotmap/slomap_test.c delete mode 100644 04_exercise/slotmap/slotmap.c delete mode 100644 04_exercise/slotmap/slotmap.h (limited to '04_exercise/slotmap') diff --git a/04_exercise/slotmap/slomap_test.c b/04_exercise/slotmap/slomap_test.c deleted file mode 100644 index 930bfa8..0000000 --- a/04_exercise/slotmap/slomap_test.c +++ /dev/null @@ -1,19 +0,0 @@ -// -// Created by stefan on 18.06.20. -// -#include -#include -#include - -bool find1(void const * ptr) { - return * (int const *) ptr == 1; -} -int main() { - smEntry slab [10]; - int data [6] = {0, 1, 2,3,4,5}; - smHeader header = smInit((smEntry *)&slab, 10); - smInsert(&header, &data[1]); - smEntry * entry = smFindEntry(&header, &find1); - assert(*(int *)entry->value == 1); - return 0; -} diff --git a/04_exercise/slotmap/slotmap.c b/04_exercise/slotmap/slotmap.c deleted file mode 100644 index 57c4ef5..0000000 --- a/04_exercise/slotmap/slotmap.c +++ /dev/null @@ -1,48 +0,0 @@ -// -// Created by stefan on 18.06.20. -// - -#include "slotmap.h" -#include -smHeader smInit(smEntry * slab, size_t size) { - for (int i = 0; i < size; ++i) { - slab[i].value = (intptr_t)NULL; - } - return (smHeader){.slab = slab, .size=size}; -} -int smInsert(smHeader const * header, void * value) { - for (size_t i = 0; i< header->size; ++i ) { - intptr_t ptr = atomic_load(&header->slab[i].value); - if((void *)ptr == NULL) { - intptr_t expected = (intptr_t) NULL; - if(atomic_compare_exchange_strong(&header->slab[i].value, &expected, (intptr_t) value)){ - return 0; - } - } - } - return -1; -} -void smDelete(smEntry * node) { - intptr_t oldval = atomic_exchange(&node->value, (intptr_t)(NULL)); - if((void *) oldval == NULL) { - fprintf(stderr, "A Node has been double deleted"); - } -} -void smDeleteValue(smHeader const * header, void * value){ - for (size_t i = 0; i< header->size; ++i ) { - intptr_t ptr = atomic_load(&header->slab[i].value); - if((void *)ptr == value) { - smDelete(&header->slab[i]); - } - } -} -smEntry *smFindEntry(smHeader const * header, SearchFunction func){ - for (size_t i = 0; i< header->size; ++i ) { - void * value = (void *) atomic_load(&header->slab[i].value); - - if(value != NULL && func(value)) { - return &header->slab[i]; - } - } - return NULL; -} diff --git a/04_exercise/slotmap/slotmap.h b/04_exercise/slotmap/slotmap.h deleted file mode 100644 index 1d687fc..0000000 --- a/04_exercise/slotmap/slotmap.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// Created by stefan on 18.06.20. -// - -#ifndef BETRIEBSYSTEME_SLOTMAP_H -#define BETRIEBSYSTEME_SLOTMAP_H -#include -#include -#include - -typedef struct smNode { - atomic_intptr_t value; -} smEntry; - -typedef struct smHeader { - smEntry *slab; - size_t size; -} smHeader; - -typedef bool (*SearchFunction)(void const *); - -smHeader smInit(smEntry * slab, size_t size); -int smInsert(smHeader const * header, void * value); -void smDelete(smEntry * node); -void smDeleteValue(smHeader const * header, void * value); -/** - * Returns a node whose value is accepted by the SearchFunction - * @param header The header of the slotmap to be searched - * @param func The search function, that will be applied to each element until one is found - * @return the Entry that was found - */ -smEntry *smFindEntry(smHeader const * header, SearchFunction func); - - - -#endif // BETRIEBSYSTEME_SLOTMAP_H -- cgit v1.2.3-54-g00ecf