Beispiel #1
0
/* virtual */ void FsLazyWindowApplication::Interval(void)
{
	int lb,mb,rb,mx,my;
	FsGetMouseEvent(lb,mb,rb,mx,my);
	mouseOn=PickedNode(mx,my);

	auto key=FsInkey();
	if(FSKEY_ESC==key)
	{
		SetMustTerminate(true);
	}
	if(FSKEY_D==key && nullptr!=mouseOn)
	{
		btree.Delete(mouseOn);
		VerifyTree();
	}
	if(FSKEY_L==key && nullptr!=mouseOn)
	{
		btree.RotateLeft(mouseOn);
		VerifyTree();
	}
	if(FSKEY_B==key)
	{
		BreadthFirstTraversal(btree.GetRoot());
	}

	needRedraw=true;
}
Beispiel #2
0
int BreadthFirstTraversal(struct queue *q,Node *root,Node *subformula[],int *i)
{
	double infval = mxGetInf();	
	Node *p = NULL;
	if (root == NULL) return 0;

	enqueue(q,root);									/* enqueue the root node*/

	while (!queue_empty_p(q)) {
		if(!q->first){
			p = NULL;
		}
		else{											/* set subformula index*/
			p = dupnode(q->first);
			p = q->first;
			p->index = *i;
			subformula[*i] = dupnode(p);
			subformula[*i] = p;
			subformula[*i]->BoundCheck = 0;
			subformula[*i]->UBound = -infval;
			subformula[*i]->LBound = infval;
			subformula[*i]->LBound_nxt = infval;
			subformula[*i]->UBindicator = 0;
			subformula[*i]->LBindicator = 0;
			subformula[*i]->LBindicator_nxt = 0;
			subformula[*i]->loop_end = 0;

			(*i)++;
		}
		
		dequeue(q);
		if (p->lft != NULL)
			BreadthFirstTraversal( q,p->lft,subformula,i);
		if (p->rgt != NULL)
			BreadthFirstTraversal( q,p->rgt,subformula,i);

	}
	return (*i-1);
} 
Beispiel #3
0
mxArray *get_polarity(Miscellaneous *miscell, PMap *predMap, Node *phi)
{
    /* Peer reviewed on 2013.07.22 by Dokhanchi, Adel */
    const char *fields[] = {"polarity", "index"};
    mxArray *tmp, *Array;
	/*mwSize *dims;*/
    mwSize dims;
	double *pr;
	int temp_pol = 0;
	Polarity *p;
	int i = 0,ii;
	int iii=0;								/* used for check the index for subformula*/
	int jjj=0;								/* length-1 of the subformula array */
	int *qi;
	int temp = 1;
#define subMax 200							/*	biggest number of iterations the subformula could store*/
	Node *subformula[subMax];				/* subformula array as a cross-reference for the phi*/

	/* Initialize some variables for BFS */
	queue q;
	queue *Q = &q;
	init_queue(Q);							/*initial the queue*/
	qi = &temp;
	/*----------------------------------*/

	p = (Polarity *)emalloc(sizeof(Polarity));
	p->polar = UNDEFINED_POLAR;
	tmp = mxCreateStructMatrix(1, 1, 2, fields);

	/*-----BFS for formula--------------*/
	jjj = BreadthFirstTraversal(Q,phi,subformula,qi);
		for(iii=1; iii<jjj; iii++)			/*	check the index for subformula*/
		{
			if(iii != subformula[iii]->index)
				mexErrMsgTxt("mx_dp_taliro: subformula not in right index!");
		}


	make_predicate_list(miscell, p);

/* predicate list*/
	pr = mxCalloc(miscell->dp_taliro_param.nPred, sizeof(double));
	/*dims = &(miscell->dp_taliro_param.nPred);*/
    dims = (mwSize)(miscell->dp_taliro_param.nPred);
	Array = mxCreateDoubleMatrix (1, dims, mxREAL);
	for(i = 0;i<miscell->dp_taliro_param.nPred;i++)
	{
		pr[i] = miscell->pList.pindex[i];
		if(pr[i] == -1)
		{
			pr[i] = 0;
		}
	}
	mxSetPr(Array,pr);
/* predicate list ends*/
	/* polarity calculation*/
	i = jjj;
	while(i>0)
	{
		switch (subformula[i]->ntyp)
		{
			case TRUE:
				subformula[i]->pol = UNDEFINED_POLAR;
				break;	
			case FALSE:
				subformula[i]->pol = UNDEFINED_POLAR;
				break;	
			case VALUE:
				subformula[i]->pol = UNDEFINED_POLAR;
				break;	
			case PREDICATE:
              		/* match predicate index*/
        		for(ii = 0; ii < miscell->dp_taliro_param.nPred; ii++)
                {
                    if(miscell->predMap[ii].str != NULL)
                    {
                        if(strcmp(subformula[i]->sym->name,predMap[ii].str)==0)
                        {
                            if(predMap[ii].parameter!=NULL){
                                subformula[i]->pol = POSITIVE_POLAR;   
                            }
                            else{
                   				subformula[i]->pol = UNDEFINED_POLAR;
                           }
                    	}
                    }
                }
				break;
			case NOT:
				subformula[i]->pol = flip(subformula[i]->lft->pol);
				/*p->polar = flip(p->polar);*/
				break;
			case AND:
				subformula[i]->pol = mix(subformula[i]->lft->pol, subformula[i]->rgt->pol);
				break;
			case OR:
				subformula[i]->pol = mix(subformula[i]->lft->pol, subformula[i]->rgt->pol);
				break;
			case NEXT:
				subformula[i]->pol = subformula[i]->lft->pol;
				break;
			case WEAKNEXT:
				subformula[i]->pol = subformula[i]->lft->pol;
				break;
			case ALWAYS:
				if(subformula[i]->time.l_par == 1 && subformula[i]->time.u_par == 0)
				{
					subformula[i]->pol = pos(subformula[i]->rgt->pol);
				}
				else if(subformula[i]->time.l_par == 0 && subformula[i]->time.u_par == 1)
				{
					subformula[i]->pol = neg(subformula[i]->rgt->pol);
				}
				else if(subformula[i]->time.l_par == 1 && subformula[i]->time.u_par == 1)
				{
					subformula[i]->pol = MIXED_POLAR;
				}
				else
				{
					subformula[i]->pol = subformula[i]->rgt->pol;
				}
				break;
			case EVENTUALLY:
				if(subformula[i]->time.l_par == 1 && subformula[i]->time.u_par == 0)
				{
					subformula[i]->pol = neg(subformula[i]->rgt->pol);
				}
				else if(subformula[i]->time.l_par == 0 && subformula[i]->time.u_par == 1)
				{
					subformula[i]->pol = pos(subformula[i]->rgt->pol);
				}
				else if(subformula[i]->time.l_par == 1 && subformula[i]->time.u_par == 1)
				{
					subformula[i]->pol = MIXED_POLAR;
				}
				else
				{
					subformula[i]->pol = subformula[i]->rgt->pol;
				}
				break;
			case U_OPER:
				if(subformula[i]->time.l_par == 1 && subformula[i]->time.u_par == 0)
				{
					temp_pol = NEGATIVE_POLAR;
					subformula[i]->pol = mix(temp_pol,mix(subformula[i]->lft->pol,subformula[i]->rgt->pol));
				}
				else if(subformula[i]->time.l_par == 0 && subformula[i]->time.u_par == 1)
				{
					temp_pol = POSITIVE_POLAR;
					subformula[i]->pol = mix(temp_pol,mix(subformula[i]->lft->pol,subformula[i]->rgt->pol));
				}
				else if(subformula[i]->time.l_par == 1 && subformula[i]->time.u_par == 1)
				{
					subformula[i]->pol = MIXED_POLAR;
				}
				else
				{
					subformula[i]->pol = mix(subformula[i]->lft->pol,subformula[i]->rgt->pol);
				}
				break;
			case V_OPER:
				if(subformula[i]->time.l_par == 1 && subformula[i]->time.u_par == 0)
				{
/* 					temp_pol = POSITIVE_POLAR;
 					subformula[i]->pol = mix(temp_pol,mix(subformula[i]->lft->pol,subformula[i]->rgt->pol));*/
					temp_pol = NEGATIVE_POLAR;
					subformula[i]->pol = flip(mix(temp_pol,mix(flip(subformula[i]->lft->pol),flip(subformula[i]->rgt->pol))));
				}
				else if(subformula[i]->time.l_par == 0 && subformula[i]->time.u_par == 1)
				{
/* 					temp_pol = NEGATIVE_POLAR;
 					subformula[i]->pol = mix(temp_pol,mix(subformula[i]->lft->pol,subformula[i]->rgt->pol));*/
					temp_pol = POSITIVE_POLAR;
					subformula[i]->pol = flip(mix(temp_pol,mix(flip(subformula[i]->lft->pol),flip(subformula[i]->rgt->pol))));
				}
				else if(subformula[i]->time.l_par == 1 && subformula[i]->time.u_par == 1)
				{
					subformula[i]->pol = MIXED_POLAR;
				}
				else
				{
					subformula[i]->pol = mix(subformula[i]->lft->pol,subformula[i]->rgt->pol);
				}
				break;
			default:
				break;
		}
	i--;
	}
	/* polarity calculation ends*/


	mxSetField(tmp, 0, "polarity", mxCreateDoubleScalar(subformula[1]->pol));
	mxSetField(tmp, 0, "index", Array);

	return (tmp);
}