X-Git-Url: https://git.syn-net.org/debian/?p=anytun.git;a=blobdiff_plain;f=src%2FroutingTree.hpp;h=9a55886a4d96305b3c8aee0c8b67b05cbecc83c6;hp=89b7c18b4a69fd1e0ac9540ca7f9917ed9aebf40;hb=ef0cacf2508418915d3f64b04003be3c13fed3cc;hpb=ece844834d2cecc028ce81ca283f5d441088580e diff --git a/src/routingTree.hpp b/src/routingTree.hpp index 89b7c18..9a55886 100644 --- a/src/routingTree.hpp +++ b/src/routingTree.hpp @@ -11,7 +11,7 @@ * tunneling and relaying of packets of any protocol. * * - * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, + * Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, * Christian Pointner * * This file is part of Anytun. @@ -35,30 +35,29 @@ #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; } @@ -67,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; } @@ -93,8 +87,9 @@ public: break; } } - if(!valid) + if(!valid) { AnytunError::throwErr() << "no route"; + } return mux; }