2025-08-10 01:34:16 +02:00

63 lines
1.5 KiB
C

#ifndef POINTERLISTITER_H_
#define POINTERLISTITER_H_
#include "PointerList.h"
struct PointerListIter;
typedef struct PointerListIter PointerListIter;
static inline void PointerListIter_init(PointerListIter* this, PointerList* list);
static inline void PointerListIter_next(PointerListIter* this);
static inline void* PointerListIter_value(PointerListIter* this);
static inline bool PointerListIter_end(PointerListIter* this);
static inline PointerListIter PointerListIter_remove(PointerListIter* this);
struct PointerListIter
{
PointerList* list;
PointerListElem* elem;
};
void PointerListIter_init(PointerListIter* this, PointerList* list)
{
this->list = list;
this->elem = list->head;
}
void PointerListIter_next(PointerListIter* this)
{
// note: must not return the value because the current elem could be the end of the list
this->elem = this->elem->next;
}
void* PointerListIter_value(PointerListIter* this)
{
return this->elem->valuePointer;
}
bool PointerListIter_end(PointerListIter* this)
{
return (this->elem == NULL);
}
/**
* note: the current iterator becomes invalid after the call (use the returned iterator)
* @return the new iterator that points to the element just behind the erased one
*/
PointerListIter PointerListIter_remove(PointerListIter* this)
{
PointerListIter newIter = *this;
PointerListElem* elem = this->elem;
PointerListIter_next(&newIter);
PointerList_removeElem(this->list, elem);
return newIter;
}
#endif /*POINTERLISTITER_H_*/