From 214e6f66a0add10943456725f3b34e75c8b94849 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Fri, 10 Apr 2015 07:25:55 +0000 Subject: [PATCH] Inital commit FossilOrigin-Name: e0e2f46227f2b8f241effd54d7eb2a6f6391b1bd228fc544935bd19635040e62 --- src/capwap/avliter_seek.c | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 src/capwap/avliter_seek.c diff --git a/src/capwap/avliter_seek.c b/src/capwap/avliter_seek.c new file mode 100644 index 00000000..d84b600e --- /dev/null +++ b/src/capwap/avliter_seek.c @@ -0,0 +1,66 @@ +/* + This file is part of libcapwap. + + libcapwap is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + libcapwap is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Foobar. If not, see . + +*/ + +/** + *@file + *@brief Implementation of avliter_seek + */ + + +#include "avltree.h" + +/** + * Set an AVL Iterator to a specific position. + * @param i AVL Iterator + * @param d element to search for + * @return element found or NULL if not found + */ +void * avliter_seek(avliter_t *i,void *d) +{ + if (!i->root) + return NULL; + + i->cur=i->root; + i->stack_ptr=0; + + int rc; + while(i->cur) { + + rc = i->cmp(d,i->cur->data); + if (rc==0){ + i->stack[i->stack_ptr++]=i->cur->right; + i->stack[i->stack_ptr++]=i->cur; + return avliter_next(i); + } + + if (rc<0) { + i->stack[i->stack_ptr++]=i->cur->right; + i->stack[i->stack_ptr++]=i->cur; + + i->cur=i->cur->left; + + } + if (rc>0) { + + i->cur=i->cur->right; + } + } + return NULL; +} + +