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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? eclasst.cc

?? Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
?? CC
字號:
// -*- c-basic-offset: 4 -*-/* * eclasst.{cc,hh} -- tool definition of element classes * Eddie Kohler * * Copyright (c) 1999-2000 Massachusetts Institute of Technology * Copyright (c) 2000 Mazu Networks, Inc. * 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 Click 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 Click LICENSE file; the license in that file is * legally binding. */#include <click/config.h>#include "eclasst.hh"#include "routert.hh"#include "elementmap.hh"#include "processingt.hh"#include <click/straccum.hh>#include <click/confparse.hh>#include <click/variableenv.hh>#include <stdlib.h>static HashTable<String, int> base_type_map(-1);static Vector<ElementClassT *> base_types;typedef ElementTraits Traits;namespace {class TraitsElementClassT : public ElementClassT { public:    TraitsElementClassT(const String &, int component, ...);    bool primitive() const		{ return false; }    const ElementTraits *find_traits(ElementMap *emap) const;  private:    ElementTraits _the_traits;};TraitsElementClassT::TraitsElementClassT(const String &name, int component, ...)    : ElementClassT(name){    *(_the_traits.component(Traits::D_CLASS)) = name;    va_list val;    va_start(val, component);    while (component > Traits::D_NONE) {	const char *x = va_arg(val, const char *);	if (String *val = _the_traits.component(component))	    *val = x;	component = va_arg(val, int);    }    va_end(val);    use();			// make sure we hold onto this forever}const ElementTraits *TraitsElementClassT::find_traits(ElementMap *) const{    return &_the_traits;}}ElementClassT *ElementClassT::the_tunnel_type = new TraitsElementClassT("<tunnel>", Traits::D_PROCESSING, "a/a", Traits::D_FLOW_CODE, "x/y", 0);ElementClassT::ElementClassT(const String &name)    : _name(name),      _printable_name(name ? name : String::make_stable("<anonymous>")),      _use_count(0), _traits_version(-1){    //fprintf(stderr, "%p: %s\n", this, printable_name_c_str());}ElementClassT::~ElementClassT(){    //fprintf(stderr, "%p: ~%s\n", this, printable_name_c_str());}static ElementClassT *default_base_type_factory(const String &name){    return new ElementClassT(name);}static ElementClassT *(*base_type_factory)(const String &) = default_base_type_factory;void ElementClassT::set_base_type_factory(ElementClassT *(*f)(const String &)){    base_type_factory = f;}ElementClassT *ElementClassT::base_type(const String &name){    if (!name)	return 0;    int &i = base_type_map[name];    if (i < 0) {	i = base_types.size();	ElementClassT *t = base_type_factory(name);	assert(t && t->name() == name);	t->use();	base_types.push_back(t);    }    return base_types[i];}const ElementTraits *ElementClassT::find_traits(ElementMap *emap) const{    return &emap->traits(_name);}const String &ElementClassT::package() const{    return ElementMap::default_map()->package(traits());}StringElementClassT::documentation_url() const{    return ElementMap::default_map()->documentation_url(traits());}boolElementClassT::need_resolve() const{    return false;}ElementClassT *ElementClassT::resolve(int, int, Vector<String> &, ErrorHandler *, const LandmarkT &){    return this;}voidElementClassT::create_scope(const Vector<String> &, const VariableEnvironment &, VariableEnvironment &){}ElementT *ElementClassT::direct_expand_element(	ElementT *e, RouterT *tor, const String &prefix,	const VariableEnvironment &env, ErrorHandler *errh){    assert(!prefix || prefix.back() == '/');    RouterT *fromr = e->router();    String new_name = prefix + e->name();    String new_configuration = cp_expand(e->configuration(), env);    // check for tunnel    if (e->tunnel()) {	assert(this == ElementClassT::tunnel_type());	// common case -- expanding router into itself	if (fromr == tor && !prefix)	    return e;	// make the tunnel or tunnel pair	if (e->tunnel_output()) {	    tor->add_tunnel(new_name,			    prefix + e->tunnel_output()->name(),			    e->landmarkt(), errh);	    return tor->element(new_name);	} else	    return tor->get_element		(new_name, e->type(), new_configuration, e->landmarkt());    }    // otherwise, not tunnel    // check for common case -- expanding router into itself    if (fromr == tor && !prefix) {	e->set_configuration(new_configuration);	e->set_type(this);	return e;    }    // check for old element    if (ElementT *new_e = tor->element(new_name))	ElementT::redeclaration_error(errh, "element", new_name, e->landmark(), new_e->landmark());    // add element    return tor->get_element(new_name, this, new_configuration, e->landmarkt());}ElementT *ElementClassT::expand_element(	ElementT *e, RouterT *tor, const String &prefix,	const VariableEnvironment &env, ErrorHandler *errh){    ElementClassT *c = e->type();    if (c->primitive())	return c->direct_expand_element(e, tor, prefix, env, errh);    // if not direct expansion, do some more work    int inputs_used = e->ninputs();    int outputs_used = e->noutputs();    RouterT *fromr = e->router();    Vector<String> args;    String new_configuration = cp_expand(e->configuration(), env);    cp_argvec(new_configuration, args);    ElementClassT *found_c = c->resolve(inputs_used, outputs_used, args, errh, e->landmarkt());    if (!found_c) {		// destroy element	if (fromr == tor)	    e->simple_kill();	return 0;    }    return found_c->complex_expand_element(e, args, tor, prefix, env, errh);}ElementT *ElementClassT::complex_expand_element(	ElementT *e, const Vector<String> &,	RouterT *tor, const String &prefix,	const VariableEnvironment &env, ErrorHandler *errh){    return direct_expand_element(e, tor, prefix, env, errh);}StringElementClassT::unparse_signature(const String &name, const Vector<String> *formal_types, int nargs, int ninputs, int noutputs){    StringAccum sa;    sa << (name ? name : String("<anonymous>"));    if (formal_types && formal_types->size()) {	sa << '(';	for (int i = 0; i < formal_types->size(); i++) {	    if (i)		sa << ", ";	    if ((*formal_types)[i] == "")		sa << "<arg>";	    else if ((*formal_types)[i] == "__REST__")		sa << "...";	    else		sa << (*formal_types)[i];	}	sa << ')';    }    const char *pl_args = (nargs == 1 ? " argument, " : " arguments, ");    const char *pl_ins = (ninputs == 1 ? " input, " : " inputs, ");    const char *pl_outs = (noutputs == 1 ? " output" : " outputs");    sa << '[';    if (!formal_types && nargs > 0)	sa << nargs << pl_args;    sa << ninputs << pl_ins << noutputs << pl_outs;    sa << ']';    return sa.take_string();}SynonymElementClassT::SynonymElementClassT(const String &name, ElementClassT *eclass, RouterT *declaration_scope)    : ElementClassT(name), _eclass(eclass), _declaration_scope(declaration_scope){    assert(eclass);}boolSynonymElementClassT::need_resolve() const{    return true;}ElementClassT *SynonymElementClassT::resolve(int ninputs, int noutputs, Vector<String> &args, ErrorHandler *errh, const LandmarkT &landmark){    return _eclass->resolve(ninputs, noutputs, args, errh, landmark);}voidSynonymElementClassT::create_scope(const Vector<String> &, const VariableEnvironment &, VariableEnvironment &){    assert(0);}ElementT *SynonymElementClassT::complex_expand_element(	ElementT *, const Vector<String> &,	RouterT *, const String &, const VariableEnvironment &, ErrorHandler *){    assert(0);    return 0;}const ElementTraits *SynonymElementClassT::find_traits(ElementMap *emap) const{    return _eclass->find_traits(emap);}RouterT *SynonymElementClassT::cast_router(){    return _eclass->cast_router();}RouterT *ElementClassT::declaration_scope() const{    return 0;}RouterT *SynonymElementClassT::declaration_scope() const{    return _declaration_scope;}ElementClassT *ElementClassT::overload_type() const{    return 0;}StringElementClassT::unparse_signature() const{    return name() + "[...]";}voidElementClassT::collect_types(HashTable<ElementClassT *, int> &m) const{    m.set(const_cast<ElementClassT *>(this), 1);}voidSynonymElementClassT::collect_types(HashTable<ElementClassT *, int> &m) const{    HashTable<ElementClassT *, int>::iterator it = m.find_insert(const_cast<SynonymElementClassT *>(this), 0);    if (it != m.end() && it.value() == 0) {	it.value() = 1;	_eclass->collect_types(m);    }}voidElementClassT::collect_overloads(Vector<ElementClassT *> &v) const{    v.push_back(const_cast<ElementClassT *>(this));}voidSynonymElementClassT::collect_overloads(Vector<ElementClassT *> &v) const{    _eclass->collect_overloads(v);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区中文字幕在线| 91久久线看在观草草青青| 日韩小视频在线观看专区| 亚洲aaa精品| 欧美在线制服丝袜| 亚洲国产人成综合网站| 欧美剧情电影在线观看完整版免费励志电影 | 91在线国内视频| 国产精品白丝在线| 91蜜桃网址入口| 国产大陆亚洲精品国产| 久久精品一区八戒影视| 成人av一区二区三区| 亚洲欧美另类小说| 欧美人动与zoxxxx乱| 日本免费新一区视频| 精品久久一区二区| 成人av网站在线观看免费| 亚洲免费观看高清| 制服.丝袜.亚洲.中文.综合| 国内外成人在线| 中文字幕不卡在线观看| 欧美性色综合网| 久久精品久久精品| 国产精品久久久久久久久免费樱桃 | 婷婷久久综合九色国产成人| 日韩免费性生活视频播放| 成人午夜视频在线| 亚洲一区二区三区爽爽爽爽爽| 91精品国产麻豆国产自产在线| 国产剧情av麻豆香蕉精品| 亚洲欧美日韩系列| 欧美电影免费观看完整版| 国产成人h网站| 亚洲第一电影网| 久久久www免费人成精品| 日本精品视频一区二区| 韩国女主播一区| 亚洲男同性恋视频| 欧美日韩一级视频| 国产精品香蕉一区二区三区| 亚洲国产精品一区二区久久恐怖片| 精品日韩成人av| 欧美在线999| 国产黑丝在线一区二区三区| 午夜电影网一区| 中文字幕亚洲视频| 久久综合五月天婷婷伊人| 在线亚洲一区观看| 国产成人免费视频网站| 日本成人在线看| 亚洲精品自拍动漫在线| 国产性色一区二区| 欧美一级国产精品| 欧美三级韩国三级日本三斤| 不卡一区二区三区四区| 激情小说亚洲一区| 日日摸夜夜添夜夜添国产精品| 国产精品毛片无遮挡高清| 精品国产3级a| 日韩欧美一二三四区| 欧美乱妇15p| 在线免费不卡电影| 99视频有精品| 成人一道本在线| 黑人精品欧美一区二区蜜桃| 蜜桃久久av一区| 舔着乳尖日韩一区| 亚洲成人一区二区在线观看| 亚洲欧美日韩精品久久久久| 国产精品不卡在线| 日本不卡不码高清免费观看| 91热门视频在线观看| 国产乱码一区二区三区| 免费看欧美女人艹b| 婷婷开心久久网| 亚洲午夜精品网| 亚洲一区二区av在线| 亚洲人成网站精品片在线观看 | 亚洲综合成人在线| 最近日韩中文字幕| 成人欧美一区二区三区小说| 国产精品久久久久久户外露出| 国产日韩欧美精品一区| 国产人久久人人人人爽| 国产色91在线| 国产精品久久久久桃色tv| 国产精品国产精品国产专区不片| 亚洲欧洲色图综合| 亚洲免费观看视频| 一区二区三区不卡视频在线观看| 一区二区三区小说| 亚洲综合色婷婷| 日日欢夜夜爽一区| 蜜桃av一区二区| 国产在线日韩欧美| 成人毛片视频在线观看| 97精品久久久久中文字幕| 色综合天天性综合| 国产三级欧美三级| 国产毛片一区二区| 国产.欧美.日韩| www.在线成人| 欧美视频一区在线| 制服丝袜激情欧洲亚洲| 久久久综合网站| 国产精品久久久久影院老司| 亚洲精品国久久99热| 三级一区在线视频先锋 | 99视频一区二区三区| 欧美亚洲高清一区二区三区不卡| 欧美一区二区在线看| 精品国免费一区二区三区| 中文字幕精品—区二区四季| 亚洲一区视频在线| 国产精品自拍av| 91啪九色porn原创视频在线观看| 337p亚洲精品色噜噜狠狠| 久久久99精品久久| 亚洲一级片在线观看| 九九精品一区二区| 国产一区在线看| 亚洲欧洲成人av每日更新| 亚洲欧美色一区| 日本伊人色综合网| 成人在线综合网| 欧美性大战久久久久久久蜜臀| 日韩欧美国产高清| 亚洲乱码国产乱码精品精98午夜| 免费在线观看日韩欧美| 色综合久久综合| 26uuu国产在线精品一区二区| 亚洲美女屁股眼交| 国产精品综合久久| 欧美日韩大陆一区二区| 国产精品少妇自拍| 蜜桃av一区二区在线观看| 色欧美乱欧美15图片| 久久精品视频在线看| 午夜精品视频在线观看| 成人国产电影网| 日韩精品一区二区三区swag| 亚洲一区影音先锋| a亚洲天堂av| 国产亚洲短视频| 日本在线观看不卡视频| 色婷婷一区二区三区四区| 久久免费的精品国产v∧| 日韩不卡免费视频| 在线看日韩精品电影| 中文字幕高清不卡| 国产乱码精品一品二品| 日韩精品一区二区三区老鸭窝 | 日韩毛片在线免费观看| 国产一区不卡视频| 欧美tickling网站挠脚心| 亚洲18影院在线观看| 色综合久久久网| 国产精品护士白丝一区av| 国产一区二区看久久| 欧美一区二区性放荡片| 午夜精品福利在线| 欧美亚洲丝袜传媒另类| 一区二区三区在线观看国产| 97精品久久久午夜一区二区三区| 中文在线一区二区| 国产91富婆露脸刺激对白| 久久婷婷国产综合精品青草| 极品美女销魂一区二区三区免费| 欧美一激情一区二区三区| 日本女人一区二区三区| 在线播放亚洲一区| 日本大胆欧美人术艺术动态 | 99国内精品久久| 国产精品久久久久久久久晋中| 成人午夜伦理影院| 中文av字幕一区| 99久久久久久| 亚洲蜜臀av乱码久久精品蜜桃| 在线观看日韩av先锋影音电影院| 樱花影视一区二区| 欧美色精品在线视频| 日韩av不卡一区二区| 精品日韩一区二区| 懂色av一区二区三区蜜臀| 国产精品视频麻豆| 色成人在线视频| 亚洲福利电影网| 欧美一级一区二区| 国内国产精品久久| 国产精品九色蝌蚪自拍| 色婷婷久久99综合精品jk白丝 | 一区二区欧美国产| 欧美军同video69gay| 久久爱另类一区二区小说| 久久久五月婷婷| 91丨porny丨国产| 日韩电影在线免费| 国产女同互慰高潮91漫画| 在线观看国产一区二区|