示例#1
0
文件: var.c 项目: dioptre/SABR
void addSomeVar(indexList *varList,varData *vdat){

	int *data = vdat->data;

	if(data[0] == symCellVarType)
		createSymCellVar(varList,data[1],data[2],data[3],data[4],data[5],0);
	else if(data[0] == transVarType)
		createTransVar(varList,data[1],0,data[2],data[3]);
}
示例#2
0
文件: tbl.c 项目: dbunker/SABR
// list of sat variables
linkedList createVarList(rootData *rdata,linkedList fullTransNodes){
	
	indexList *varList = createVarIndex();
	
	// board
	treeNode *boardNode = rdata->boardNode;
	setData *boardSet = boardNode->data;
	int boardWidth = boardSet->width;
	int boardHeight = boardSet->height;
	cellData **boardVars = boardSet->setVars;
	int y,x,i,n;
	
	for(y=0;y<boardHeight;y++){
		for(x=0;x<boardWidth;x++){

			if(!boardVars[y*boardWidth+x]) 
				continue;

			cellData *cell = boardVars[y*boardWidth+x];
			int cellName = cell->cellName;
			linkedList symList = cell->symList;

			int symWidth = sizeLinked(symList);
			int **symArray = toArrayLinked(symList);
			
			// since there are only two symbols, symbol and not symbol are used as variables
			if(symWidth > 2){
				for(i=0;i<symWidth;i++){
					int symId = *symArray[i];
				
					for(n=0;n<numStagesGlobal;n++){
						createSymCellVar(varList,symId,cellName,x,y,n,NULL);
					}
				}
			}
			else{
				for(n=0;n<numStagesGlobal;n++){
					int symId = *symArray[0];
					varData *vdat = createSymCellVar(varList,symId,cellName,x,y,n,NULL);
					symId = *symArray[1];
					createSymCellVar(varList,symId,cellName,x,y,n,vdat);
				}
			}
		}
	}
	
	// trans
	int transWidth = sizeLinked(fullTransNodes);
	tempTransVar **transArray = toArrayLinked(fullTransNodes);

	for(i=0;i<transWidth;i++){
		tempTransVar *data = transArray[i];
		int transId = data->transId;
		int transObjId = data->objId;
		int desObjId = data->desObjId;
		
		// there is a variable associated with each transition-stage
		nodeStages *stages = data->stages;
		for(n=stages->start;n<stages->end-1;n++){
			createTransVar(varList,transId,transObjId,desObjId,n);
		}
	}
	
	// used
	for(y=0;y<boardHeight;y++){
		for(x=0;x<boardWidth;x++){

			if(!boardVars[y*boardWidth+x])
				continue;
			cellData *cell = boardVars[y*boardWidth+x];
			
			for(n=0;n<numStagesGlobal-1;n++){
				createUsedVar(varList,cell->cellName,x,y,n);
			}
		}
	}
	
	return varList;
}