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

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

?? mqlstate.cpp

?? 件主要用于幫助計算機愛好者學習蟻群算法時做有關蟻群算法的試驗。蟻群算法作為一種優秀的新興的算法
?? CPP
字號:
/******************************************************************************Meridian prototype distributionCopyright (C) 2005 Bernard WongThis program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of the License, or (at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.The copyright owner can be contacted by e-mail at bwong@cs.cornell.edu*******************************************************************************/using namespace std;#include <assert.h>#include "MQLState.h"//#define MAX_POOL_SIZE 10//extern void flatten_ast(vector<ASTNode*>* list, ASTNode* tree);extern int updateBasicType(ASTNode* a, const ASTNode* b);int VarTable::remove_var_map_context() {		v_map.clear();	return 0;}int VarTable::remove_AST_context() {	for (u_int i = 0; i < v_stack_ast.size(); i++) {		v_ps->delete_ast(v_stack_ast[i]);	}	v_stack_ast.clear();	return 0;	}int VarTable::remove_string_context() {	for (u_int i = 0; i < v_stack_string.size(); i++) {			v_ps->delete_string(v_stack_string[i]);	}	v_stack_string.clear();	return 0;	}int VarTable::remove_vector_context() {	for (u_int i = 0; i < v_stack_vector.size(); i++) {		v_ps->delete_vector(v_stack_vector[i]);	}	v_stack_vector.clear();	return 0;	}int VarTable::remove_map_context() {	for (u_int i = 0; i < v_stack_map.size(); i++) {		v_ps->delete_map(v_stack_map[i]);				}	v_stack_map.clear();	return 0;	}bool VarTable::local_exists(const map<const string, ASTNode*>* in_map, 		const string& in_string) {	ASTNode* temp;	if (local_lookup(in_map, in_string, &temp) == -1) {		return false;	}	return true;}int VarTable::local_lookup(const map<const string, ASTNode*>* in_map,		const string& in_string, ASTNode** in_type) {	map<string, ASTNode*>::const_iterator it = in_map->find(in_string);	if (it != in_map->end()) {		*in_type = it->second;		return 0; 	}	return -1;	}	int VarTable::lookup(const string& in_string, ASTNode** in_type) {	if (local_lookup(&v_map, in_string, in_type) != -1) {							return 0;		}	if (prev_var_table) {		return prev_var_table->lookup(in_string, in_type);	}	return -1;}int VarTable::insert(const string& in_string, ASTNode* in_type) {	if (!local_exists(&v_map, in_string)) {		v_map[in_string] = in_type;		return 0;	}	return -1;}int VarTable::local_remove(const string& in_string) {	v_map.erase(in_string);	return 0;}int VarTable::update(const string& in_string, const ASTNode* in_var) {	ASTNode* retVar = NULL; 	if (lookup(in_string, &retVar) == -1) {		DSL_ERROR("Variable name %s not found\n", in_string.c_str());		return -1;	}	return updateADT(retVar, in_var);}ASTNode* VarTable::new_stack_ast() {	ASTNode* retAst = v_ps->new_ast();	if (retAst == NULL) {		return NULL;		}	v_stack_ast.push_back(retAst);	return retAst;}string* VarTable::new_stack_string() {	string* retString = v_ps->new_string();	if (retString == NULL) {		return NULL;		}	v_stack_string.push_back(retString);	return retString;}vector<ASTNode*>* VarTable::new_stack_vector() {	vector<ASTNode*>* retVector = v_ps->new_vector();	if (retVector == NULL) {		return NULL;		}	v_stack_vector.push_back(retVector);		return retVector;}map<string, ASTNode*>* VarTable::new_stack_map() {	map<string, ASTNode*>* retMap = v_ps->new_map();	if (retMap == NULL) {		return NULL;		}	v_stack_map.push_back(retMap);		return retMap;}ASTNode* VarTable::create_basic_type(const ASTType in_type) {	ASTNode* retVar = new_stack_ast();	if (retVar == NULL) {		return NULL;		}	switch((retVar->type = in_type)){	case INT_TYPE:		retVar->val.i_val = 0;		break;	case DOUBLE_TYPE:		retVar->val.d_val = 0.0;		break;	case STRING_TYPE:		retVar->val.s_val = new_stack_string();		break;	case VOID_TYPE:		DSL_ERROR("Cannot create void variable\n");		return NULL;	default:		DSL_ERROR(			"Unexpected type %d in definition (parser error)\n", retVar->type);		return NULL;				}	return retVar;}ASTNode* VarTable::ASTCreate(const ASTType in_type, 		const string* adt_name, const ASTType array_type, int array_size) {	ASTNode* retVar = NULL;	if (in_type == ADT_TYPE) {		if (!adt_name) {			DSL_ERROR(				"ADT_TYPE specified without ADT name (parser error)\n");			return NULL;		}		//	Lookup ADT		ASTNode* adtNode = NULL;		if (lookup(*(adt_name), &adtNode) == -1				|| adtNode->type != ADT_TYPE) {			DSL_ERROR("Cannot find specified ADT\n");			return NULL;		}		// Create variables for its members		if (adtNode->val.adt_val.adt_param->type != SEP_TYPE) {			DSL_ERROR("ADT contains no entries\n");			return NULL;					}				retVar = new_stack_ast();		if (retVar == NULL) {			return NULL;			}		retVar->type = VAR_ADT_TYPE;		//	Type names should have global scope in current system		//retVar->val.adt_val.adt_type_name = adt_name;		retVar->val.adt_val.adt_type_name 			= adtNode->val.adt_val.adt_type_name;		retVar->val.adt_val.adt_map = new_stack_map();		vector<ASTNode*>* tmpList 			= adtNode->val.adt_val.adt_param->val.p_val.p_vector;				for (u_int i = 0; i < tmpList->size(); i++) {			ASTNode* field_node = (*tmpList)[i];			int tmp_array_size = 0;			if (field_node->val.v_val.v_type == ARRAY_TYPE) {				if (field_node->val.v_val.v_array_size->type != INT_TYPE) {					DSL_ERROR("Arrays in structs can only "						"have integer literals as sizes");					return NULL;				}				tmp_array_size = field_node->val.v_val.v_array_size->val.i_val;			}			ASTNode* tmpNode = 				ASTCreate(field_node->val.v_val.v_type,					field_node->val.v_val.v_adt_name,					field_node->val.v_val.v_array_type,					//field_node->val.v_val.v_array_size);					tmp_array_size);			if (tmpNode == NULL) {				DSL_ERROR("Create fields failed\n");				return NULL;			}			(*(retVar->val.adt_val.adt_map))				[*(field_node->val.v_val.v_name)] = tmpNode;		}			} else if (in_type == ARRAY_TYPE) {		if (array_size < 0) {			DSL_ERROR("Array size must be >= 0\n");			return NULL;			}		const string* real_adt_name = NULL;		if (array_type == ADT_TYPE) {			//	Lookup ADT			ASTNode* adtNode = NULL;			if (lookup(*(adt_name), &adtNode) == -1					|| adtNode->type != ADT_TYPE) {				DSL_ERROR("Cannot find specified ADT\n");				return NULL;			}			real_adt_name = adtNode->val.adt_val.adt_type_name;		}					retVar = new_stack_ast();		if (retVar == NULL) {			return NULL;			}		retVar->type = ARRAY_TYPE;		//	Type names should have global scope in current system		retVar->val.a_val.a_type = array_type;		//retVar->val.a_val.a_adt_name = adt_name;		retVar->val.a_val.a_adt_name = real_adt_name;		retVar->val.a_val.a_var_table = this;		retVar->val.a_val.a_vector = new_stack_vector();			for (int i = 0; i < array_size; i++) {			ASTNode* tmpAST = ASTCreate(array_type, adt_name, EMPTY_TYPE, 0);			if (tmpAST == NULL) {				return NULL;				//return tmpAST;			}							retVar->val.a_val.a_vector->push_back(tmpAST);		}			} else {	 	retVar = create_basic_type(in_type);	}	return retVar;}int VarTable::updateADT(ASTNode* retVar, const ASTNode* in_var) {		if (retVar->type == VAR_ADT_TYPE && in_var->type == SEP_TYPE) {		// Handling initialization of ADT with parameter list		ASTNode* adt_name = NULL;		if (lookup(				*(retVar->val.adt_val.adt_type_name), &adt_name) == -1) {			DSL_ERROR("Struct definition not found (parser error)\n");			return -1;						}		if (adt_name->val.adt_val.adt_param->type != SEP_TYPE) {			DSL_ERROR(				"Struct definition contains no entries (parser error)\n");			return -1;											}		vector<ASTNode*>* tmpList 			= adt_name->val.adt_val.adt_param->val.p_val.p_vector;		vector<ASTNode*>* paramListVector = in_var->val.p_val.p_vector;		if (tmpList->size() != paramListVector->size()) {			DSL_ERROR("Initiation list of incorrect size/type\n");			return -1;		}						for (u_int i = 0; i < tmpList->size(); i++) {								string* tmpString = (*tmpList)[i]->val.v_val.v_name;			map<string, ASTNode*>::iterator findItA = 				retVar->val.adt_val.adt_map->find(*tmpString);			if (findItA	== retVar->val.adt_val.adt_map->end()) {				DSL_ERROR(					"Struct definition inconsistent (parser error)\n");				return -1;										}			//printf("Param type is %d\n", (*paramListVector)[i]->type);					if (updateADT(					findItA->second, (*paramListVector)[i]) == -1) {				return -1;			}				}		return 0;	} 		if (retVar->type == ARRAY_TYPE && in_var->type == SEP_TYPE) {		retVar->val.a_val.a_vector->clear();		vector<ASTNode*>* paramListVector = in_var->val.p_val.p_vector;		for (u_int i = 0; i < paramListVector->size(); i++) {			ASTNode* newASTNode = 				retVar->val.a_val.a_var_table->ASTCreate(					retVar->val.a_val.a_type, retVar->val.a_val.a_adt_name, 					EMPTY_TYPE, 0);			if (newASTNode == NULL) {				return -1;							}			if (updateADT(newASTNode, (*paramListVector)[i]) == -1) {				DSL_ERROR("Array entry assign failed\n");				return -1;				}			retVar->val.a_val.a_vector->push_back(newASTNode);		}		return 0;	}		if (in_var->type != retVar->type) {		DSL_ERROR("Assigning incompatible types %d from %d\n",			retVar->type, in_var->type);				return -1;	}	//	Not a evaluation list initiation	switch(retVar->type) {		case INT_TYPE:		case DOUBLE_TYPE:		case STRING_TYPE:			if (updateBasicType(retVar, in_var) == -1) {				return -1;					}			break;		case ARRAY_TYPE: {			if (retVar->val.a_val.a_type != in_var->val.a_val.a_type) {				DSL_ERROR("Assigning incompatible types %d from %d\n",					retVar->val.a_val.a_type, in_var->val.a_val.a_type);				return -1;			}						if (retVar->val.a_val.a_type == ADT_TYPE) {				if (*(retVar->val.a_val.a_adt_name) != 						*(in_var->val.a_val.a_adt_name)) {					DSL_ERROR("Assigning incompatible types 1\n");					return -1;				}			}			retVar->val.a_val.a_vector->clear();			for (u_int i = 0; i < (in_var->val.a_val.a_vector->size()); i++) {				// NOTE: Arrays cannot store another array directly				// Can be done by wrapping it with a struct				ASTNode* newASTNode = retVar->val.a_val.a_var_table->ASTCreate(						retVar->val.a_val.a_type, retVar->val.a_val.a_adt_name,						EMPTY_TYPE, 0);				if (newASTNode == NULL) {					DSL_ERROR("ASTCreate failed\n");					return -1;				}				ASTNode* insertNode = (*(in_var->val.a_val.a_vector))[i];				if (updateADT(newASTNode, insertNode) == -1) {					DSL_ERROR("Array entry assign failed\n");					return -1;					}				//printf("Pass\n");				retVar->val.a_val.a_vector->push_back(newASTNode);							}			break;		}		case VAR_ADT_TYPE: {						//retVar->val.adt_val.adt_name = adt_name;			// Create variables for its members			if (*(retVar->val.adt_val.adt_type_name) !=					*(in_var->val.adt_val.adt_type_name)) {				DSL_ERROR("Incorrect struct type assignment\n");				return -1;			}			ASTNode* adt_name = NULL;			if (lookup(					*(retVar->val.adt_val.adt_type_name), &adt_name) == -1) {				DSL_ERROR("Struct definition not found (parser error)\n");				return -1;							}			if (adt_name->val.adt_val.adt_param->type != SEP_TYPE) {				DSL_ERROR(					"Struct definition contains no entries (parser error)\n");				return -1;												}			vector<ASTNode*>* tmpList 				= adt_name->val.adt_val.adt_param->val.p_val.p_vector;						for (u_int i = 0; i < tmpList->size(); i++) {				string* tmpString = (*tmpList)[i]->val.v_val.v_name;				//printf("Assign field name %s\n", tmpString->c_str());				map<string, ASTNode*>::iterator findItA = 					retVar->val.adt_val.adt_map->find(*tmpString);				map<string, ASTNode*>::iterator findItB = 					in_var->val.adt_val.adt_map->find(*tmpString);				if (findItA	== retVar->val.adt_val.adt_map->end() ||						findItB	== in_var->val.adt_val.adt_map->end() ) {					DSL_ERROR(						"Struct definition inconsistent (parser error)\n");					return -1;											}				if (updateADT(findItA->second, findItB->second) == -1) {					return -1;				}							}			break;		}		default:			DSL_ERROR("Unexpected type encountered (parser error)\n");			return -1;				}	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草国产成人99久久| 国产不卡在线视频| 国产91色综合久久免费分享| 91福利视频久久久久| 久久精品一区四区| 日韩va欧美va亚洲va久久| 972aa.com艺术欧美| 久久影视一区二区| 日韩福利视频导航| 欧美在线观看一区二区| 中文字幕亚洲不卡| 国产成人在线色| 欧美va亚洲va国产综合| 丝袜美腿成人在线| 欧美日韩国产综合视频在线观看| 国产精品无人区| 国产在线不卡一卡二卡三卡四卡| 欧美日韩一区二区三区四区| 亚洲精品成人少妇| 成人动漫在线一区| 中文字幕乱码一区二区免费| 久久99国产精品麻豆| 日韩一区二区三区在线视频| 天天色综合天天| 欧美日韩在线电影| 亚洲一二三区在线观看| 色诱亚洲精品久久久久久| 国产精品欧美一区喷水| 国产成人在线观看免费网站| 国产亚洲精品7777| 国产激情一区二区三区| 精品国产乱码久久久久久老虎 | 久久天堂av综合合色蜜桃网| 日本一不卡视频| 日韩视频一区二区三区| 免费成人深夜小野草| 日韩欧美国产一区二区在线播放| 天天做天天摸天天爽国产一区 | 日韩免费观看高清完整版 | 日日夜夜一区二区| 51精品视频一区二区三区| 日韩福利电影在线观看| 日韩精品一区二区在线观看| 国产专区欧美精品| 日本一二三四高清不卡| 91女神在线视频| 亚洲一区二区视频在线观看| 欧美日韩二区三区| 九色|91porny| 中文字幕 久热精品 视频在线| 国产91精品一区二区| 1024成人网色www| 欧美午夜精品理论片a级按摩| 亚洲午夜激情网站| 日韩三级中文字幕| 成人一道本在线| 亚洲高清不卡在线观看| 欧美一级片在线| 福利视频网站一区二区三区| 亚洲精品中文在线| 欧美一级欧美三级| 成人av免费在线播放| 亚洲电影一区二区三区| 精品久久久网站| 99久久伊人网影院| 日本va欧美va精品| 中文字幕不卡三区| 欧美日韩一区二区欧美激情| 韩国欧美一区二区| 国产精品成人免费精品自在线观看| 91行情网站电视在线观看高清版| 日本不卡123| 一区免费观看视频| 欧美成人一区二区三区| 99久久国产免费看| 色综合色综合色综合色综合色综合| 日韩va欧美va亚洲va久久| 亚洲国产精品激情在线观看| 欧美日韩国产综合一区二区| 成人免费福利片| 美女免费视频一区二区| 亚洲欧洲成人自拍| 精品久久人人做人人爰| 欧美亚洲综合久久| 成人av高清在线| 精品亚洲国内自在自线福利| 一区二区三区日韩精品视频| 久久亚洲欧美国产精品乐播| 欧美人xxxx| 一本高清dvd不卡在线观看 | 久久综合久久综合久久| 欧美三区在线观看| 成人综合婷婷国产精品久久蜜臀 | 中文字幕一区二区视频| 精品久久五月天| 欧美一区二区人人喊爽| 欧美亚洲国产一卡| 99久久99久久精品免费看蜜桃| 精品一区二区三区免费播放| 视频一区欧美日韩| 亚洲精品菠萝久久久久久久| 国产精品女人毛片| 三级一区在线视频先锋 | 日韩精品一区二区三区蜜臀| 欧美色欧美亚洲另类二区| jlzzjlzz欧美大全| 国产盗摄女厕一区二区三区| 黑人巨大精品欧美一区| 精品影院一区二区久久久| 日韩精品一级二级| 日本欧美肥老太交大片| 日本欧美肥老太交大片| 丝瓜av网站精品一区二区| 亚洲电影你懂得| 亚洲国产一区二区视频| 一区二区三区av电影| 一区二区三区中文字幕精品精品 | 91美女在线观看| 97久久人人超碰| 色系网站成人免费| 91视频xxxx| 欧美视频完全免费看| 欧美精品vⅰdeose4hd| 91精品国产入口| 欧美大片在线观看一区二区| 久久伊人蜜桃av一区二区| 国产欧美日韩在线| 中文字幕一区二区三区在线播放 | 久久午夜国产精品| 国产亚洲欧美日韩俺去了| 国产精品日韩成人| 亚洲免费观看高清完整版在线 | 欧美日韩免费在线视频| 欧美人牲a欧美精品| 日韩一区二区三区视频在线| 精品精品国产高清a毛片牛牛| 久久久久久久久久久久久夜| 国产精品毛片大码女人| 一区二区三区影院| 人人爽香蕉精品| 国产精品一品二品| 色综合久久久久综合| 666欧美在线视频| 国产视频一区二区在线观看| 亚洲情趣在线观看| 日韩和欧美的一区| 国产成人免费在线观看不卡| 91麻豆精品视频| 日韩欧美中文一区二区| 中文在线免费一区三区高中清不卡| 亚洲精品自拍动漫在线| 极品少妇xxxx偷拍精品少妇| 99久精品国产| 日韩欧美国产高清| 亚洲精品欧美在线| 韩国女主播一区二区三区| 99精品偷自拍| 精品国产sm最大网站免费看 | 久久久精品综合| 亚洲综合激情网| 国产激情一区二区三区桃花岛亚洲| 色婷婷狠狠综合| 久久久久亚洲蜜桃| 水野朝阳av一区二区三区| 日韩精品一区二区三区在线播放| 亚洲国产高清在线观看视频| 天天亚洲美女在线视频| 不卡的av电影在线观看| 日韩欧美亚洲另类制服综合在线| 亚洲欧美在线aaa| 精品一区二区综合| 欧美日韩国产天堂| 亚洲人一二三区| 国产美女一区二区三区| 宅男噜噜噜66一区二区66| 亚洲品质自拍视频| 国产91精品免费| 精品国产自在久精品国产| 偷拍亚洲欧洲综合| 欧美在线视频全部完| 一区在线观看视频| 成人福利视频网站| 国产日韩欧美高清在线| 美女国产一区二区| 欧美久久久久久蜜桃| 一区二区三区欧美在线观看| 成人ar影院免费观看视频| 久久精品视频在线免费观看| 美日韩一区二区三区| 91精品国产麻豆国产自产在线 | 欧美日韩国产影片| 亚洲免费资源在线播放| 99视频热这里只有精品免费| 国产亚洲婷婷免费| 国产成人av网站| 久久久噜噜噜久久人人看| 国产一区二区剧情av在线| 精品成a人在线观看| 在线观看免费成人| 亚洲自拍偷拍网站|