get rid of unused iterator hook functions
This commit is contained in:
parent
e13389a7f7
commit
2662806b2c
|
@ -26,43 +26,6 @@
|
|||
|
||||
#include <library.h>
|
||||
|
||||
typedef enum hook_result_t hook_result_t;
|
||||
|
||||
/**
|
||||
* Return value of an iterator hook.
|
||||
*
|
||||
* Returning HOOK_AGAIN is useful to "inject" additional elements in an
|
||||
* iteration, HOOK_NEXT is the normal iterator behavior, and HOOK_SKIP may
|
||||
* be used to filter elements out.
|
||||
*/
|
||||
enum hook_result_t {
|
||||
|
||||
/**
|
||||
* A value was placed in out, hook is called again with the same "in"
|
||||
*/
|
||||
HOOK_AGAIN,
|
||||
|
||||
/**
|
||||
* A value was placed in out, hook is called again with next "in" (if any)
|
||||
*/
|
||||
HOOK_NEXT,
|
||||
|
||||
/**
|
||||
* No value in out, call again with next "in" (if any)
|
||||
*/
|
||||
HOOK_SKIP,
|
||||
};
|
||||
|
||||
/**
|
||||
* Iterator hook function prototype.
|
||||
*
|
||||
* @param param user supplied parameter
|
||||
* @param in the value the hook receives from the iterator
|
||||
* @param out the value supplied as a result to the iterator
|
||||
* @return a hook_result_t
|
||||
*/
|
||||
typedef hook_result_t (iterator_hook_t)(void *param, void *in, void **out);
|
||||
|
||||
|
||||
typedef struct iterator_t iterator_t;
|
||||
|
||||
|
@ -93,24 +56,6 @@ struct iterator_t {
|
|||
*/
|
||||
bool (*iterate) (iterator_t *this, void** value);
|
||||
|
||||
/**
|
||||
* Hook a function into the iterator.
|
||||
*
|
||||
* Sometimes it is useful to hook in an iterator. The hook function is
|
||||
* called before any successful return of iterate(). It takes the
|
||||
* iterator value, may manipulate it (or the references object), and returns
|
||||
* the value that the iterate() function returns. Depending on the hook
|
||||
* return value, the hook is called again, called with next, or skipped.
|
||||
* A value of NULL deactivates the iterator hook.
|
||||
* If an iterator is hooked, only the iterate() method is valid,
|
||||
* all other methods behave undefined.
|
||||
*
|
||||
* @param hook iterator hook which manipulates the iterated value
|
||||
* @param param user supplied parameter to pass back to the hook
|
||||
*/
|
||||
void (*set_iterator_hook) (iterator_t *this, iterator_hook_t *hook,
|
||||
void *param);
|
||||
|
||||
/**
|
||||
* Inserts a new item before the given iterator position.
|
||||
*
|
||||
|
|
|
@ -119,16 +119,6 @@ struct private_iterator_t {
|
|||
* Direction of iterator.
|
||||
*/
|
||||
bool forward;
|
||||
|
||||
/**
|
||||
* iteration hook
|
||||
*/
|
||||
iterator_hook_t *hook;
|
||||
|
||||
/**
|
||||
* user parameter for iterator hook
|
||||
*/
|
||||
void *hook_param;
|
||||
};
|
||||
|
||||
typedef struct private_enumerator_t private_enumerator_t;
|
||||
|
@ -202,75 +192,22 @@ static int get_list_count(private_iterator_t *this)
|
|||
return this->list->count;
|
||||
}
|
||||
|
||||
/**
|
||||
* default iterator hook which does nothing
|
||||
*/
|
||||
static hook_result_t iterator_hook(void *param, void *in, void **out)
|
||||
{
|
||||
*out = in;
|
||||
return HOOK_NEXT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of iterator_t.set_iterator_hook.
|
||||
*/
|
||||
static void set_iterator_hook(private_iterator_t *this, iterator_hook_t *hook,
|
||||
void* param)
|
||||
{
|
||||
if (hook == NULL)
|
||||
{
|
||||
this->hook = iterator_hook;
|
||||
this->hook_param = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->hook = hook;
|
||||
this->hook_param = param;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implementation of iterator_t.iterate.
|
||||
*/
|
||||
static bool iterate(private_iterator_t *this, void** value)
|
||||
{
|
||||
while (TRUE)
|
||||
if (this->forward)
|
||||
{
|
||||
if (this->forward)
|
||||
{
|
||||
this->current = this->current ? this->current->next : this->list->first;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->current = this->current ? this->current->previous : this->list->last;
|
||||
}
|
||||
|
||||
if (this->current == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
switch (this->hook(this->hook_param, this->current->value, value))
|
||||
{
|
||||
case HOOK_AGAIN:
|
||||
/* rewind */
|
||||
if (this->forward)
|
||||
{
|
||||
this->current = this->current->previous;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->current = this->current->next;
|
||||
}
|
||||
break;
|
||||
case HOOK_NEXT:
|
||||
/* normal iteration */
|
||||
break;
|
||||
case HOOK_SKIP:
|
||||
/* advance */
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
this->current = this->current ? this->current->next : this->list->first;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->current = this->current ? this->current->previous : this->list->last;
|
||||
}
|
||||
if (this->current == NULL)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -786,7 +723,6 @@ static iterator_t *create_iterator(private_linked_list_t *linked_list, bool forw
|
|||
|
||||
this->public.get_count = (int (*) (iterator_t*)) get_list_count;
|
||||
this->public.iterate = (bool (*) (iterator_t*, void **value)) iterate;
|
||||
this->public.set_iterator_hook = (void(*)(iterator_t*, iterator_hook_t*, void*))set_iterator_hook;
|
||||
this->public.insert_before = (void (*) (iterator_t*, void *item)) insert_before;
|
||||
this->public.insert_after = (void (*) (iterator_t*, void *item)) insert_after;
|
||||
this->public.replace = (status_t (*) (iterator_t*, void **, void *)) replace;
|
||||
|
@ -797,7 +733,6 @@ static iterator_t *create_iterator(private_linked_list_t *linked_list, bool forw
|
|||
this->forward = forward;
|
||||
this->current = NULL;
|
||||
this->list = linked_list;
|
||||
this->hook = iterator_hook;
|
||||
|
||||
return &this->public;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue