#ifndef ARC_STD_HANDLER_H_ #define ARC_STD_HANDLER_H_ #ifdef __cplusplus extern "C" { #endif #include /** * @brief a handler type */ typedef struct ARC_Handler ARC_Handler; /** * @brief a function that will take iterated data * * @param data iterated data from ARC_Handler_Iterate */ typedef void (* ARC_Handler_DataFn)(void *data); /** * @brief a function that will be used during destruction of trash vector * * @param data data that is being destroyed from trash */ typedef void (* ARC_Handler_CleanDataFn)(void *data); /** * @brief creates ARC_Handler type * * @param config ARC_Handler to initialize */ void ARC_Handler_Create(ARC_Handler **handler); /** * @brief destroyes ARC_Handler type */ void ARC_Handler_Destroy(ARC_Handler *handler, ARC_Handler_CleanDataFn cleanfn); /** * @brief adds data to handler * * @param handler ARC_Handler to add to * @param data data that is being added */ void ARC_Handler_Add(ARC_Handler *handler, void *data); /** * @brief remove from handler * * @note the data that is removed is stored in a trash vector * the ARC_Handler_Clean function must be called clean the trash vector * the trash vector is to make sure a state is not deleted while being run * * @param handler ARC_Handler to remove from * @param data data that is being removed */ void ARC_Handler_Remove(ARC_Handler *handler, void *data); /** * @brief remove from handler * * @note the data that is removed is stored in a trash vector * the ARC_Handler_Clean function must be called clean the trash vector * the trash vector is to make sure a state is not deleted while being run * * @param handler ARC_Handler to remove from * @param index index of data that is being removed */ void ARC_Handler_RemoveIndex(ARC_Handler *handler, uint32_t *index); /** * @brief calls provided function on each element in handler * * @param handler ARC_Handler to iterate through * @param datafn function that will be called on each element of data */ void ARC_Handler_Iterate(ARC_Handler *handler, ARC_Handler_DataFn datafn); /** * @brief clears all data from handler and puts it in trash vector * * @param handler ARC_Handler to clear data from */ void ARC_Handler_Clear(ARC_Handler *handler); /** * @brief clears trash from handler * * @note cleanfn's main purpose is to help manage memory * * @param handler ARC_Handler to remove trash from * @param cleanfn user provided function to run on trash before clearing from trash vector * can be null */ void ARC_Handler_Clean(ARC_Handler *handler, ARC_Handler_CleanDataFn cleanfn); /** * @brief gets size of vector * * @param handler ARC_handler to get size from */ uint32_t *ARC_Handler_Size(ARC_Handler *handler); #ifdef __cplusplus } #endif #endif //ARC_STD_HANDLER_H_