X-Git-Url: https://git.syn-net.org/debian/?a=blobdiff_plain;f=src%2FroutingTree.hpp;h=9a55886a4d96305b3c8aee0c8b67b05cbecc83c6;hb=bd02a5f6be4815d46524d613f727199ca756c971;hp=3a9024d5cb371bb937b97d716e9486f6a1c24589;hpb=058ae090a970436caec3b3059e9e18b310dd6b0d;p=anytun.git diff --git a/src/routingTree.hpp b/src/routingTree.hpp index 3a9024d..9a55886 100644 --- a/src/routingTree.hpp +++ b/src/routingTree.hpp @@ -11,14 +11,15 @@ * tunneling and relaying of packets of any protocol. * * - * Copyright (C) 2007-2008 Othmar Gsenger, Erwin Nindl, + * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, * Christian Pointner * * This file is part of Anytun. * * Anytun is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 3 as - * published by the Free Software Foundation. + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * any later version. * * Anytun is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -29,35 +30,34 @@ * along with anytun. If not, see . */ -#ifndef __ROUTING_TREE_ -#define __ROUTING_TREE_ +#ifndef ANYTUN_routingTree_hpp_INCLUDED +#define ANYTUN_routingTree_hpp_INCLUDED #include "anytunError.h" -class RoutingTree { +class RoutingTree +{ public: template - static void walk(BinaryType bytes ,RoutingTreeNode * node,u_int8_t length,u_int16_t mux) - { - for (int i=0; i<(length/8); i++) - { - if (!node->nodes_[bytes[i]]) + static void walk(BinaryType bytes ,RoutingTreeNode* node,uint8_t length,uint16_t mux) { + for(int i=0; i<(length/8); i++) { + if(!node->nodes_[bytes[i]]) { node->nodes_[bytes[i]] = new RoutingTreeNode; + } node=node->nodes_[bytes[i]]; } - if (length%8) - { + if(length%8) { unsigned char idx=0xff; idx <<=8-(length%8); idx &= bytes[length/8]; unsigned char maxidx=0xff; maxidx>>=(length%8); maxidx|=idx; - for (unsigned char i=idx; i<=maxidx; i++) - { - if (!node->nodes_[i]) + for(unsigned char i=idx; i<=maxidx; i++) { + if(!node->nodes_[i]) { node->nodes_[i] = new RoutingTreeNode; + } node->nodes_[i]->valid_=true; node->nodes_[i]->mux_=mux; } @@ -66,25 +66,20 @@ public: node->mux_=mux; } } - + template - static u_int16_t find(BinaryType bytes ,RoutingTreeNode & root ) - { + static uint16_t find(BinaryType bytes ,RoutingTreeNode& root) { bool valid=0; - u_int16_t mux=0; - RoutingTreeNode * node = &root; - if (root.valid_) - { + uint16_t mux=0; + RoutingTreeNode* node = &root; + if(root.valid_) { mux=root.mux_; valid=1; } - for (size_t level=0;levelnodes_[bytes[level]]) - { + for(size_t level=0; levelnodes_[bytes[level]]) { node=node->nodes_[bytes[level]]; - if(node->valid_) - { + if(node->valid_) { mux=node->mux_; valid=1; } @@ -92,13 +87,12 @@ public: break; } } - if(!valid) + if(!valid) { AnytunError::throwErr() << "no route"; + } return mux; } }; #endif - -