get rid of unused iterator hook functions

This commit is contained in:
Martin Willi 2008-11-05 08:37:09 +00:00
parent e13389a7f7
commit 2662806b2c
2 changed files with 10 additions and 130 deletions

View File

@ -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.
*

View File

@ -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;
}