Archeus 0.0.0
A C library and game engine that focuses on documentation
Loading...
Searching...
No Matches
handler.c
Go to the documentation of this file.
1#include "arc/std/handler.h"
2
3#include "arc/std/errno.h"
4#include "arc/std/vector.h"
5#include <stdlib.h>
6
13
15 *handler = (ARC_Handler *) malloc(sizeof(ARC_Handler));
16 ARC_Vector_Create(&((*handler)->data), NULL, NULL);
17 ARC_Vector_Create(&((*handler)->trash), compareFn, NULL);
18 (*handler)->cleanfn = cleanfn;
19}
20
22 ARC_Handler_Clear(handler);
23 ARC_Handler_Clean(handler);
24
25 ARC_Vector_Destroy(handler->data);
26 ARC_Vector_Destroy(handler->trash);
27
28 free(handler);
29}
30
31void ARC_Handler_Add(ARC_Handler *handler, void *data){
32 ARC_Vector_Add(handler->data, data);
33}
34
35void ARC_Handler_Remove(ARC_Handler *handler, void *data){
36 ARC_Vector_Add(handler->trash, data);
37 ARC_Vector_Remove(handler->data, data);
38}
39
40void ARC_Handler_RemoveIndex(ARC_Handler *handler, uint32_t index){
41 if(ARC_Vector_GetSize(handler->data) == 0){
42 return;
43 }
44
45 void *data = ARC_Vector_Get(handler->data, index);
46 ARC_Vector_Add(handler->trash, data);
47 ARC_Vector_RemoveIndex(handler->data, index);
48}
49
51 for(uint32_t i = 0; i < ARC_Vector_GetSize(handler->data); i++){
52 datafn(ARC_Vector_Get(handler->data, i));
53 }
54}
55
57 uint32_t zeroIndex = 0;
58 while(ARC_Vector_GetSize(handler->data)){
59 ARC_Handler_RemoveIndex(handler, zeroIndex);
60 }
61}
62
64 uint32_t i = 0;
65 while(ARC_Vector_GetSize(handler->trash)){
66 void *data = ARC_Vector_Get(handler->trash, i);
67
68 if(handler->cleanfn){
69 handler->cleanfn(data);
70 }
71
72 ARC_Vector_RemoveIndex(handler->trash, i);
73 }
74}
75
77 return ARC_Vector_GetSize(handler->data);
78}
void ARC_Handler_Add(ARC_Handler *handler, void *data)
adds data to handler
Definition handler.c:31
void ARC_Handler_Destroy(ARC_Handler *handler)
destroyes ARC_Handler type
Definition handler.c:21
void ARC_Handler_Clear(ARC_Handler *handler)
clears all data from handler and puts it in trash vector
Definition handler.c:56
uint32_t ARC_Handler_GetSize(ARC_Handler *handler)
gets size of vector
Definition handler.c:76
void ARC_Handler_Iterate(ARC_Handler *handler, ARC_Handler_DataFn datafn)
calls provided function on each element in handler
Definition handler.c:50
void ARC_Handler_Create(ARC_Handler **handler, ARC_Handler_CompareDataFn *compareFn, ARC_Handler_CleanDataFn cleanfn)
creates ARC_Handler type
Definition handler.c:14
void ARC_Handler_Clean(ARC_Handler *handler)
clears trash from handler
Definition handler.c:63
void ARC_Handler_Remove(ARC_Handler *handler, void *data)
remove from handler
Definition handler.c:35
void ARC_Handler_RemoveIndex(ARC_Handler *handler, uint32_t index)
remove from handler
Definition handler.c:40
ARC_Bool(* ARC_Handler_CompareDataFn)(void *a, void *b)
data comparison function ptr
Definition handler.h:26
void(* ARC_Handler_CleanDataFn)(void *data)
a function that will be used during destruction of trash vector
Definition handler.h:40
void(* ARC_Handler_DataFn)(void *data)
a function that will take iterated data
Definition handler.h:33
ARC_Vector * data
Definition handler.c:8
ARC_Vector * trash
Definition handler.c:9
ARC_Handler_CleanDataFn cleanfn
Definition handler.c:11
a private dynamic array type
Definition vector.c:12
uint32_t ARC_Vector_GetSize(ARC_Vector *vector)
gets the current size of an ARC_Vector as an unsigned 32 bit integer
Definition vector.c:149
void * ARC_Vector_Get(ARC_Vector *vector, uint32_t index)
gets an item from an ARC_Vector at a position index
Definition vector.c:153
void ARC_Vector_Add(ARC_Vector *vector, void *data)
adds an item to an ARC_Vector
Definition vector.c:70
void ARC_Vector_Remove(ARC_Vector *vector, void *data)
removes an item from a matching item in an ARC_Vector
Definition vector.c:97
void ARC_Vector_Destroy(ARC_Vector *vector)
destroys an ARC_Vector
Definition vector.c:54
void ARC_Vector_RemoveIndex(ARC_Vector *vector, uint32_t index)
removes an item from an ARC_Vector at an index
Definition vector.c:110
void ARC_Vector_Create(ARC_Vector **vector, ARC_Vector_CompareDataFn *compareDataFn, ARC_Vector_DestroyDataFn *destroyDataFn)
creates an ARC_Vector which is an "expandable" array
Definition vector.c:31