STDMETHODIMP EventSourceChangedEventWrap::COMGETTER(Add)(BOOL *aAdd)
{
    LogRelFlow(("{%p} %s: enter aAdd=%p\n", this, "EventSourceChangedEvent::getAdd", aAdd));

    VirtualBoxBase::clearError();

    HRESULT hrc;

    try
    {
        CheckComArgOutPointerValidThrow(aAdd);

        AutoCaller autoCaller(this);
        if (FAILED(autoCaller.rc()))
            throw autoCaller.rc();

        hrc = getAdd(aAdd);
    }
    catch (HRESULT hrc2)
    {
        hrc = hrc2;
    }
    catch (...)
    {
        hrc = VirtualBoxBase::handleUnexpectedExceptions(this, RT_SRC_POS);
    }

    LogRelFlow(("{%p} %s: leave *aAdd=%RTbool hrc=%Rhrc\n", this, "EventSourceChangedEvent::getAdd", *aAdd, hrc));
    return hrc;
}
//!------------------------------------------
void processTask()
{
    FILE * input = NULL;
    input = formBuffer(input);
    FILE * lex_dump = openFile("lex_dump.txt");

    initiateLexemsArr();
    formLexems();
    dumpLexems(lex_dump);

    treeElem_t * tree = getAdd();
    ASSERT_OK(tree);

    if (CUR_TOKEN.Descriptor || Lexems.warn)
    {
        EMPT SLASHES printf("SYNTAX ERROR! CHECK YOUR FUNCTION!\n");
        printf("(%s)\n", CUR_OPER);
        printf("cnt_lex = %d\n", cnt_lex);
        SLASHES EMPT
    }
void CalculatriceModele::getSum(int type){
    if(pile.size()>=1){
        Constante* a = pile.pop();
        if(typeid (*a).name()==typeid (Entier).name()){
            Entier* e = dynamic_cast<Entier*>(a);
            int k = e->GetEntier();

            if(pile.size()>=k)
            {
                for(int i=0; i<k-1; i++){
                    emit getAdd(type);
                }

                Constante* res = pile.pop();
                pile.push(res);
                if(typeid (*res).name()==typeid (Expression).name()){
                    emit getExpression();
                }
            }
            else {
                logger1->Write(&LogMessage(ERROR,"pas assez d'expressions"));
                logger2->Write(&LogMessage(ERROR,"pas assez d'expressions"));
                pile.push(a);}
        }else{
            pile.push(a);
            logger1->Write(&LogMessage(ERROR,"type non conforme"));
            logger2->Write(&LogMessage(ERROR,"type non conforme"));
        }

        emit finOp(&pile);
    }
    else{
    logger1->Write(&LogMessage(ERROR,"taille pile insuffisante"));
    logger2->Write(&LogMessage(ERROR,"taille pile insuffisante"));
    }
}
Exemple #4
0
void dp(int cur)
{
	flag[cur] = 1;
	int stcnt = 0;
	int extra[4][2],recid[4][2];
	int add[4];
	for(int i=0;i<4;i++)
	{
		add[i] = MAX;
		mn[cur][i] = MAX;
		for(int j=0;j<2;j++)
		{
			extra[i][j] = MAX;
			recid[i][j] = MAX;
		}
	}
	int cnt = 0;
	int sum = 0;
	for(Node * tmp = node[cur].next ; tmp != NULL ; tmp = tmp->next)
	{
		int id = tmp->id;
		if(flag[id] == -1)
		{
			stcnt ++;
			dp(id);
			sum += mn[id][3];
	/*
			if(cur == 1)
				printf("%d %d\n",id,cnt);
	*/
			int ss = 0;
			if(cur == 1)ss = -1;
			deal(id,cnt,ss,add,extra,recid);
		//	printf("cnt:%d\n",cnt);
		}
	}
	if(stcnt > 1)
	{
		int ref = 0;
		if(cur == 1)
			ref = -1;
		add[2] = getAdd(ref,extra,recid);
	}
	if(stcnt == 0)
	{
		mn[cur][0] = 0;
		mn[cur][1] = 0;
		mn[cur][3] = 0;
		return;
	}
	int lim = Min(3,stcnt+1);
	for(int i=0;i<lim;i++)
	{
		mn[cur][i] = sum + add[i] + stcnt - subtract[i];
	/*	
		if(cur == 1)
			printf("cur : %d kind %d sum %d add %d addedge%d\n",cur,i,sum,add[i],stcnt-subtract[i]);
	*/	
		if(mn[cur][i] < mn[cur][3])
			mn[cur][3] = mn[cur][i];
	}
}