From 001d36e25aa62b7968ce706c1b3fc500fa7b60c0 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Sun, 19 Apr 2015 21:28:26 +0000 Subject: [PATCH] mavl... FossilOrigin-Name: 0d6e3747e416a3d4657f1bc6beb9d8c74ef5cca62a13637df26d7aa357ae37b5 --- src/capwap/mavl_foreach.c | 39 ++++++++++++++++++++++++++++++++++++ src/capwap/mavl_foreach_lr.c | 17 ++++++++++++++++ src/capwap/mavl_get_node.c | 39 ++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 src/capwap/mavl_foreach.c create mode 100644 src/capwap/mavl_foreach_lr.c create mode 100644 src/capwap/mavl_get_node.c diff --git a/src/capwap/mavl_foreach.c b/src/capwap/mavl_foreach.c new file mode 100644 index 00000000..49930ad7 --- /dev/null +++ b/src/capwap/mavl_foreach.c @@ -0,0 +1,39 @@ +/* + 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 . + +*/ + +#include "mavl.h" + +int mavl_foreach_rl(struct mavlnode *n, int (*callback)(void *,void *),void *cbpriv) +{ + if (!n) + return 1; + if (!mavl_foreach_rl(n->right,callback,cbpriv)) + return 0; + if (!callback(cbpriv,n->data)) + return 0; + return mavl_foreach_rl(n->left,callback,cbpriv); +} + +void mavl_foreach(struct mavl *t, int (*callback)(void *,void *),void * cbpriv,int dir) +{ + if (dir) + mavl_foreach_lr(t->root,callback,cbpriv); + else + mavl_foreach_rl(t->root,callback,cbpriv); +} + diff --git a/src/capwap/mavl_foreach_lr.c b/src/capwap/mavl_foreach_lr.c new file mode 100644 index 00000000..cb1fbf5d --- /dev/null +++ b/src/capwap/mavl_foreach_lr.c @@ -0,0 +1,17 @@ +#include "mavl.h" + + + +int mavl_foreach_lr(struct mavlnode *n, int (*callback)(void *,void *),void *cbpriv) +{ + if (!n) + return 1; + if (!mavl_foreach_lr(n->left,callback,cbpriv)) + return 0; + if (!callback(cbpriv,n->data)) + return 0; + return mavl_foreach_lr(n->right,callback,cbpriv); + +} + + diff --git a/src/capwap/mavl_get_node.c b/src/capwap/mavl_get_node.c new file mode 100644 index 00000000..e9aa543f --- /dev/null +++ b/src/capwap/mavl_get_node.c @@ -0,0 +1,39 @@ +/* + 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 . + +*/ + + +#include + +#include "mavl.h" + + +struct mavlnode * mavl_get_node(struct mavl *t ,void *data) +{ + struct mavlnode *n = t->root; + while(n){ + int rc=t->cmp(data,n->data); + if (rc==0) + return n; + if (rc<0) + n=n->left; + else + n=n->right; + } + return NULL; +} +