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

58 lines
1.2 KiB
C

#ifndef POINTERRBTREEITER_H_
#define POINTERRBTREEITER_H_
#include "PointerRBTree.h"
struct RBTreeIter;
typedef struct RBTreeIter RBTreeIter;
static inline void PointerRBTreeIter_init(
RBTreeIter* this, RBTree* tree, RBTreeElem* treeElem);
static inline void* PointerRBTreeIter_next(RBTreeIter* this);
static inline void* PointerRBTreeIter_key(RBTreeIter* this);
static inline void* PointerRBTreeIter_value(RBTreeIter* this);
static inline bool PointerRBTreeIter_end(RBTreeIter* this);
struct RBTreeIter
{
RBTree* tree;
RBTreeElem* treeElem;
};
void PointerRBTreeIter_init(RBTreeIter* this, RBTree* tree, RBTreeElem* treeElem)
{
this->tree = tree;
this->treeElem = treeElem;
}
void* PointerRBTreeIter_next(RBTreeIter* this)
{
struct rb_node* next = rb_next(&this->treeElem->treenode);
this->treeElem = next ? container_of(next, RBTreeElem, treenode) : NULL;
return this->treeElem;
}
void* PointerRBTreeIter_key(RBTreeIter* this)
{
return this->treeElem->key;
}
void* PointerRBTreeIter_value(RBTreeIter* this)
{
return this->treeElem->value;
}
/**
* Return true if the end of the iterator was reached
*/
bool PointerRBTreeIter_end(RBTreeIter* this)
{
return (this->treeElem == NULL);
}
#endif /*POINTERRBTREEITER_H_*/