亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? real_trie.hh

?? BCAST Implementation for NS2
?? HH
字號:
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-// Copyright (c) 2001-2003 International Computer Science Institute//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the "Software")// to deal in the Software without restriction, subject to the conditions// listed in the XORP LICENSE file. These conditions include: you must// preserve this copyright notice, and you cannot mention the copyright// holders in advertising related to the Software without their permission.// The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This// notice is a summary of the XORP LICENSE file; the license in that file is// legally binding.// $XORP: xorp/bgp/harness/real_trie.hh,v 1.5 2003/09/30 03:07:55 pavlin Exp $#ifndef __BGP_HARNESS_REAL_TRIE_HH_#define __BGP_HARNESS_REAL_TRIE_HH_template <class A>class RealTrie {public:    RealTrie() : _debug(true), _pretty(true)  {    }    ~RealTrie();    bool empty() const;    typedef typename XorpCallback3<void, const UpdatePacket*,			  const IPNet<A>&,			  const TimeVal&>::RefPtr TreeWalker;    void tree_walk_table(const TreeWalker& tw) const {	A topbit;	++topbit;	topbit = topbit << A::addr_bitlen() - 1;	tree_walk_table(tw, &_head, A::ZERO(), 0, topbit);    };    bool insert(const IPNet<A>& net, TriePayload& p);    bool insert(A address, size_t mask_length, TriePayload& p);    void del() {	del(&_head);    }    bool del(const IPNet<A>& net);    bool del(A address, size_t mask_length);    TriePayload find(const IPNet<A>& net) const;    TriePayload find(A address, size_t mask_length) const;    TriePayload find(const A& address) const;private:    struct Tree {	Tree *ptrs[2];	TriePayload p;	Tree() {	    ptrs[0] = ptrs[1] = 0;	}    };    void tree_walk_table(const TreeWalker&, const Tree *ptr, 			 A address, size_t prefix_len, A orbit) const;    void del(Tree *ptr);    bool del(Tree *ptr, A address, size_t mask_length);        bool _debug;    bool _pretty;    Tree _head;};template <class A>RealTrie<A>::~RealTrie(){    del(&_head);}template <class A>boolRealTrie<A>::empty() const{    return (0 ==_head.ptrs[0]) && (0 ==_head.ptrs[1]);}template <class A>voidRealTrie<A>::tree_walk_table(const TreeWalker& tw, const Tree *ptr,			     A address, size_t prefix_len, A orbit) const{    debug_msg("Enter: %s/%d\n", address.str().c_str(),	      static_cast<uint32_t>(prefix_len));    if(0 == ptr) {	return;    }    TimeVal tv;    const UpdatePacket *update = ptr->p.get(tv);    if(0 != update) { 	debug_msg("Found %s/%d\n", address.str().c_str(),		  static_cast<uint32_t>(prefix_len));	tw->dispatch(update, IPNet<A>(address, prefix_len), tv);    }    ++prefix_len;    A save_orbit = orbit;    orbit = orbit >> 1;    tree_walk_table(tw, ptr->ptrs[0], address, prefix_len, orbit);    address = address | save_orbit;    tree_walk_table(tw, ptr->ptrs[1], address, prefix_len, orbit);}template <class A>boolRealTrie<A>::insert(const IPNet<A>& net, TriePayload& p){    return insert(net.masked_addr(), net.prefix_len(), p);}template <class A>boolRealTrie<A>::insert(A address, size_t mask_length, TriePayload& p){    debug_msg("%s/%d\n", address.str().c_str(),	      static_cast<uint32_t>(mask_length));#ifdef	PARANOIA    if(0 == p.get()) {	debug_msg("insert: Attempt to store an invalid entry\n");	return false;    }#endif    Tree *ptr = &_head;    for(size_t i = 0; i < mask_length; i++) {	int index;	if(address.bits(A::addr_bitlen() - 1, 1))	    index = 1;	else	    index = 0;	address = address << 1;	debug_msg("address %s prefix_len %d depth %d index %d\n",		  address.str().c_str(), static_cast<uint32_t>(mask_length), 		  static_cast<uint32_t>(i), index);		if(0 == ptr->ptrs[index]) {	    ptr->ptrs[index] = new Tree();	    if(0 == ptr->ptrs[index]) {		if(_debug)		    debug_msg("insert: new failed\n");		return false;	    }	}	ptr = ptr->ptrs[index];    }    if(0 != ptr->p.get()) {	debug_msg("insert: value already assigned\n");	return false;    }    ptr->p = p;    return true;}template <class A>voidRealTrie<A>::del(Tree *ptr){    if(0 == ptr)	return;    del(ptr->ptrs[0]);    delete ptr->ptrs[0];    ptr->ptrs[0] = 0;    del(ptr->ptrs[1]);    delete ptr->ptrs[1];    ptr->ptrs[1] = 0;}template <class A>boolRealTrie<A>::del(const IPNet<A>& net){    return del(net.masked_addr(), net.prefix_len());}template <class A>boolRealTrie<A>::del(A address, size_t mask_length){    return del(&_head, address, mask_length);}template <class A>boolRealTrie<A>::del(Tree *ptr, A address, size_t mask_length){    if((0 == ptr) && (0 != mask_length)) {	if(_debug)	    debug_msg("del:1 not in table\n");	return false;    }    int index;    if(address.bits(A::addr_bitlen() - 1, 1))	index = 1;    else	index = 0;    address = address << 1;    if(0 == mask_length) {	if(0 == ptr) {	    if(_debug)		debug_msg("del:1 zero pointer\n");	    return false;	}	if(0 == ptr->p.get()) {	    if(_debug)		debug_msg("del:2 not in table\n");	    return false;	}	ptr->p = TriePayload();	// Invalidate this entry.	return true;    }    if(0 == ptr) {	if(_debug)	    debug_msg("del:2 zero pointer\n");	return false;    }    Tree *next = ptr->ptrs[index];    bool status = del(next, address, --mask_length);    if(0 == next) {	if(_debug)	    debug_msg("del: no next pointer\n");	return false;    }    if((0 == next->p.get()) && (0 == next->ptrs[0]) &&       (0 == next->ptrs[1])) {	delete ptr->ptrs[index];	ptr->ptrs[index] = 0;    }    return status;}template <class A>TriePayload RealTrie<A>::find(const IPNet<A>& net) const{    return find(net.masked_addr(), net.prefix_len());}template <class A>TriePayload RealTrie<A>::find(A address, size_t mask_length) const{    const Tree *ptr = &_head;    Tree *next;    debug_msg("find: %s/%d\n", address.str().c_str(), 	      static_cast<uint32_t>(mask_length));    // The loop should not require bounding. Defensive    for(size_t i = 0; i <= A::addr_bitlen(); i++) {	int index;	if(address.bits(A::addr_bitlen() - 1, 1))	    index = 1;	else	    index = 0;	address = address << 1;	if(_pretty)	    debug_msg("%d", index);	TriePayload p = ptr->p;	if(mask_length == i)	    return p;	if(0 == (next = ptr->ptrs[index])) {	    if(_pretty)		debug_msg("\n");	    return TriePayload();	}	ptr = next;    }    debug_msg("find: should never happen\n");    return TriePayload();}#endif // __BGP_HARNESS_REAL_TRIE_HH_

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男女毛片无遮挡| 韩国精品主播一区二区在线观看| 亚洲第一综合色| 成人性视频网站| 欧美一区二区在线观看| 麻豆精品精品国产自在97香蕉| 床上的激情91.| 欧美一区二区久久久| 亚洲精品五月天| 国产99久久久国产精品免费看| 日韩一卡二卡三卡| 亚洲电影激情视频网站| 色综合天天综合在线视频| 久久久精品综合| 男男视频亚洲欧美| 欧美日韩另类一区| 一区二区久久久| 91免费看`日韩一区二区| 国产婷婷色一区二区三区 | 开心九九激情九九欧美日韩精美视频电影 | 国产日韩欧美制服另类| 亚洲123区在线观看| 91麻豆福利精品推荐| 中文字幕成人在线观看| 国产精品中文欧美| 久久综合久久综合久久| 久久国产夜色精品鲁鲁99| 精品视频1区2区| 亚洲1区2区3区4区| 欧美日韩精品一区二区三区四区| 国产经典欧美精品| 欧美精品一区二区三区蜜桃| 青草av.久久免费一区| 欧美丰满少妇xxxxx高潮对白| 亚州成人在线电影| 欧美日韩高清一区二区三区| 午夜精品视频一区| 91精品免费观看| 久久国内精品自在自线400部| 欧美大片拔萝卜| 国产一区二区中文字幕| 日本一区二区综合亚洲| 成人h动漫精品一区二区| 国产精品久久毛片| 色哟哟欧美精品| 亚洲成人你懂的| 欧美成人性战久久| 91麻豆精品国产自产在线| 天天av天天翘天天综合网色鬼国产 | 一区二区三区日韩| 欧美色窝79yyyycom| 日本不卡在线视频| 久久精品男人的天堂| 成人免费高清在线| 亚洲国产三级在线| 欧美tk—视频vk| 波多野结衣在线一区| 一区二区三区在线播| 日韩一卡二卡三卡国产欧美| 国产风韵犹存在线视精品| 国产精品自拍网站| 亚洲女与黑人做爰| 91精品国产综合久久久蜜臀图片| 国产精品一品二品| 亚洲夂夂婷婷色拍ww47| 欧美α欧美αv大片| 成人av免费在线观看| 爽爽淫人综合网网站| 欧美激情一区二区三区不卡| 在线观看精品一区| 国产一区二区按摩在线观看| 亚洲欧美偷拍三级| 欧美tk丨vk视频| 欧美中文一区二区三区| 狠狠色丁香久久婷婷综合_中| 亚洲人午夜精品天堂一二香蕉| 欧美丰满高潮xxxx喷水动漫| 在线影院国内精品| 精品一区二区三区在线播放| 亚洲日韩欧美一区二区在线| 欧美一区二区三区视频免费播放| 国产91精品在线观看| 日本三级亚洲精品| 亚洲欧美经典视频| 国产视频亚洲色图| 欧美一区二区在线观看| 日本二三区不卡| 风间由美一区二区三区在线观看| 日韩中文欧美在线| 亚洲精品一卡二卡| 国产精品乱码人人做人人爱 | 麻豆91小视频| 亚洲一二三四久久| 国产精品电影一区二区三区| 日韩欧美视频一区| 7777精品伊人久久久大香线蕉 | 中文字幕永久在线不卡| 337p粉嫩大胆噜噜噜噜噜91av| 精品视频一区二区三区免费| 北条麻妃国产九九精品视频| 极品尤物av久久免费看| 日本美女一区二区三区视频| 亚洲成av人片一区二区三区| 亚洲男人天堂av| 国产精品福利电影一区二区三区四区| 日韩午夜电影av| 91精品国产aⅴ一区二区| 在线亚洲一区观看| 色噜噜偷拍精品综合在线| 国产99精品国产| 国产成人av电影在线| 国产乱一区二区| 国产精品亚洲成人| 国内精品久久久久影院薰衣草| 久久国产婷婷国产香蕉| 麻豆成人免费电影| 黄色日韩三级电影| 国产在线视频一区二区三区| 九色综合国产一区二区三区| 久久99国产精品久久99果冻传媒| 麻豆精品一区二区av白丝在线 | 婷婷夜色潮精品综合在线| 午夜欧美大尺度福利影院在线看| 亚洲高清视频的网址| 亚洲高清免费一级二级三级| 香蕉影视欧美成人| 蜜桃视频一区二区三区| 老汉av免费一区二区三区 | 中文字幕第一区综合| 成人免费在线视频| 午夜视频在线观看一区二区三区 | 国产1区2区3区精品美女| 成人av影视在线观看| 91国产丝袜在线播放| 欧美精品亚洲一区二区在线播放| 日韩一本二本av| 国产日韩精品视频一区| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲国产欧美一区二区三区丁香婷| 婷婷国产v国产偷v亚洲高清| 精品一区二区久久| 91一区在线观看| 欧美精选午夜久久久乱码6080| 精品免费日韩av| 最新高清无码专区| 日韩精品一二三区| 成人国产一区二区三区精品| 欧美视频第二页| 26uuu国产电影一区二区| 国产免费观看久久| 天堂一区二区在线| 粉嫩av一区二区三区在线播放| 在线免费精品视频| 精品裸体舞一区二区三区| 亚洲视频在线观看三级| 日本不卡中文字幕| 91天堂素人约啪| 日韩一区二区三区视频在线| 亚洲欧美在线视频观看| 日韩在线卡一卡二| 91免费视频观看| 久久亚洲二区三区| 午夜欧美一区二区三区在线播放 | 久久国产生活片100| 99riav一区二区三区| 精品少妇一区二区三区在线播放| 中文字幕亚洲欧美在线不卡| 久久精品二区亚洲w码| 91美女视频网站| 国产午夜精品一区二区三区嫩草| 亚洲图片欧美色图| 粉嫩av亚洲一区二区图片| 欧美一区二区三区视频在线| 亚洲另类春色国产| 成人激情黄色小说| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 在线电影国产精品| 中文字幕综合网| 国产大片一区二区| 精品久久久久久久久久久久久久久久久 | 国产三级精品三级| 国产综合久久久久影院| 欧美日韩国产精品自在自线| 亚洲乱码精品一二三四区日韩在线 | 99精品桃花视频在线观看| 久久一区二区三区四区| 蜜臀国产一区二区三区在线播放| 色悠悠亚洲一区二区| 中文在线一区二区| 国产一区二区在线观看视频| 日韩午夜激情免费电影| 日韩精品久久理论片| 欧美日韩国产电影| 舔着乳尖日韩一区| 精品污污网站免费看| 亚洲成在人线免费| 欧美人体做爰大胆视频| 一区二区高清在线| 欧美日韩三级在线| 亚洲国产综合91精品麻豆|