/*********************** -*- Mode: C -*- *********************** * File : bintree_iterator_init.c *--------------------------------------------------------------- * Description * =========== * This operation initialises an iterator. This can then be * subsequently used for iterating through a tree. This will work * even if the "clientnode" which defined the current iterator has been * removed before the next iterator operation. * * iter - the iterator instance to initialise * tree - the tree to associate with this iterator * clientnode - the starting point for the iteration * *--------------------------------------------------------------- * Author : Graeme McKerrell * Created On : Wed Jan 28 10:33:42 2004 * Status : TESTED *--------------------------------------------------------------- * HISTORY * 7-Dec-2004 Graeme McKerrell * Renamed to the "lub_" namespace * 3-Nov-2004 Graeme McKerrell * Added key bounds checking code * 5-May-2004 Graeme McKerrell * updates following review * 9-Feb-2004 Graeme McKerrell * updated to use new getkey prototype * 28-Jan-2004 Graeme McKerrell * Initial version *--------------------------------------------------------------- * Copyright (C) 2004 3Com Corporation. All Rights Reserved. **************************************************************** */ #include "private.h" #include #define MAGIC_NUMBER 0x12345678 /*--------------------------------------------------------- */ void lub_bintree_iterator_init(lub_bintree_iterator_t * this, lub_bintree_t * tree, const void *clientnode) { if (clientnode != NULL) { this->tree = tree; this->key.magic = MAGIC_NUMBER; /* fill out the iterator's key */ this->tree->getkeyFn(clientnode, &this->key); /* * this assert will fire if the client tries to store more than * the current storage permits */ assert(this->key.magic == MAGIC_NUMBER); } } /*--------------------------------------------------------- */