#ifndef INCLUDED_C_PTRLINKBAG_H #define INCLUDED_C_PTRLINKBAG_H #ifndef INCLUDED_C_TYPES_H #include #endif /*INCLUDED_C_TYPES_H*/ /* ------------------------------------------------------------------------------------------------------------------ */ /* */ typedef struct c_PtrLinkBagNode_t { void* ptr; struct c_PtrLinkBagNode_t* next; }c_PtrLinkBagNode_t; typedef struct { c_PtrLinkBagNode_t* head; }c_PtrLinkBag_t; typedef struct { c_PtrLinkBag_t* bag; c_PtrLinkBagNode_t** node; }c_PtrLinkBagIter_t; c_err_t c_PtrLinkBag_Init(c_PtrLinkBag_t* self); void c_PtrLinkBag_Destroy(c_PtrLinkBag_t* self); c_err_t c_PtrLinkBag_Add(c_PtrLinkBag_t* self, void* item); c_err_t c_PtrLinkBag_Remove(c_PtrLinkBag_t* self, const void* item); C_STATIC_FORCE_INLINE void c_PtrLinkBagIter_Init(c_PtrLinkBagIter_t* self, c_PtrLinkBag_t* bag) { if (!self || !bag) return; self->bag = bag; self->node = &bag->head; } C_STATIC_FORCE_INLINE c_bool_t c_PtrLinkBagIter_HasNext(c_PtrLinkBagIter_t* self) { if (!self) return C_FALSE; return (self->node!=NULL) && (*(self->node)!=NULL); } C_STATIC_FORCE_INLINE void* c_PtrLinkBagIter_Next(c_PtrLinkBagIter_t* self) { if (!self || !self->node) return NULL; void* ptr = (*(self->node))->ptr; self->node = &(*(self->node))->next; return ptr; } C_STATIC_FORCE_INLINE void* c_PtrLinkBagIter_Get(c_PtrLinkBagIter_t* self) { if (!self || !self->node) return NULL; return (*(self->node))->ptr; } void c_PtrLinkBagIter_Remove(c_PtrLinkBagIter_t* self); #endif /*INCLUDED_C_PTRLINKBAG_H*/