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

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

?? xml2click.cc

?? Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
?? CC
?? 第 1 頁 / 共 2 頁
字號(hào):
// -*- c-basic-offset: 4 -*-/* * click2xml.cc -- translate Click configurations into and out of XML * Eddie Kohler * * Copyright (c) 2002 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 <click/pathvars.h>#include <expat.h>#include "routert.hh"#include "lexert.hh"#include "lexertinfo.hh"#include <click/error.hh>#include <click/driver.hh>#include <click/straccum.hh>#include <click/confparse.hh>#include <click/clp.h>#include "toolutils.hh"#include "processingt.hh"#include "elementmap.hh"#include "xml2click.hh"#define HELP_OPT		300#define VERSION_OPT		301#define CLICKPATH_OPT		302#define ROUTER_OPT		303#define EXPRESSION_OPT		304#define OUTPUT_OPT		305#define FLATTEN_OPT		306static const Clp_Option options[] = {    { "clickpath", 'C', CLICKPATH_OPT, Clp_ValString, 0 },    { "expression", 'e', EXPRESSION_OPT, Clp_ValString, 0 },    { "file", 'f', ROUTER_OPT, Clp_ValString, 0 },    { "flatten", 'F', FLATTEN_OPT, 0, Clp_Negate },    { "help", 0, HELP_OPT, 0, 0 },    { "output", 'o', OUTPUT_OPT, Clp_ValString, 0 },    { "version", 'v', VERSION_OPT, 0, 0 },};static const char *program_name;static ErrorHandler *xml_errh;static String xml_file;static bool flatten = false;static inline Stringxml_landmark(XML_Parser parser){    return xml_file + ":" + String(XML_GetCurrentLineNumber(parser));}static intxml_error(XML_Parser parser, const char *format, ...){    va_list val;    va_start(val, format);    xml_errh->xmessage(xml_landmark(parser), ErrorHandler::e_error, format, val);    va_end(val);    return -EINVAL;}CxConfig::CxConfig(CxConfig *enclosing, const String &xml_landmark)    : _enclosing(enclosing), _depth(enclosing ? enclosing->_depth + 1 : 0),      _filled(false),      _xml_landmark(xml_landmark),      _decl_ninputs(-1), _decl_noutputs(-1), _decl_nformals(-1),      _type(0), _router(0), _completing(false){}CxConfig::~CxConfig(){    if (_type)	_type->unuse();    if (_router)	_router->unuse();}StringCxConfig::readable_name() const{    return (_name ? _name : String("<anonymous>"));}enum CxState { CX_NONE, CX_CONFIGURATION, CX_ELEMENTCLASS, CX_COMPOUND,	       CX_IN_EMPTY, CX_ERROR };static Vector<CxState> xstates;static Vector<CxConfig *> xstack;static HashTable<String, int> class_id_map(-1);static Vector<CxConfig *> classes;static CxStatedo_element(XML_Parser parser, const XML_Char **attrs, ErrorHandler *errh){    String landmark = xml_landmark(parser);    if (xstates.back() != CX_CONFIGURATION && xstates.back() != CX_COMPOUND) {	if (xstates.back() != CX_ERROR)	    errh->lerror(landmark, "<element> tag outside of <configuration>");	return CX_ERROR;    }    CxElement e;    e.xml_landmark = landmark;    bool ok = true;    String file, line;    for (const XML_Char **a = attrs; *a; a += 2)	if (strcmp(a[0], "name") == 0) {	    if (!cp_is_click_id(a[1]))		errh->lerror(landmark, "'name' attribute not a Click identifier");	    e.name = a[1];	} else if (strcmp(a[0], "classname") == 0) {	    if (!cp_is_click_id(a[1]))		errh->lerror(landmark, "'classname' attribute not a Click identifier");	    e.class_name = a[1];	} else if (strcmp(a[0], "classid") == 0)	    e.class_id = a[1];	else if (strcmp(a[0], "config") == 0)	    e.config = a[1];	else if (strcmp(a[0], "file") == 0)	    file = a[1];	else if (strcmp(a[0], "line") == 0)	    line = a[1];	else if (strcmp(a[0], "ninputs") == 0) {	    if (!cp_integer(a[1], &e.ninputs))		errh->lerror(landmark, "'ninputs' attribute must be an integer");	} else if (strcmp(a[0], "noutputs") == 0) {	    if (!cp_integer(a[1], &e.noutputs))		errh->lerror(landmark, "'noutputs' attribute must be an integer");	}    if (file && line)	e.landmark = file + ":" + line;    else if (file)	e.landmark = file;    else if (line)	e.landmark = "line " + line;    if (e.class_name && e.class_id) {	errh->lerror(landmark, "conflicting attributes 'classname' and 'classid'");	e.class_name = String();    } else if (!e.class_name && !e.class_id) {	errh->lerror(landmark, "element declared without a class");	ok = false;    }    if (!e.name) {	errh->lerror(landmark, "element declared without a name");	ok = false;    }    if (ok)	xstack.back()->_elements.push_back(e);    return CX_IN_EMPTY;}static CxStatedo_connection(XML_Parser parser, const XML_Char **attrs, ErrorHandler *errh){    String landmark = xml_landmark(parser);    if (xstates.back() != CX_CONFIGURATION && xstates.back() != CX_COMPOUND) {	if (xstates.back() != CX_ERROR)	    errh->lerror(landmark, "<connection> tag meaningless outside of <configuration>");	return CX_ERROR;    }    CxConnection e;    e.xml_landmark = landmark;    bool ok = true;    for (const XML_Char **a = attrs; *a; a += 2)	if (strcmp(a[0], "from") == 0)	    e.from = a[1];	else if (strcmp(a[0], "to") == 0)	    e.to = a[1];	else if (strcmp(a[0], "fromport") == 0) {	    if (!cp_integer(a[1], &e.fromport) && e.fromport >= 0)		errh->lerror(landmark, "'fromport' should be port number");	} else if (strcmp(a[0], "toport") == 0) {	    if (!cp_integer(a[1], &e.toport) && e.toport >= 0)		errh->lerror(landmark, "'toport' should be port number");	}    if (!e.from || !e.to) {	errh->lerror(landmark, "connection lacks 'from' or 'to' attribute");	ok = false;    }    if (ok)	xstack.back()->_connections.push_back(e);    return CX_IN_EMPTY;}static CxStatedo_start_elementclass(XML_Parser parser, const XML_Char **attrs, ErrorHandler *errh){    String landmark = xml_landmark(parser);    if (xstates.back() != CX_CONFIGURATION && xstates.back() != CX_COMPOUND) {	if (xstates.back() != CX_ERROR)	    errh->lerror(landmark, "<elementclass> tag outside of <configuration>");	return CX_ERROR;    }    CxConfig *nc = new CxConfig(xstack.back(), landmark);    String file, line;    for (const XML_Char **a = attrs; *a; a += 2)	if (strcmp(a[0], "classname") == 0) {	    if (!cp_is_click_id(a[1]))		errh->lerror(landmark, "'classname' attribute not a valid Click identifier");	    nc->_name = a[1];	} else if (strcmp(a[0], "classid") == 0)	    nc->_id = a[1];	else if (strcmp(a[0], "file") == 0)	    file = a[1];	else if (strcmp(a[0], "line") == 0)	    line = a[1];    if (file && line)	nc->_landmark = file + ":" + line;    else if (file)	nc->_landmark = file;    else if (line)	nc->_landmark = "line " + line;    if (!nc->_id)	errh->lerror(landmark, "element class declared without an ID");    else	class_id_map.set(nc->_id, classes.size());    classes.push_back(nc);    xstack.push_back(nc);    return CX_ELEMENTCLASS;}static CxStatedo_synonym(XML_Parser parser, const XML_Char **attrs, ErrorHandler *errh){    String landmark = xml_landmark(parser);    if (xstates.back() != CX_ELEMENTCLASS) {	if (xstates.back() != CX_ERROR)	    errh->lerror(landmark, "<synonym> tag outside of <elementclass>");	return CX_ERROR;    } else if (xstack.back()->_filled) {	errh->lerror(landmark, "element class already defined");	return CX_ERROR;    }    CxConfig *cx = xstack.back();    for (const XML_Char **a = attrs; *a; a += 2)	if (strcmp(a[0], "classname") == 0) {	    if (!cp_is_click_id(a[1]))		errh->lerror(landmark, "'classname' attribute not a Click identifier");	    cx->_prev_class_name = a[1];	} else if (strcmp(a[0], "classid") == 0)	    cx->_prev_class_id = a[1];    if (cx->_prev_class_name && cx->_prev_class_id) {	errh->lerror(landmark, "conflicting attributes 'classname' and 'classid'");	cx->_prev_class_name = String();    } else if (!cx->_prev_class_name && !cx->_prev_class_id)	errh->lerror(landmark, "synonym refers to no other class");    cx->_filled = true;    cx->_is_synonym = true;    return CX_IN_EMPTY;}static CxStatedo_start_compound(XML_Parser parser, const XML_Char **attrs, ErrorHandler *errh){    String landmark = xml_landmark(parser);    if (xstates.back() != CX_ELEMENTCLASS) {	if (xstates.back() != CX_ERROR)	    errh->lerror(landmark, "<compound> tag outside of <elementclass>");	return CX_ERROR;    } else if (xstack.back()->_filled) {	errh->lerror(landmark, "element class already defined");	return CX_ERROR;    }    CxConfig *cx = xstack.back();    for (const XML_Char **a = attrs; *a; a += 2)	if (strcmp(a[0], "overloadclassname") == 0) {	    if (!cp_is_click_id(a[1]))		errh->lerror(landmark, "'overloadclassname' attribute not a valid Click identifier");	    cx->_prev_class_name = a[1];	} else if (strcmp(a[0], "overloadclassid") == 0)	    cx->_prev_class_id = a[1];	else if (strcmp(a[0], "ninputs") == 0) {	    if (!cp_integer(a[1], &cx->_decl_ninputs))		errh->lerror(landmark, "'ninputs' attribute must be an integer");	} else if (strcmp(a[0], "noutputs") == 0) {	    if (!cp_integer(a[1], &cx->_decl_noutputs))		errh->lerror(landmark, "'noutputs' attribute must be an integer");	} else if (strcmp(a[0], "nformals") == 0) {	    if (!cp_integer(a[1], &cx->_decl_nformals))		errh->lerror(landmark, "'noutputs' attribute must be an integer");	}    // XXX nformals etc.    if (cx->_prev_class_name && cx->_prev_class_id) {	errh->lerror(landmark, "conflicting attributes 'classname' and 'classid'");	cx->_prev_class_name = String();    }    cx->_filled = true;    cx->_is_synonym = false;    return CX_COMPOUND;}static CxStatedo_formal(XML_Parser parser, const XML_Char **attrs, ErrorHandler *errh){    String landmark = xml_landmark(parser);    if (xstates.back() != CX_COMPOUND) {	if (xstates.back() != CX_ERROR)	    errh->lerror(landmark, "<formal> tag meaningless outside of <compound>");	return CX_ERROR;    }    int number = -1;    String name, key;    for (const XML_Char **a = attrs; *a; a += 2)	if (strcmp(a[0], "name") == 0) {	    name = a[1];	    if (!cp_is_word(name))		errh->lerror(landmark, "'name' should be formal name");	} else if (strcmp(a[0], "number") == 0) {	    if (!cp_integer(a[1], &number) || number < 0)		errh->lerror(landmark, "'number' should be formal argument position");	} else if (strcmp(a[0], "key") == 0) {	    key = a[1];	    if (!cp_is_word(key))		errh->lerror(landmark, "'key' should be formal keyword");	}    while (xstack.back()->_formals.size() <= number) {	xstack.back()->_formals.push_back(String());	xstack.back()->_formal_types.push_back(String());    }    if (xstack.back()->_formals[number])	errh->lerror(landmark, "formal parameter %d already defined as '$%s'", number, xstack.back()->_formals[number].c_str());    else {	xstack.back()->_formals[number] = name;	xstack.back()->_formal_types[number] = key;    }    return CX_IN_EMPTY;}extern "C" {static voidstart_element_handler(void *v, const XML_Char *name, const XML_Char **attrs){    XML_Parser parser = (XML_Parser)v;    CxState next_state = CX_ERROR;    // handle XML namespaces

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
老司机精品视频线观看86| 亚洲欧美一区二区久久| 老司机精品视频在线| 日韩一区二区三区电影在线观看 | 国产乱码精品1区2区3区| 精品久久久久av影院| 国产精品中文字幕日韩精品| 国产精品色哟哟| 色婷婷综合久色| 青青草一区二区三区| 久久精品人人爽人人爽| 91视频国产资源| 日韩黄色免费网站| 久久久91精品国产一区二区精品| 成人午夜av影视| 亚洲最色的网站| 精品国内二区三区| 99天天综合性| 蜜桃视频一区二区三区在线观看| 久久久久国产精品免费免费搜索| www.色综合.com| 免费不卡在线观看| 中文字幕人成不卡一区| 91精品国产一区二区三区香蕉| 激情欧美日韩一区二区| 亚洲天天做日日做天天谢日日欢| 正在播放亚洲一区| 成人永久aaa| 无码av中文一区二区三区桃花岛| 久久久美女艺术照精彩视频福利播放| 99久久久久免费精品国产| 日本欧美肥老太交大片| 国产亚洲欧美一区在线观看| 欧美三区在线观看| 国产盗摄一区二区| 视频在线观看91| 国产精品国产三级国产aⅴ原创 | 波多野结衣在线aⅴ中文字幕不卡| 一区二区三区四区国产精品| 精品国产不卡一区二区三区| 欧美性生活久久| 高清视频一区二区| 免费高清成人在线| 国产精品99久久久久久久vr | 久久综合久久99| 欧美中文字幕久久| 东方aⅴ免费观看久久av| 午夜国产精品影院在线观看| 国产精品成人一区二区艾草| 精品国产乱码久久久久久闺蜜| 在线精品观看国产| eeuss鲁一区二区三区| 久久er99精品| 日韩中文字幕av电影| 1区2区3区精品视频| 久久色.com| 日韩美女视频一区二区在线观看| 在线观看日韩一区| 91社区在线播放| 成人午夜电影小说| 国产成人午夜片在线观看高清观看| 青青草成人在线观看| 午夜日韩在线观看| 亚洲一二三四久久| 一区二区三区不卡在线观看| 国产精品久久久久影视| 日本一区二区三级电影在线观看| 日韩女同互慰一区二区| 91精品国产综合久久香蕉的特点| 欧美日韩精品专区| 欧美日韩在线综合| 欧美日韩国产首页| 欧美三级资源在线| 欧美精品三级日韩久久| 欧美日高清视频| 欧美久久久久久久久久| 欧美日韩和欧美的一区二区| 欧美日韩一区成人| 欧美二区乱c少妇| 91精品国产欧美日韩| 91精品国产91热久久久做人人| 在线播放/欧美激情| 欧美一区二区三区日韩视频| 欧美一区二区三区在线观看视频| 91精品国产黑色紧身裤美女| 日韩一区二区三区在线观看| 欧美大胆人体bbbb| 久久人人爽人人爽| 中文字幕一区av| 一区二区成人在线视频| 午夜成人免费视频| 久久精品国产77777蜜臀| 国产精品中文字幕日韩精品| 成人h动漫精品| 欧美在线不卡视频| 日韩亚洲电影在线| 久久久av毛片精品| 亚洲精品久久嫩草网站秘色| 亚洲成av人综合在线观看| 另类小说欧美激情| 福利一区福利二区| 在线观看国产91| 日韩免费高清av| 国产精品灌醉下药二区| 亚洲一二三区视频在线观看| 精品一区二区三区在线观看| 国产盗摄视频一区二区三区| 91麻豆视频网站| 宅男在线国产精品| 久久久久久久av麻豆果冻| 亚洲女同女同女同女同女同69| 丝袜美腿高跟呻吟高潮一区| 国产综合久久久久久久久久久久| 91在线观看一区二区| 91精品国产色综合久久ai换脸| 久久免费看少妇高潮| 亚洲精品伦理在线| 狠狠色2019综合网| 欧美性色黄大片手机版| 久久久久久久久伊人| 亚洲国产乱码最新视频| 国产精品一级片在线观看| 欧美性猛交xxxx黑人交| 久久青草国产手机看片福利盒子| 亚洲精品va在线观看| 国内精品伊人久久久久av一坑| 在线精品视频一区二区三四| 久久久久久日产精品| 亚洲国产精品自拍| 波多野结衣一区二区三区| 在线电影院国产精品| 综合在线观看色| 国产精品自拍三区| 欧美日韩1区2区| 亚洲男同性恋视频| 国产成人精品综合在线观看 | 国产在线播精品第三| 欧美视频在线观看一区| 国产精品蜜臀在线观看| 美女视频免费一区| 欧美日韩一区国产| 亚洲色图视频网| 国产宾馆实践打屁股91| 精品噜噜噜噜久久久久久久久试看| 亚洲综合色噜噜狠狠| av中文字幕亚洲| 国产亚洲午夜高清国产拍精品| 免费成人在线影院| 欧美肥大bbwbbw高潮| 亚洲国产精品一区二区www在线| 久久精品欧美一区二区三区麻豆| 午夜精品久久久久影视| 91免费看视频| 最新高清无码专区| 成人av片在线观看| 国产女人水真多18毛片18精品视频 | 亚洲女同ⅹxx女同tv| 成人动漫中文字幕| 国产精品午夜久久| 成人综合在线网站| 欧美国产视频在线| 成人午夜激情影院| 国产日韩成人精品| 国产成人免费在线观看不卡| 久久久久久一级片| 国产精品一区免费视频| 久久精品人人爽人人爽| 粉嫩一区二区三区性色av| 欧美激情艳妇裸体舞| 成人免费视频视频| 日韩一区在线播放| 色综合久久88色综合天天免费| 亚洲三级免费观看| 欧美视频中文字幕| 日韩国产一区二| 精品欧美一区二区久久| 国产一区二区在线看| 国产日韩亚洲欧美综合| 不卡高清视频专区| 一区二区三区在线观看动漫| 欧美又粗又大又爽| 视频一区二区中文字幕| 日韩欧美一区二区视频| 国产美女视频91| 综合在线观看色| 欧美三级电影在线看| 美女视频黄频大全不卡视频在线播放| 欧美成人精品高清在线播放| 日韩精品在线看片z| 麻豆精品在线视频| 亚洲国产精品二十页| 91黄色免费观看| 麻豆视频一区二区| 中文在线一区二区| 欧美日韩性生活| 韩国av一区二区三区在线观看| 国产精品色一区二区三区| 欧美三片在线视频观看| 韩国女主播一区二区三区| 亚洲色图在线视频|